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

Zapytanie o wartości bazy danych na podstawie lokalizacji użytkownika

Pojawia się pytanie porównujące możliwości różnych baz danych przestrzennych, GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server? , gdzie Postgis jest dość wyraźnym zwycięzcą nad MySQL.

Niezależnie od tego, czy używasz MySQL, czy Postgis, byłoby znacznie lepiej, jeśli możesz, przechowując wartości szerokości i długości geograficznej jako geometrię/geografię (punkt), jako funkcje, których można użyć do znalezienia rzeczy w pobliżu, ST_Distance , ST_Distance_Sphere i bardziej niejasny <->operator , zobacz Znajdź n najbliższych sąsiadów dla dany punkt za pomocą PostGIS? (na przykład użycie) działają bezpośrednio na kolumnach geometrii/geografii. Co ważniejsze, możesz dodać indeks przestrzenny , które te funkcje muszą działać poprawnie, co znacznie przewyższa wyniki wyszukiwania w oddzielnie indeksowanych kolumnach szerokości i długości geograficznej (będzie to zależeć od rozmiaru tabeli, ale będzie rosło wraz ze wzrostem rozmiaru tabeli),

W Postgis możesz przekonwertować szerokość i długość na geometrię za pomocą:

alter table mytable add column geom (Geometry, 4326);
update mytable set geom = ST_SetSRID(ST_MakePoint(lon, lat), 4326)
create index ix_spatial_mytable_geom on mytable using gist(geom);

W tym momencie będziesz w stanie wykonywać bardzo wydajne zapytania, aby znaleźć punkty w pobliżu innych punktów, korzystając z dowolnego z przykładów w powyższych linkach.

Możesz robić podobne rzeczy w MySQL, chociaż nie obsługuje on przestrzennego systemu odniesienia, tj. 4326 powyżej, co oznacza szerokość/długość, i brakuje w nim funkcji ST_MakePoint, więc musiałbyś użyć STGeomFromText i połączyć lat/ lon razem, aby zrobić PUNKT. Robi również wszystko we współrzędnych planarnych, jak stwierdzili Claudio i inni, co nie stanowi problemu w przypadku Postgis.

Przepraszam za długą i nieco niejasną odpowiedź, ale po różnych migracjach między bazami danych na dużych ilościach danych (MySQL, SQL Server i Postgres/GIS) i popełnieniu wielu błędów po drodze, mam nadzieję, że uda mi się rozpocząć we właściwym kierunku (i dodaj trochę przyszłej korekty, jeśli chcesz zacząć korzystać z innej funkcji przestrzennej, którą Postigs ma w szczegółach).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieznana kolumna na 'liście pól', ale kolumna istnieje

  2. Dołącz do dwóch stołów, a następnie Sortuj według daty, ALE łącz oba stoły

  3. MySQL - Aktualizuj, jeśli istnieje, wstawiaj jeszcze dwa klucze

  4. jak wymusić warunkowe ograniczenie unikalności

  5. Wybierz wiele identyfikatorów z tabeli