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

Struktura tabeli dla danych przestrzennych geograficznych

Przechowuj go jako geometryczny typ danych . MySQL obsługuje typy danych Geometry (ogólne), a także typy danych Point, Linestring i Polygon, zobacz tworzenie przestrzennych typów danych . Pojedyncza wartość długości lub szerokości geograficznej nie może być sama w sobie geometrią, tak jak na zrzucie ekranu.

Jeśli pójdziesz drogą korzystania z typów geometrii, daje to dwie korzyści w porównaniu z oddzielnymi polami szerokości i długości geograficznej:możesz dodać indeks przestrzenny i będziesz mógł korzystać z niektórych przestrzennych MySQL funkcje operatora takie jak ST_Buffer, ST_Intersects, ST_Distance do dalszej analizy. Indeksy przestrzenne są oparte na drzewach R i będą działać znacznie lepiej niż dwa indeksy B-drzewa w kolumnach nieprzestrzennych, szerokości i długości geograficznej — a ta różnica wydajności będzie rosła wraz ze wzrostem rozmiaru tabeli.

Nadal możesz odzyskać wartości szerokości i długości geograficznej, korzystając z Funkcje punktów X i Y więc nic nie stracisz, przechowując swoje dane jako Punkt.

Jeśli masz już swoje dane w dwóch oddzielnych kolumnach szerokości/długości geograficznej i chcesz przejść trasą typu danych geometria/punkt, możesz użyć funkcji Point, aby utworzyć typ danych Point:

alter table mytable add column pt POINT;
update mytable set pt=Point(longitude, latitude);
alter table mytable modify pt POINT NOT NULL;
create spatial index ix_spatial_mytable_pt ON mytable(pt);

Zauważ, że funkcja Point została wprowadzona tylko w MySQL 5.1.x (nie jest zbyt dobrze udokumentowana, więc nie jestem pewien co do dokładnej wersji), a wcześniej musiałeś używać concat z funkcją GeomFromText, zobacz Przenoszenie kolumn tekstu Kolumna typu „punkt” po więcej informacji na ten temat, chociaż zauważ, że odpowiedź Quassnoi ma dług i łat w odwrotnym kierunku -- to Point(lon, lat), a nie odwrotnie, chociaż jest to bardzo częsty błąd.

UWAGA: Do niedawna kolumnę przestrzenną można było indeksować tylko przy użyciu silnika MyISAM.

EDYTUJ: W nadchodzącym wydaniu MySQL 5.7 .5 , InnoDB w końcu będzie obsługiwać indeksy dla typów danych przestrzennych (a nie tylko przechowywać typy przestrzenne bez indeksu, co jest znacznie mniej przydatne). Oznacza to, że możesz mieć klucze obce, gwarancje ACID, indeksy przestrzenne w jednym silniku, na co czekał już długi czas.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL różni się w danych wyjściowych od skryptu

  2. Jak zainstalować MySQL w systemie Windows 10? – Twoje kompleksowe rozwiązanie do instalacji MySQL

  3. Potrzebuję pomocy w ukończeniu tego 3-poziomowego dynamicznego menu rozwijanego

  4. Kolejność MySQL według rand() pogrupowana według dnia

  5. Konwertuj zapisz/zaktualizuj szyny połączeń do sql