PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

como usar o valor de uma coluna como entrada para uma operação espacial


Se eles tiverem que estar em uma única consulta, basta usar os valores de saída de ST_X e ST_Y no ST_MakePoint função. Se os valores x e y estiverem em colunas ou forem o resultado de uma operação, basta passar esses valores na função:
SELECT ST_MakePoint(column_x,column_y) FROM t;

Ou caso estejam dentro de geometrias..
SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;

Usando um CTE ou uma subconsulta (ver comentários). O princípio é semelhante, mas usando um CTE você meio que cria um conjunto temporário e o usa como uma tabela. O exemplo a seguir gera valores x e y e o nomeia j , então na consulta externa você pega esses valores para criar um ponto com outro SELECT , mas desta vez usando j :
WITH j AS (
  SELECT 1 AS X, 2 AS y -- your big query goes here
) 
SELECT ST_MakePoint(X,Y) FROM j;

Aplicando-o à sua consulta ..

Demonstração (subconsulta):db<>fiddle

Demonstração (CTE):db<>fiddle
WITH j AS (
 SELECT 
    ST_X((ST_DumpPoints(ST_AsText(ST_Intersection(
        ST_SetSRID(
            ST_MakeEnvelope(
            ST_X(point),
            ST_Y(point),
            ST_X(point)+{width}, 
            ST_Y(point)+{height}),
            25832),ST_Buffer(j.geometry, {bufferRadius}) 
        )))).geom) AS XOfLowerLeftOfGridCellIntersectingWithBuffer,
        ST_Y((ST_DumpPoints(ST_AsText(ST_Intersection(
        ST_SetSRID(
            ST_MakeEnvelope(
            ST_X(point),
            ST_Y(point),
            ST_X(point)+{width}, 
            ST_Y(point)+{height}),
            25832),ST_Buffer(j.geometry, {bufferRadius}) 
        )))).geom) AS YOfLowerLeftOfGridCellIntersectingWithBuffer, 
    ....
)
SELECT ST_MakePoint(XOfLowerLeftOfGridCellIntersectingWithBuffer,
                    YOfLowerLeftOfGridCellIntersectingWithBuffer)
FROM j                  

Alguns pensamentos sobre sua consulta (sem poder ver o quadro geral):
  • ST_AsText definitivamente não faz sentido em sua consulta. Você pode se livrar dele.
  • Observe que o código que você está usando para extrair as coordenadas xey são idênticos e ST_DumpPoints já retorna pontos. Portanto, acredito que sua lógica esteja falha, pois você está recriando o mesmo ponto que dividiu anteriormente em valores separados.