Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Baza danych:najlepszy sposób wyszukiwania danych o lokalizacji geograficznej?

Dobry artykuł na temat wydajności geolokalizacji MySQL znajduje się tutaj .

EDYTUJ Jestem pewien, że używa stałego promienia. Nie jestem też w 100% pewien, że algorytm obliczania odległości jest najbardziej zaawansowany (tj. „przewierci” Ziemię).

Co ważne, algorytm jest tani, ponieważ pozwala na ograniczenie liczby rzędów do parkowania piłek, aby przeprowadzić prawidłowe wyszukiwanie odległości.

Algorytm wstępnie filtruje kandydatów w kwadracie wokół punktu źródłowego, a następnie oblicza odległość w milach .

Oblicz to wstępnie lub użyj procedury składowanej zgodnie z sugestią źródła:

# 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę przekonwertować plik MDB (Access) na MySQL (lub zwykły plik SQL)?

  2. Połączenie bazy danych MySQL z Visual Studio 2013 Preview

  3. Korzystanie z prostego dostawcy członkostwa z mysql

  4. Jakie są zalety i wady przechowywania plików w bazie danych?

  5. pojawia się błąd składni podczas tworzenia funkcji