sql >> Databáze >  >> RDS >> Mysql

Databáze:Nejlepší způsob, jak zjišťovat údaje o zeměpisné poloze?

Existuje dobrý dokument o výkonu geolokace MySQL zde .

UPRAVIT Určitě to používá pevný rádius. Také si nejsem 100% jistý, že algoritmus pro výpočet vzdálenosti je nejpokročilejší (tj. „provrtá se“ Zemí).

Důležité je, že algoritmus je levný, aby vám poskytl limit počtu řad pro správné vyhledávání vzdálenosti.

Algoritmus předem filtruje kandidáty ve čtverci kolem zdrojového bodu a poté vypočítá vzdálenost v mílích .

Předem si to spočítejte nebo použijte uloženou proceduru, jak doporučuje zdroj:

# 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. Jak nastavit OTA v R12 a 11i

  2. Jak přimět MySql 8 ke spuštění s laravelem?

  3. Jak se připojit k databázi MySQL z iPhone?

  4. PHP - MYSQL - testovací databázový server