2011-10-16 16 views
5

Mam bazę danych współrzędnych w schemacie:Wybierz współrzędne, które mieszczą się w promieniu punktu centralnego?

ID: Szerokość: Długość: Nazwa: desc

mam skonfigurować aplikację Google Maps, aby skutecznie pokazać znaczniki na ekranie. Jednak muszę dodać kolejną funkcję, dzięki której użytkownik będzie mógł przeglądać wszystkie wskaźniki, które mieszczą się w promieniu od punktu centralnego.

Jak bym napisać sql oświadczenie w rodzaju:

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

Odpowiedz

2

prawdopodobnie trzeba to zrobić w dwóch etapach. Wybierz punkty, które znajdują się w kwadracie 20 mil, z jego centrum na X, Y. Zakładając, że obliczenia górny, lewy i dolny, prawy współrzędne placu pierwszy można dostać wszystkie punkty wewnątrz kwadratu z bazy danych z:

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

Drugim krokiem jest sprawdzenie, czy zbiór punktów jest w środku koło o promieniu 10 mil. W tym momencie miałbym ochotę użyć map Google do obliczenia odległości między punktami a środkiem kwadratu za pomocą funkcji google.maps.geometry.spherical.computeDistanceBetween(from:LatLng, to:LatLng, radius?:number). Sprawdź, czy odpowiedź jest mniejsza niż 10 mil. Ta funkcja domyślnie używa promienia Ziemi.

+0

to będzie działać (chyba, że jest zbyt daleko na północy lub południu, w pobliżu biegunów, gdzie twój kwadrat będzie wyglądał bardziej jak trapez (trapez), a nawet trójkąt). –

13

Poniższa SQL powinno działać:

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 
    ) 

ta opiera się na prawie kulistym z cosinusów, aby uzyskać bardziej szczegółowe informacje na ten temat, sprawdź ten artykuł - http://www.movable-type.co.uk/scripts/latlong.html

+0

Szerokość geograficzna to Y, a długość geograficzna to X. Co oznacza w tym przypadku? – CompanyDroneFromSector7G

+0

To działało świetnie! Dla promienia w km zamiast Miles, zastąp 3959 na 6371 i wpisz swój promień w km. – SAR622

Powiązane problemy