2011-10-16 8 views
5

Ho un database di coordinate nello schema:Seleziona le coordinate che rientrano nel raggio di un punto centrale?

ID: Latitudine: Longitudine: Nome: disc

ho creato la mia applicazione google maps per mostrare in modo efficace i marcatori sullo schermo. Tuttavia, ho bisogno di aggiungere un'altra funzione in cui l'utente può visualizzare tutti i puntatori che rientrano nel raggio da un punto centrale.

Come dovrei scrivere una dichiarazione di sql del tipo:

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

risposta

2

Probabilmente bisogno di fare questo in due fasi. Seleziona i punti che si trovano all'interno di un quadrato di 20 miglia con il centro in X, Y. Supponendo che si calcola l'alto, a sinistra e in basso, coordinate destro della piazza prima è possibile ottenere tutti i punti all'interno della piazza dal database con:

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

Il secondo passo è quello di vedere se l'insieme dei punti è dentro il raggio del raggio di 10 miglia. A questo punto sarei tentato di utilizzare Google maps per calcolare la distanza tra i punti e il centro del quadrato utilizzando la funzione google.maps.geometry.spherical.computeDistanceBetween(from:LatLng, to:LatLng, radius?:number). Controlla che la risposta sia inferiore a 10 miglia. Questa funzione utilizza il raggio della terra come predefinito.

+0

Questo potrebbe funzionare (a meno che non Sono troppo nel nord o nel sud, vicino ai poli - dove la tua piazza sembra più un trapezio (trapezoidale) o addirittura un triangolo). –

13

L'SQL di seguito dovrebbe funzionare:

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 
    ) 

Questo si basa sulla legge sferica di coseni, per informazioni più dettagliate sull'argomento, consulta questo articolo - http://www.movable-type.co.uk/scripts/latlong.html

+0

Latitudine è Y, la longitudine è X. Che significa che in questo caso? – CompanyDroneFromSector7G

+0

Questo ha funzionato alla grande! Per raggio in Km invece di Miglia, sostituire 3959 con 6371 e inserire il raggio in km. – SAR622