SQL-запрос для точек в многоугольнике / прямоугольнике - PullRequest
0 голосов
/ 12 января 2012

Хорошо, у меня есть очень большая база данных с информацией о свойствах, заполненная географическими координатами.То, что мне нужно, чтобы это сделать, это выполнить запрос, который спрашивает: «дать мне все свойства, которые находятся внутри данного прямоугольника или многоугольника».Пользовательский интерфейс позволил бы пользователю определять точки прямоугольника или многоугольника (используя систему карт).Эти координаты будут включены в запрос, и sql должен вернуть список свойств в этой области.Если многоугольник невозможен, по крайней мере, прямоугольник будет полезен.Я уже знаю, как выполнить поиск по радиусу.

Благодарим Вас за любую помощь.

Ответы [ 3 ]

3 голосов
/ 01 января 2014

Ваш sql код должен быть примерно таким
SQL-запрос

SELECT 
    * 
FROM areas area
WHERE 
    ST_CONTAINS(`area`.`polygon`, GEOMFROMTEXT('POINT(34.262714 56.262714)')) = 1

Таблица

CREATE TABLE IF NOT EXISTS `areas` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `polygon` polygon NOT NULL,
  `area_name` varchar(70) NOT NULL,
  PRIMARY KEY (`id`),
  SPATIAL KEY `polygon` (`polygon`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Также будьте осторожны, для большого стола вы должны использовать MyISAM, потому что InnoDB не поддерживает SPATIAL индексы.
Примечание MySQL поддерживает ST_CONTAINS с версии 5.6+.

Для более подробной информации, полезная статья http://www.mysqlperformanceblog.com/2013/10/21/using-the-new-spatial-functions-in-mysql-5-6-for-geo-enabled-applications/

1 голос
/ 12 января 2012

MySQL поддерживает геометрические функции и запросы. Справочный документ будет полезен для вас: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions.html

0 голосов
/ 12 января 2012

Используйте функцию Within(geom1, geom2), чтобы проверить, является ли geom1 пространственно внутри geom2.Ваш запрос будет выглядеть примерно так:

select some_thing from your_table where Within( some_point,
        GeomFromText('POLYGON( some_polygon )'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...