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

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

Знам, че MyISAM поддържа някои пространствени разширения, но според мен използването им не е толкова гъвкаво, колкото сериализацията.

Наздраве!
Надявам се да помогне. :)

person Boris D. Teoharov    schedule 16.03.2012

Ако се интересувате САМО от съхраняване и извличане на точките от колона, тогава бих предложил просто да изхвърлите точките (разделени със запетая или както желаете) в BLOB поле. Ако някога искате да използвате функции за пространствен анализ, може да искате да разгледате Клас многоъгълник и използвайте вашите точки, за да дефинирате многоъгълник за всеки правоъгълник с координати.

person Bobby W    schedule 16.03.2012