Belirli bir coğrafi konum içinde bir şeyler bulmaya çalışan bir sorgum var, ancak geri getirdiği sonuçlar biraz garip.Coğrafi konumun yakınındaki şeyler için sorgular mı?
Daha önce bu threadi yayınlamıştım ve topluluk, ihtiyacım olan bir formülü bulmama yardımcı oldu: Querying within longitude and latitude in MySQL ama şimdi sorgu gerçekten tuhaf sonuçlar veriyor.
My veri vardır San Francisco kenti çevreleyen edilirenlem/Ing 37.780182 , -122.517349
Sorgu: Yani
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
Gördüğünüz gibi - Ben yarıçapı 10000 yapmak bile hala gelmez' Çok fazla bulmak, bu yüzden benim sorgu kapalı ise merak ediyorum. Geri getirdiği sonuçlardan bazıları, lat/lng için 0,0 değerine sahiptir, bu da bu kayıt için lat/lng olmadığımı gösterme yolumdur. İşte
formülü gibi bakmak gerekiyordu nasıl:
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;
teşekkür ederiz ve acı uzun soru için üzgünüm! Bu arada, MySQL kullanıyorum.
Hmmm
,Sadece verdi tam sorgu ile denenmiş ve% 50 doğrulukla çalıştı.
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 |
Yani şimdi sorgu tüm kilometrelerce uzakta olduğunu öğeleri değil, 100 mil uzakta altındaydı ürünler iade: Burada veri setinin bir örneğidir. Bu öğe (37.787144, -122.493263) gibi, hiçbir zaman başlangıç noktasından yaklaşık 50 mil olmasına rağmen iade edilmiyordu. Nedenini biliyor musun?
Neden bu türden şeylere yönelik işlevleri sağlamak MySQL'in Mekansal uzantılarını kullanmıyorsunuz? http://dev.mysql.com/doc/refman/5.5/en/spatial-extensions.html –
Sadece bazı konuları burada okuyun. Henüz çok iyi anladığımdan emin değilim, ama muhtemelen ihtiyaçlarımın çok üzerinde görünüyor. Sorgulamak için işleri daha hızlı mı yapıyor? Bu iş parçasında tartıştığımızdan çok daha iyi bir çözüm olduğunu düşünüyor musunuz? Teşekkürler! – Genadinik