2012-05-12 50 views
5

Tôi có 2 bảng:SQL Chọn Radius tìm kiếm dựa trên Latitude Longitude

Events: 
- id 
- name 
- place 

Places: 
- id 
- name 
- lat 
- lng 

Tôi muốn lấy tất cả các sự kiện trong 10KM radius (dựa trên nơi lat & lng) từ currentlatlng. Làm thế nào tôi có thể làm điều đó?

Cảm ơn!

+1

có thể trùng lặp: http://stackoverflow.com/questions/1006654/fastest-distance- lookup-given-latitude-longitude –

+0

10km cần bao nhiêu? Cách tiếp cận chính xác liên quan đến một số lượng công bằng của toán học rất chậm để thực hiện trong SQL. Nó có thể là tốt hơn để lấy một bộ lớn hơn một chút và chuyển nó cho khách hàng cho công việc cuối cùng, hoặc sử dụng một bộ gần đúng. –

Trả lời

1

Có lẽ đây sẽ giúp bạn http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

Về cơ bản vấn đề là lat/lng là tọa độ cầu (lat và lng là góc), và bạn muốn thực hiện một tìm kiếm sử dụng một khoảng cách tuyến tính trên bề mặt hình cầu. Sau đó, bạn đang cố gắng để so sánh hai điều khác nhau, tôi có nghĩa là, góc với km. Để làm điều đó, bạn phải thực hiện một phép biến đổi tọa độ và sau đó so sánh.

0

Hope truy vấn đơn giản này giúp

SELECT 
    * 
FROM 
    `locator` 
WHERE 
    SQRT(POW(X(`center`) - 49.843317 , 2) + POW(Y(`center`) - 24.026642, 2)) * 100 < `radius` 

chi tiết tại đây http://dexxtr.com/post/83498801191/how-to-determine-point-inside-circle-using-mysql

+1

Điều này không hoạt động. Vấn đề là các đơn vị khác nhau; 1 độ vĩ độ/kinh độ là số km khác nhau tùy thuộc vào vĩ độ và kinh độ đã nhập. –

3

Nếu bạn sẵn sàng để sử dụng một phần mở rộng, mở rộng không gian địa lý, trong MySQL 5.6 và trên, được thiết kế để giải quyết chính xác kiểu này câu hỏi. Bạn sẽ cần tạo chỉ mục không gian trên bảng địa điểm của mình:

ALTER TABLE places ADD SPATIAL INDEX lat, lng 

select name from places 
order by st_distance(point(@lng, @lat), point(lng, lat)) 
limit 10 

Việc tìm kiếm thực tế khoảng cách thực tế là một tính toán bit nặng. Các bài sau đây đưa ra một số phương pháp bạn có thể muốn thử: http://www.plumislandmedia.net/mysql/using-mysqls-geospatial-extension-location-finder/

Đối với chi tiết hơn, nhìn vào http://www.percona.com/blog/2013/10/21/using-the-new-spatial-functions-in-mysql-5-6-for-geo-enabled-applications/

Các vấn đề liên quan