2012-01-24 8 views
23

Mam bazę danych wypełnioną obecnie około 10 tys. Wierszy. Wszystkie mają długość/szerokość geograficzną opartą na środku kodu pocztowego. Znalazłem zapytanie, które próbuję teraz rozwinąć, ale w sumie działa dobrze. Jednak w moim przykładzie poniżej próbuję znaleźć rzeczy w promieniu 25 mil, co w sumie wydaje się działać w przeważającej części. Większość moich wyników ustępuje w ramach kryterium 25 mil, jednak otrzymuję garstkę, która jest daleko od wszystkiego od 86 mil do 800 mil od znaku.MySQL - długość i szerokość geograficzna zapytania dla innych wierszy w promieniu x mil

Przykład: To mój ośrodek lat/lon: +37,2790669, -121,874722 = San Jose, Kalifornia Im osiąganie rezultatów, takich jak: 33.016928, -116,846046 = San Diego, Kalifornia, która wynosi około 355 mil od San Jose.

mój obecny kwerenda wygląda następująco:

SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180))+cos(($lat*pi()/180)) 
* cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515) 
AS `distance` FROM `geo_locations` HAVING `distance` <= 25 ORDER BY `distance` ASC" 

Odpowiedz

72

Oto kwerendy używam na lokalizator sklepów pracuję z:

SELECT 
    `id`, 
    (
     6371 * 
     acos(
      cos(radians(:lat)) * 
      cos(radians(`lat`)) * 
      cos(
       radians(`long`) - radians(:long) 
      ) + 
      sin(radians(:lat)) * 
      sin(radians(`lat`)) 
     ) 
    ) `distance` 
FROM 
    `location` 
HAVING 
    `distance` < :distance 
ORDER BY 
    `distance` 
LIMIT 
    25 

:lat i :long są punkty przekazany przez użytkownika w razie lat i long są punkty przechowywane w bazie danych.

: odległość jest mierzona w milach, w wersji roboczej kodzie: odległość rzeczywiście wyciągnął z listy rozwijanej w zakresie od 10-50 mil

Zmiana kodu do pracy z kilometrów można przeprowadzić zmieniając 3959 (odległość od środka ziemi do jego powierzchni w milach) do 6371 (3959 mil przeliczonych na kilometry) dzięki joshhendo dla tego rozwiązania.

+1

Cieszę się, że pracowałeś dla ciebie – Gordnfreeman

+3

Gordnfreeman, możesz mi powiedzieć, co oznacza "<25"? Czy to jest 25 mil lub Kilometrów? I mam dla ciebie inne pytanie, jeśli nie miałbyś nic przeciwko szybkiemu czatowi ze mną? – dcolumbus

+0

Czy jest jakiś sposób, aby z łatwością przekonwertować to na KM? Zakładam, że ma to coś wspólnego z 3935 na początku zapytania, ale nie do końca wiem, co robi. – joshhendo

Powiązane problemy