2012-12-19 32 views
7

Tôi đang tạo ứng dụng dành cho thiết bị di động bằng Phonegap và JQuery.Nhận kinh độ và vĩ độ tương tự từ cơ sở dữ liệu

Ứng dụng thu thập kinh độ và vĩ độ của người dùng và lưu trữ chúng trong cơ sở dữ liệu (sử dụng tập lệnh PHP - dịch vụ web) và với một số thuật toán phát hiện có lưu lượng truy cập hay không. Những gì tôi cần là lấy tất cả các giá trị kinh độ và vĩ độ từ cơ sở dữ liệu gần nhau, nói trên cùng một đường phố/phạm vi 200m.

Giả sử bạn có danh sách trong cơ sở dữ liệu với 5 lon/lat gần nhau (trong cùng đường A), 3 lon/lat gần nhau ở một số phố B và một số khác đại diện cho người dùng ngẫu nhiên trên các đường phố khác. Bất cứ ai có thể cho tôi biết làm thế nào tôi có thể phát hiện các giá trị lon/lat gần nhau? Các giá trị tôi lưu trữ chúng dưới dạng các giá trị riêng biệt trong cơ sở dữ liệu MySQL, nghĩa là một trường cho kinh độ và một trường khác cho vĩ độ.

Khi tôi nhận được lon/lat ở gần nhau, tôi sẽ cần tìm điểm trung tâm giữa người dùng trên đường A và người dùng trên đường B để đánh dấu là tắc nghẽn giao thông (dựa trên một số phát hiện khác).

+0

Tùy thuộc vào quy mô của ứng dụng của bạn và nếu đó là tùy chọn bạn có thể muốn cân nhắc sử dụng PostGIS. Vì nó có hỗ trợ SPATIAL tốt hơn nhiều so với MySQL. Làm điều này trong PostGIS sẽ rất đơn giản, hãy xem http://gis.stackexchange.com/q/27878/3591 –

+0

Xin chào Mark, quy mô của ứng dụng là khá cơ bản. Chúng tôi đã xem xét PostGIS nhưng đã dùng MySQL để tìm kiếm hosting rẻ hơn ... Nếu không thì PostGIS có các tính năng không gian tốt hơn:/ – user1809790

Trả lời

5

Bạn nên xem xét công thức Haversine. Xin vui lòng xem bên dưới:

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; 

này sẽ trả lại toàn bộ hồ sơ mà là trong vòng 25 dặm của đầu vào cặp dài/lat.

+0

HAVING distance <25 từ khóa khoảng cách ở đây - có phải nó được MySQL công nhận không? Một số chức năng hoặc một cái gì đó của loại? – user1809790

+0

Hãy kiểm tra ans nó làm cho một bí danh 'khoảng cách' –

+0

@ m4k Tôi đoán đoạn trên sẽ mang lại cho tôi tất cả các/lat dài cả hai trong đường A và đường B. Có cách nào để phân biệt giữa hai mặc dù? Cos những gì tôi sẽ cần làm là có được những điểm gần nhau (như trên), và sau đó nhận được tất cả các điểm trên đường A hoặc B và tìm thấy điểm giữa của họ. – user1809790

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