Тип данных POINT в MySQL

Тип данных POINT в MySQL
Не так давно передо мной стояла задача о необходимости хранить географические координаты (долготу и широту) в БД. Для этих целей в MySQL есть замечательный тип данных —  POINT. Он представляет собой структуру из нескольких полей.

Кроме того, к этому типу можно (и даже нужно) применять встроенные функции. Именно эти функции определяют, какие данные необходимо хранить: точку или линию, а может даже множество точек или множество линий. Разберем пример. Есть небольшая таблица в реляционной БД, назовем ее geo. И имеет она следующую структуру

`id` int(11) NOT NULL AUTO_INCREMENT,
`place_name` varchar(40) NOT NULL,
`coordinates` point NOT NULL

Для того чтобы создать такую таблицу, воспользуйтесь следующим SQL-запросом:

CREATE TABLE IF NOT EXISTS `geo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`place_name` varchar(40) NOT NULL,
`coordinates` point NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Для того чтобы вставить строку в таблицу, воспользуемся конструкцией INSERT

INSERT INTO `geo` (`place_name`, `coordinates`) VALUES ('Apremont', PointFromText('POINT(49.2343503980067 2.52738212494082)'));

У этого типа есть один недостаток: данные нельзя просмотреть. Например в phpMyAdmin данные поля coordinates будут выглядеть вот так: mysql-point-data
И для того чтобы получить долготу и широту, придется воспользоваться вот таким SQL-запросом:

SELECT X(  `coordinates` ) , Y(  `coordinates` )
FROM  `geo`
WHERE 1
LIMIT 1

Остался последний нюанс. Если у Вас возникают проблемы при экспортировании данных таблицы в которой присутствуют поля типа POINT, а именно, если после экспорта данных координаты не отображаются, то это означает, что Вы неправильно сделали экспорт. Наверняка Вы сделали экспорт в текст, затем скопировали его и вставили как SQL запрос. Нужно сделать экспорт в файл, а затем сделать импорт из этого файла.

Stas Kuryan

Web developer. Перфекционист в написании кода.

1 комментарий

  1. Pingback:Zend Framework: работа с полем типа POINT в MySQL » Блог Stafox'a

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *