Ho una query che tenta di trovare le cose all'interno di una determinata geolocalizzazione, ma i risultati che riporta sono un po '... strani.Richiesta di informazioni in prossimità di una geolocalizzazione?
Avevo già postato questa discussione e la comunità mi ha aiutato a trovare una formula di cui avevo bisogno: Querying within longitude and latitude in MySQL ma ora la query fornisce risultati davvero stravaganti.
miei dati è che circonda la città di San Francisco che ha il lat/lng 37.780182 , -122.517349
Query:
SELECT
id,
hike_title,
lat,
lng,
(3959 * acos( cos(radians(37))
* cos(radians(lat))
* cos(radians(lng) - radians(37.780182))
+ sin(radians(-122.517349)) * sin(radians(lat))
)
) AS distance
FROM
my_awesome_table
HAVING
distance < 10000
ORDER BY
distance
LIMIT
0 , 50
Quindi, come si vede - anche se faccio raggio 10000 ancora doesn' Trovo molto, quindi mi chiedo se la mia query è disattivata. Alcuni dei risultati che riporta hanno anche 0,0 per lat/lng che è il mio modo di indicare che non ci sono lat/lng per quel record.
Ecco come si suppone che la formula per assomigliare:
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
LIMIT
0 , 20;
Grazie e scusa per il lungo dolorosamente domanda! A proposito, sto usando MySQL.
Hmmm,
ho appena provato con la query esatta hai dato e ha funzionato con il 50% di precisione. Ecco un esempio di set di dati:
lat lng
| 37.223465 | -122.090363 |
| 39.320980 | -111.093735 |
| 38.031715 | -84.495132 |
| 37.787144 | -122.493263 |
| 52.975361 | -1.458620 |
| 40.848557 | -111.906883 |
| 40.572498 | -111.859718 |
Così ora la query restituiti tutti gli elementi che erano molte miglia di distanza, ma non anche le voci che erano sotto 100 miglia di distanza. Come questo articolo (37.787144, -122.493263) non è mai stato restituito anche se si trova a circa 50 miglia dal punto di origine. Sapresti perché?
Perché non stai usando estensioni spaziali di MySQL che forniscono funzioni per questo genere di cose? http://dev.mysql.com/doc/refman/5.5/en/spatial-extensions.html –
Basta leggere alcuni degli argomenti presenti. Non sono sicuro di averlo capito troppo bene, ma forse sembra eccessivo per i miei bisogni. Rende le cose molto più veloci da interrogare? Pensi che sia una soluzione molto migliore di quella di cui stiamo discutendo in questo thread? Grazie! – Genadinik