sql >> Database teknologi >  >> RDS >> Mysql

Database:Bedste måde at forespørge om geografiske placeringsdata på?

Der er et godt indlæg om MySQL geolocation ydeevne her .

REDIGER Temmelig sikker på, at dette bruger fast radius. Jeg er heller ikke 100 % sikker på, at algoritmen til at beregne afstand er den mest avancerede (dvs. den "borer" gennem Jorden).

Det væsentlige er, at algoritmen er billig for at give dig en boldparkgrænse på antallet af rækker for at udføre korrekt afstandssøgning.

Algoritmen forfiltrerer ved at tage kandidater i en firkant omkring kildepunktet og derefter beregne afstanden i mile .

Forberegn dette, eller brug en lagret procedure, som kilden foreslår:

# 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. Vælg et tilfældigt udsnit af resultater fra et forespørgselsresultat

  2. PostgreSQL 13:Lad ikke slots dræbe din primære

  3. 2 funktioner, der returnerer måneden fra en dato i Oracle

  4. MySQL - Søg nøjagtigt ord fra streng