1

特定の地点から半径 500 メートル以内にあるすべてのストリート名を照会したいと考えています。複数の投稿が、 Haversine 式またはその何らかのバージョンを使用した Google ストア ロケーターの例を参照しています。しかし、より単純化された解決策を持ついくつかの投稿にも出くわしました。

以下に示すように、緯​​度と経度の変数に追加することで、ポイントを x、y 座標として扱うだけです。

これが本当に複雑になることなくmysqlにクエリを実行し、それでも良い結果が得られる最速の方法であるかどうか、私はさまよっていました。私はまだ多くのデータを持っていないので、正しい軌道に乗っているかどうか知りたい. この方法を使用することによる欠点や不正確さはありますか?

私が得られないのは、これがどのように範囲のような半径になるかということです。それは一方向のクエリのように見えますか?

Distance = 0.1; // Range in degrees (0.1 degrees is close to 11km)
LatN = lat + Distance;
LatS = lat - Distance;
LonE = lon + Distance;
LonW = lon - Distance;

...Query DB with something like the following:
SELECT *
FROM table_name
WHERE 
(store_lat BETWEEN LatN AND LatS) AND
(store_lon BETWEEN LonE AND LonW)
4

2 に答える 2

0

GIS サイトでこの質問をすることをお勧めします。私は同様の問題に対してこの回答を自分で使用しました。提案されたソリューションがどのように高速になるかはわかりますが、4つの点は円ではなく正方形を表しているため、「半径」とは見なされないことに注意してください。

于 2013-05-04T21:46:32.043 に答える
0

そのために ElasticSearch を使用できます。MySQL は常に ES よりも遅くなります。

于 2014-04-07T12:39:47.337 に答える