postgres dbに接続されたパノラマビューアを作成しています。建物名、通り名、特定の範囲内の関心点をダウンロードする必要があります。この件について何か光を当てていただければ幸いです。
よろしく、
postgres dbに接続されたパノラマビューアを作成しています。建物名、通り名、特定の範囲内の関心点をダウンロードする必要があります。この件について何か光を当てていただければ幸いです。
よろしく、
あなたが私たちにいくつかのテーブル仕様を与えなかったので、人工的な例がしなければならないでしょう。
WITH yourpoint AS (
SELECT
st_transform(st_setsrid(st_makepoint(yourlon, yourlat), 4326), yourgeomsrid) AS point
)
SELECT
building.name
FROM
building, yourpoint
WHERE
ST_Dwithin(building.the_geom, yourpoint.point, 400)
それでは、興味深い部分を見てみましょう。最初に、正しい座標系で指定されたポイントに対応するためのジオメトリが必要です。そのようなポイントを生成するサブステートメント(CTE)を作成しました。たぶん、ポイントはデータベース内にあります。
重要:距離を計算するには、指定するポイントとジオメトリが同じ座標系にある必要があります。したがって、ポイントに座標系情報を追加するst_makepoint
withをカプセル化しました。st_setsrid
GPSは通常、SRID 4326を備えたWGS84にあります。次に、そのポイントをポイントデータの座標系(SRID)に変換する必要があります。したがって、SRIDを知っておく必要があります。
近くの建物を見つけるためのすべての魔法は、WHERE
条項で発生します。ST_Dwithin
相互に400(座標系の単位で測定)未満の距離を持つすべてのジオメトリを検索します。
詳細については、postgisのマニュアルを参照してください。
座標がWGS84の場合は、geographyデータ型を使用する必要があります。
WITH yourpoint AS (
SELECT
geography(st_setsrid(st_makepoint(yourlon, yourlat), 4326)) AS point
)
SELECT
building.name
FROM
building, yourpoint
WHERE
ST_Dwithin(Geography(building.the_geom), yourpoint.point, 400)
試す
select * FROM
LayerName
WHERE
ST_Dwithin(LayerName.the_geom,
GeomFromText('POINT(x,y)',-1)
, radius)
layerName はレイヤー、GPS の x,y、-1 は srid、radius はバッファーの半径 (double) です。