sql >> Database >  >> RDS >> Mysql

Database:de beste manier om geografische locatiegegevens op te vragen?

Er is hier .

BEWERKEN Vrij zeker dat dit een vaste straal gebruikt. Ik ben er ook niet 100% zeker van dat het algoritme voor het berekenen van de afstand het meest geavanceerd is (d.w.z. het "boor" door de aarde).

Wat belangrijk is, is dat het algoritme goedkoop is om je een ballparklimiet te geven voor het aantal rijen om de juiste afstand te zoeken.

Het algoritme filtert vooraf door kandidaten in een vierkant rond het bronpunt te nemen en vervolgens de afstand in mijlen te berekenen .

Bereken dit vooraf, of gebruik een opgeslagen procedure zoals de bron suggereert:

# Pseudo code
# user_lon and user_lat are the source longitude and latitude
# radius is the radius where you want to search
lon_distance = radius / abs(cos(radians(user_lat))*69);
min_lon = user_lon - lon_distance;
max_lon = user_lon + lon_distance;
min_lat = user_lat - (radius / 69);
max_lat = user_lat + (radius / 69);
SELECT dest.*,
  3956 * 2 * ASIN(
    SQRT(
      POWER(
        SIN(
          (user_lat - dest.lat) * pi() / 180 / 2
        ), 2
      ) + COS(
        user_lat * pi() / 180
      ) * COS(
        dest.lat * pi() / 180
      ) * POWER(
        SIN(
          (user_lon - dest.lon) * pi() / 180 / 2
        ), 2
      )
    )
  ) as distance
FROM dest
WHERE 
  dest.lon between min_lon and max_lon AND
  dest.lat between min_lat and max_lat
HAVING distance < radius
ORDER BY distance
LIMIT 10


  1. DML-statements testen voor In-Memory OLTP

  2. Hoe Ruby on Rails met mysql te installeren en het werkend te krijgen, een stapsgewijze handleiding?

  3. PHP Fatale fout:oproep naar niet-gedefinieerde functie mssql_connect()

  4. ORA-03115 ophalen:niet-ondersteund netwerkgegevenstype of weergavefout tijdens het ophalen van array van varchar van anonieme pl/sql