3

特定の境界内の地理オブジェクトを検索するにはどうすればよいですか? たとえば、DB に保存されている Lat/Lon 座標を持つオブジェクトがいくつかあります。ここで、特定のポイントの周囲 (10 マイルまたは 20 マイル) にあるすべてのオブジェクトを取得したいと考えています。

私がしなければならないことは、次のようなクエリを作成することだと思います。

SELECT * FROM objects o where o.lat < (myPositionLat+x) AND o.lon < (myPositionLon+y)

これは正しいですか?x と y の値を決定/設定するにはどうすればよいですか?

4

1 に答える 1

2

経度間の距離は一定ではないことに注意する必要があります。緯度は平行で、約 111 キロメートル (69 マイル) 離れていますが、経度は赤道の 111 キロメートルで最も広くなり、極では徐々にゼロに収束します。

北緯または南緯 40 度では、経度間の距離は約 85 キロメートル (53 マイル) ですが、緯度間の距離は 111 キロメートルでほぼ同じままです (出典)。地理オブジェクトが特定の領域のみに制限され、非常に大まかなフィルターが許容される場合は、この情報を使用してxオフセットyを決定できます。

ただし、オブジェクトが世界中でまばらになる場合は、代わりに大圏距離を計算する必要があります。幸いなことに、これはhasersine formulaを使用すると比較的簡単です。さらに読み、Chris Veness による緯度/経度ポイント間の距離、方位などの計算で実装を確認することをお勧めします。

少数の地理オブジェクトしかない場合は、ポイントから各地理オブジェクトまでの大円距離を簡単に計算できます。次に、結果リストを距離で並べ替え、マイルまたはキロメートルのしきい値でフィルタリングします。

ただし、多数の地理オブジェクトを使用する場合は、空間インデックス機能を備えたデータベースの使用を検討する必要があります。MySQLPostgreSQLおよびSQL Server 2008にはすべて、地理空間機能 (ネイティブまたは拡張機能を介して) があり、これには、空間インデックスと haversine 式の実装が含まれます。

于 2010-05-04T03:51:37.500 に答える