Как я могу определить координату в пределах mutilpolygon или нет? - PullRequest
1 голос
/ 09 февраля 2011

У нас есть база данных в формате CSV со всеми округами (в США) и их границами, определяемыми SRID и MULTIPOLYGON.Как я могу определить для любой данной координаты (десятичной широты и долготы), в какую страну она попадает.Мы планируем использовать MySQL для хранения данных и выполнения запросов.

Ответы [ 3 ]

3 голосов
/ 12 июня 2011

Если ваши фигуры многочисленны и сложны, вам лучше всего использовать пространственную базу данных.PostGIS является бесплатным и работает на большинстве платформ, которые MySQL будет.Пространственные базы данных имеют пространственные типы данных для хранения полигонов, пространственные запросы, которые включают запросы к базе данных о том, находится ли точка в многоугольнике, и пространственные индексы, которые делают все достаточно эффективным.

OTOH, если вы имеете дело только сДовольно небольшое количество довольно простых полигонов, которыми вы можете управлять с помощью обычной базы данных.Я сделал это один раз.Мой подход:

Есть таблица многоугольников.Каждая запись многоугольника содержит первичный ключ, любую информацию, которую нужно хранить с каждым многоугольником, и ограничивающий прямоугольник для многоугольника - значения max и min x и y.

Точки для многоугольника хранятся в таблице точек., то есть дитя многоугольника.Каждая запись точки содержит первичный ключ многоугольника, членом которого она является, порядковый номер и значение x и ay.

Чтобы найти многоугольники, которые могут содержать точку, вы запрашиваете таблицу многоугольников, ищаполигоны, которые могут содержать точку - те, для которых эта точка находится в своих ограничивающих прямоугольниках.Эти многоугольники-кандидаты считываются в память, и каждый проверяется, содержит ли он точку.

Существует несколько алгоритмов.http://en.wikipedia.org/wiki/Point_in_polygon

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

2 голосов
/ 13 июня 2011

Попробуйте гео-расширения для mysql

http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html

Хотя Postgres с PostGIS является более зрелой гео-базой данных, и я бы использовал ее, если у вас есть выбор.

0 голосов
/ 09 февраля 2011

возможно эта ссылка поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...