Mysql
 sql >> база данни >  >> RDS >> Mysql

Структура на таблицата за геопространствени данни

Съхранявайте го като тип данни за геометрията . MySQL поддържа Geometry (generic), както и типове данни Point, Linestring и Polygon, вижте създаване на типове пространствени данни . Една стойност за дължина или ширина не може да бъде геометрия сама по себе си, тъй като я имате на екранната си снимка.

Ако тръгнете по пътя на използване на типове геометрия, това ви дава две предимства пред наличието на отделни полета за географска ширина и дължина:можете да добавите пространствен индекс и ще можете да използвате някои от пространствените на MySQL функции на оператор като ST_Buffer, ST_Intersects, ST_Distance за извършване на допълнителен анализ. Пространствените индекси се основават на R-дървета и ще се представят много по-добре от два индекса на B-дървото върху непространствени колони, географска ширина и дължина – и тази разлика в производителността ще нараства с нарастването на размера на вашата таблица.

Все още можете да получите обратно стойностите за географска ширина и дължина, като използвате Функции за точки X и Y така че няма да загубите нищо, като съхранявате данните си като точка.

Ако вече имате данните си в две отделни колони за ширина/дължина и искате да преминете по маршрута на геометрията/точковия тип данни, можете да използвате функцията 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);

Имайте предвид, че функцията Point беше въведена само в MySQL 5.1.x (не е твърде добре документирана, така че не съм сигурен в точната версия), а преди това трябваше да използвате concat с функцията GeomFromText, вижте Преместване на текстови колони lat/long в колона от тип „точка“ за малко повече информация относно това, въпреки че имайте предвид, че отговорът на Quassnoi има lon и lat погрешно -- това е Point(lon, lat), а не обратното, въпреки че това е много често срещана грешка.

ЗАБЕЛЕЖКА: Доскоро можехте да индексирате пространствена колона само ако използвате механизма MyISAM.

РЕДАКТИРАНЕ: В предстоящата версия MySQL 5.7 .5 , InnoDB най-накрая ще поддържа индекси за типове пространствени данни (а не само ще съхранява пространствени типове без индекс, което е значително по-малко полезно). Това означава, че можете да имате външни ключове, ACID гаранции, пространствени индекси, всичко това в един двигател, което предстои дълго време.



  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 набор от резултати

  2. Как да получа първичен ключ на таблицата?

  3. Множество курсори във вложени цикли в MySQL

  4. .NET 2.0 и MySql в режим на средно доверие

  5. Какво е значението на <> в mysql заявката?