MySQL Point в запросах полигонов и настройке БД

Я пытаюсь создать таблицу, которая состоит из регионов, как ПОЛИГОН. Я хочу иметь возможность запросить таблицу, чтобы определить, находится ли данный ТОЧКА в какой-либо из сохраненных областей или нет.

Я читал, что пространственные расширения MySQL предоставляют два типа функций для работы с геометриями:

  • ST_ * для работы с объектами
  • MBR* для работы с минимальными ограничивающими прямоугольниками

Я попытался следовать тому, что работало в этом посте. Вот как я настроил свой стол:

CREATE TABLE `region` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`rpolygon` polygon NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Я вставил несколько записей в таблицу после получения определений полигонов из QGIS. Я узнал о вставке пространственных записей в таблицу отсюда. Вот как я вставил запись в таблицу

SET @g= ST_GeomFromText('Polygon ((-117.84293016891291472 33.64825334189644224, -117.8428418279120109 33.64599663087331294, -117.84048874488789238 33.64467151585973426, -117.84002294688312418 33.64517746886491523, -117.83983020288114574 33.64549067786812486, -117.83981414088098916 33.64605284787388939, -117.83983823388122403 33.64646242887808825, -117.84012734988419879 33.64708081588442212, -117.84053693088839054 33.64743417988804453, -117.84130790689629009 33.6479401328932326, -117.84199054190328582 33.64815696989545302, -117.84243224690781915 33.64822121789610776, -117.84293016891291472 33.64825334189644224))');
INSERT INTO region 
VALUES(1, 'NORTH-EAST', @g);

Просто, чтобы проверить работоспособность, я попытался выполнить запрос Point in Polygon, используя различные методы - MBRContains, ST_Contains и т. Д., Все из которых не дают результатов или NULL. Ниже приведен пример запроса, который я пробовал:

SELECT * FROM region where ST_Contains(rpolygon, ST_GeomFromText('Point(33.646201 -117.841949)'));

Я не уверен, что происходит не так. Я неправильно сохраняю значения, вы настраиваете географическую таблицу по-другому? Или я неправильно запрашиваю. Я не смог найти в Интернете хороших учебных пособий или примеров, которым я мог бы следовать, чтобы выполнить такую ​​настройку. Любые указатели будут полезны!

1 ответ

Черт! Я чувствую себя довольно глупо! Порядок координат неправильный в моем запросе, где я определяю ТОЧКУ.

Тем не мение. Я надеюсь, что это послужит хорошим коротким руководством для тех, кто хочет начать работу с запросами Point-in-Polygon с mysql.

Другие вопросы по тегам