sql >> データベース >  >> RDS >> PostgreSQL

空間演算への入力として列の値を使用する方法

    それらを単一のクエリに含める必要がある場合は、ST_Xの出力値を使用するだけです。 およびST_Y ST_MakePoint内 関数。 x値とy値が列にあるか、操作の結果である場合は、関数でこれらの値を渡す必要があります。

    SELECT ST_MakePoint(column_x,column_y) FROM t;
    

    または、ジオメトリ内にある場合。

    SELECT ST_MakePoint(ST_X(a_geom),ST_Y(a_geom)) FROM t;
    

    CTEの使用 またはサブクエリ(コメントを参照)。原則は似ていますが、CTEを使用して一時的なセットを作成し、それをテーブルとして使用します。次の例では、x値とy値を生成し、jという名前を付けます。 次に、外部クエリでこれらの値をキャッチして、別のSELECTでポイントを作成します。 、ただし今回はjを使用します :

    WITH j AS (
      SELECT 1 AS X, 2 AS y -- your big query goes here
    ) 
    SELECT ST_MakePoint(X,Y) FROM j;
    

    クエリに適用する..

    デモ(サブクエリ): db<>fiddle

    デモ(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                  
    

    クエリに関するいくつかの考え(全体像を見ることができません):

    • ST_AsText クエリでは間違いなく意味がありません。あなたはそれを取り除くことができます。
    • x座標とy座標を抽出するために使用しているコードは同一であり、ST_DumpPoints すでにポイントを返します。したがって、以前に別々の値に分割したのと同じポイントを再作成しているため、ロジックに欠陥があると思います。



    1. MySQL GROUP BY列で、さまざまな列に値を表示します

    2. PDO見積もり方法

    3. LIKEコマンドMysql

    4. パフォーマンスの驚きと仮定:GROUP BY vs. DISTINCT