私は特定のジオロケーション内で物事を見つけようとするクエリを持っていますが、結果は少し奇妙です。ジオロケーションの近くにあるものを照会しますか?
私はこのスレッドを以前に投稿していましたが、私は必要な数式を見つけるのに役立ちました:Querying within longitude and latitude in MySQLしかし、このクエリは本当に不吉な結果をもたらします。
私のデータがあり、サンフランシスコの街を囲むされ緯度/経度37.780182 , -122.517349
クエリ:だから
SELECT
id,
hike_title,
lat,
lng,
(3959 * acos( cos(radians(37))
* cos(radians(lat))
* cos(radians(lng) - radians(37.780182))
+ sin(radians(-122.517349)) * sin(radians(lat))
)
) AS distance
FROM
my_awesome_table
HAVING
distance < 10000
ORDER BY
distance
LIMIT
0 , 50
あなたが見るように - 私は半径10000を作る場合でも、それはまだdoesnの」多くを見つけるので、私は私のクエリがオフになっているのだろうかと思います。それが戻った結果の中にはlat/lngの値が0,0であっても、そのレコードのlat/lngがないことを示す私の方法です。ここで
は、式が見えるようになっている方法です。
SELECT
id,
(3959 * acos( cos(radians(37))
* cos(radians(lat))
* cos(radians(lng) - radians(-122))
+ sin(radians(37)) * sin(radians(lat))
)
) AS distance
FROM
markers
HAVING
distance < 25
ORDER BY
distance
LIMIT
0 , 20;
はありがとうと痛々しいほど長い質問には申し訳ありません!ところで、私はMySQLを使用しています。
うーん、
私はちょうどあなたが与えた正確なクエリを使用してみました、それは50%の精度で働いていました。ここでは、データ・セットのサンプルです:
lat lng
| 37.223465 | -122.090363 |
| 39.320980 | -111.093735 |
| 38.031715 | -84.495132 |
| 37.787144 | -122.493263 |
| 52.975361 | -1.458620 |
| 40.848557 | -111.906883 |
| 40.572498 | -111.859718 |
は、だから今のクエリは、すべての多くのマイル離れたアイテムではなく、離れて100マイル下にあったアイテムが返されました。この項目(37.787144、-122.493263)のように、起点から約50マイル離れていても返されることはありませんでした。なぜあなたは知っていますか?
なぜあなたは原料のこの種のための機能を提供MySQLの空間の拡張機能を使用していませんか? http://dev.mysql.com/doc/refman/5.5/en/spatial-extensions.html –
トピックのいくつかを読んでください。私はそれをあまりにもよく理解しているかどうかはわかりませんが、おそらく私の必要には過剰なものです。物事をより迅速にクエリすることができますか?このスレッドで議論しているソリューションよりはるかに優れたソリューションだと思いますか?ありがとう! – Genadinik