2011-10-16 60 views
5

Tôi có một cơ sở dữ liệu tọa độ trong lược đồ:Chọn tọa độ nằm trong bán kính của một điểm trung tâm?

ID: Latitude: Longitude: Tên: desc

tôi đã thiết lập ứng dụng bản đồ google của tôi để hiển thị các dấu hiệu một cách hiệu quả trên màn hình. Tuy nhiên tôi cần phải thêm một tính năng khác theo đó người dùng có thể xem tất cả các con trỏ nằm trong bán kính từ một điểm trung tâm.

Làm thế nào tôi sẽ viết lên một câu lệnh SQL của các loại:

Select all pointers that fall within a 10 mile radius of X & Y 

Trả lời

2

Bạn có thể cần phải làm điều này trong hai bước. Chọn các điểm nằm trong một hình vuông 20 dặm với trung tâm là X, Y. Giả sử bạn tính toán hàng đầu, bên trái và phía dưới, tọa bên phải của hình vuông đầu tiên bạn có thể nhận được tất cả các điểm bên trong vuông từ cơ sở dữ liệu với:

select * from coordinates where longitude < right and longitude > left and 
latitude < top and latitude > bottom; 

Bước thứ hai là để xem liệu tập hợp các điểm nằm bên trong vòng bán kính 10 dặm. Tại thời điểm này, tôi sẽ bị cám dỗ sử dụng các bản đồ của Google để tính toán khoảng cách giữa các điểm và tâm của hình vuông của bạn bằng cách sử dụng chức năng google.maps.geometry.spherical.computeDistanceBetween(from:LatLng, to:LatLng, radius?:number). Kiểm tra câu trả lời là ít hơn 10 dặm. Hàm này sử dụng bán kính của trái đất làm mặc định.

+0

này sẽ làm việc (trừ khi bạn 'quá xa ở phía bắc hoặc phía nam, gần các cực - nơi hình vuông của bạn trông giống như một hình thang (hình thang) hoặc thậm chí là một hình tam giác). –

13

SQL dưới đây nên làm việc:

SELECT * FROM Table1 a 
WHERE (
      acos(sin(a.Latitude * 0.0175) * sin(YOUR_LATITUDE_X * 0.0175) 
       + cos(a.Latitude * 0.0175) * cos(YOUR_LATITUDE_X * 0.0175) *  
       cos((YOUR_LONGITUDE_Y * 0.0175) - (a.Longitude * 0.0175)) 
      ) * 3959 <= YOUR_RADIUS_INMILES 
    ) 

này được dựa trên các định luật cos, để biết thông tin chi tiết hơn về chủ đề này, hãy kiểm tra bài viết này - http://www.movable-type.co.uk/scripts/latlong.html

+0

Vĩ độ là Y, Kinh độ là X. Phương tiện nào trong trường hợp này? – CompanyDroneFromSector7G

+0

Điều này làm việc tuyệt vời! Đối với bán kính ở Km thay vì Miles, thay thế 3959 bằng 6371 và nhập bán kính của bạn theo km. – SAR622

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