mysql записывает и читает географические границы (прямоугольник)

Мне нужно сохранить границы карты в базе данных MySQL. Я потратил некоторое время на документы для геопространственных расширений, но это сложно и в моем случае не нужно изучать всю связанную информацию (WKT, WKB и т. д.). Мне просто нужен способ сохранить прямоугольник координат и прочитать его позже. Конечно, я также мог бы просто записать необработанные координаты в числа с плавающей запятой, но если это не сложно, я бы предпочел, чтобы они были в 1 столбце.

Итак, каков самый простой код SQL для этого требования?

PS: я уже использую значение POINT в этой таблице, поэтому расширения установлены и работают.


person didi_X8    schedule 16.03.2012    source источник


Ответы (3)


Вы можете хранить полигоны в столбце геометрии в mysql. Это позволит вам выполнять над ними некоторую геометрическую функцию (если вам нужно, но это не похоже на то, что вы делаете)

http://dev.mysql.com/doc/refman/4.1/en/polygon-property-functions.html

SET @poly = 'Polygon((0 0,0 3,3 0,0 0))';
SELECT Area(GeomFromText(@poly));

Редактировать:

CREATE TABLE `test` (`geo` geometry NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO test SET geo = GeomFromText('Polygon((0 0,0 3,3 0,0 0))');
SELECT asText(geo) FROM `test`;

Попробуйте приведенные выше инструкции sql. Я создаю таблицу со столбцом геометрии, добавляю многоугольник, затем выбираю данные как текст.

person Mark Willis    schedule 16.03.2012
comment
Что это @ ? Я уже пробовал это без @, и после этого поле все равно было нулевым. - person didi_X8; 16.03.2012
comment
@ означает, что это пользовательская переменная. SET — это то, что вы используете для определения переменной, а затем эта переменная используется в операторе SELECT. - person Bobby W; 16.03.2012
comment
Хм, это то, что я уже сделал. Однако при установке значения с оператором обновления оно всегда равно нулю, хотя об ошибке не сообщается. Вставка работает. Но это не то, что мне нужно. - person didi_X8; 16.03.2012
comment
Я выяснил. Пропустил двойные скобки. Трудно отлаживать, если сообщение об ошибке не генерируется... - person didi_X8; 17.03.2012

То, что вам нужно, называется serialization / вы можете перейти по ссылке и прочитать о Поддержка языков программирования/. Например, в php существует функция сериализации ( php serialize ), которая очень полезна в ваш случай. Вы можете использовать его, затем сохранить значение, а затем использовать php unserialize для чтения это в пхп.

Я знаю, что MyISAM поддерживает некоторые пространственные расширения, но, на мой взгляд, их использование не так гибко, как сериализация.

Привет!
Надеюсь, это поможет. :)

person Boris D. Teoharov    schedule 16.03.2012

Если вы ТОЛЬКО заинтересованы в хранении и извлечении точек столбца, я бы предложил просто сбросить точки (разделенные запятыми или как вам нравится) в поле BLOB. Если вы когда-нибудь захотите использовать какие-либо функции пространственного анализа, вы можете заглянуть в ссылку Класс полигона и используйте свои точки для определения полигона для каждого прямоугольника координат.

person Bobby W    schedule 16.03.2012