1

postgres dbに接続されたパノラマビューアを作成しています。建物名、通り名、特定の範囲内の関心点をダウンロードする必要があります。この件について何か光を当てていただければ幸いです。

よろしく、

4

2 に答える 2

3

あなたが私たちにいくつかのテーブル仕様を与えなかったので、人工的な例がしなければならないでしょう。

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_makepointwithをカプセル化しました。st_setsridGPSは通常、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)
于 2012-12-02T07:36:07.723 に答える
2

試す

select * FROM 
    LayerName
WHERE
    ST_Dwithin(LayerName.the_geom, 
    GeomFromText('POINT(x,y)',-1)
    , radius)

layerName はレイヤー、GPS の x,y、-1 は srid、radius はバッファーの半径 (double) です。

于 2012-12-02T07:57:18.340 に答える