Tôi có một truy vấn cố gắng tìm mọi thứ trong một vị trí địa lý nhất định, nhưng kết quả mà nó mang lại là một chút ... lạ.Truy vấn những thứ gần vị trí địa lý?
Trước đây tôi đã đăng chủ đề này và cộng đồng đã giúp tôi tìm một công thức mà tôi cần: Querying within longitude and latitude in MySQL nhưng truy vấn hiện cung cấp kết quả thực sự lập dị.
dữ liệu của tôi là xung quanh thành phố San Francisco trong đó có các lat/lng 37.780182 , -122.517349
Query:
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
Vì vậy, như bạn thấy - ngay cả khi tôi làm cho bán kính 10000 nó vẫn doesn' t tìm thấy nhiều, vì vậy tôi tự hỏi nếu truy vấn của tôi là tắt. Một số kết quả nó mang lại thậm chí có 0,0 cho lat/lng đó là cách của tôi để biểu thị rằng không có lat/lng cho bản ghi đó.
Sau đây là cách công thức có nghĩa vụ phải trông giống như:
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;
Cảm ơn bạn và xin lỗi cho câu hỏi đau đớn dài! Nhân tiện, tôi đang sử dụng MySQL.
Hmmm,
Tôi chỉ thử với truy vấn chính xác mà bạn đã đưa ra và nó làm việc với độ chính xác 50%. Dưới đây là một mẫu của tập dữ liệu:
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 |
Vì vậy, bây giờ là truy vấn trả lại tất cả các mục mà rất nhiều dặm, nhưng không phải là mặt hàng mà là dưới 100 dặm. Giống như mặt hàng này (37.787144, -122,493263) không bao giờ bị quay trở lại mặc dù nó chỉ là khoảng 50 dặm từ điểm xuất phát. Bạn có biết tại sao không?
Tại sao bạn không sử dụng phần mở rộng không gian của MySQL cung cấp các chức năng để loại công cụ này? http://dev.mysql.com/doc/refman/5.5/en/spatial-extensions.html –
Chỉ cần đọc qua một số chủ đề ở đó. Không chắc tôi hiểu nó quá rõ ràng, nhưng có thể dường như quá mức cần thiết cho nhu cầu của tôi. Nó có làm cho mọi việc nhanh hơn nhiều để truy vấn không? Bạn có nghĩ rằng đó là giải pháp tốt hơn nhiều so với một trong những chúng tôi đang thảo luận trong chủ đề này? Cảm ơn! – Genadinik