5

長方形の場所の北、東、南、西の値があります。その長方形の場所の境界内にある場所 (緯度/経度) のみを検索するにはどうすればよいですか?

ここに画像の説明を入力

データベース内の場所 (緯度/経度) を検索する必要があることに注意してください。特定の長方形の境界内にあるデータベース内の場所を見つける必要があり、マップ上にそれらのマーカーを描画します。

私はGoogle 検索について話しているのではありません。検索用の API は、検索をフィルタリングするための四角形の境界を渡すことを既にサポートしています。

API は次のgooglemapsようにこれを行うことができます。

var request = {
    bounds: myMapObject.getBounds(), // Search only within the Bound of the Map
    query: someTextToFind
};

また

var isWithInMapsBounds = myMapObject.getBounds().contains(myLocation);

しかし、データベースから場所を取得しながらそれを行う必要があります。つまり、サーバー側です。

この機能を実現する方法、誰かが私を正しい方向に導くことができますか?

編集:

データベース内を検索したい。そのため、SQL ソリューションが必要です。

4

2 に答える 2

3
DECLARE @Bounds AS Geography = GEOMETRY::STGeomFromText('polygon-wkt-here',0)

SELECT columns-list
FROM   table
WHERE  1 = @Bounds.STIntersects(table.point-column)

ポイントの位置を境界ボックスの北/南/東/西座標と比較できない理由について、ここで暗闇の中にいる人のための簡単なメモ:

境界ボックスは、緯度/経度に沿っていない場合があります (たとえば、北/南/東/西の線が緯度/経度軸に従っていない場合があります)。これは、緯度/経度の地図投影で平面の長方形を描画した場合に発生します。歪みは、ポイントがバウンディング ボックスの端に近づくほど、また赤道から遠ざかるほど顕著になります。

Geography データ型を使用する 2 つ目の理由は、長方形だけでなく、あらゆる多角形に対してこれらの種類の操作を実行するための統一された方法を提供することです。これで、単一のポイントがボックス内にあるかどうかを比較したり、郵便番号内のすべての住所をすべて同じコードで検索したりできます。

于 2013-03-23T07:34:52.980 に答える
1

SQL クエリ

SELECT *  FROM mytable WHERE lat >= bottomlat  AND lat <= toplat AND lng >= leftlng AND lng <= rightlng

本初子午線または赤道をまたぐ場合は、クエリを変更する必要があります

SELECT * FROM mytable WHERE lat >=bottomlat AND lat <= toplat  AND   lng >= leftLng AND lng < 0 
UNION
SELECT * FROM mytable WHERE lat >=bottomlat AND lat <= toplat  AND  lng >= 0 AND lng  <= rightLng
于 2013-03-23T09:22:18.603 に答える