Я пытаюсь написать SQL-запрос, который определяет, является ли данная точка в многоугольнике. (Я использую SQL Server 2008 R2).Точка в алгоритме многоугольника для SQL Server
Я следовал this tutorial (просто скопируйте/вставьте его и измените имя какой-либо таблицы), и он работает приблизительно, но он не является точным. Например, давайте рассмотрим заданную точку, координаты которой:
P = 45.7664, 4.87383
.
Если нарисовать маленький полигон (приблизительная площадь) вокруг этой точки с 4 вершинами координаты:
S = 45.97215 4.693909, 45.687 4.674683, 45.73302 5.460205, 46.05227 5.366821, 45.97215 4.693909
методике, приведенной в ссылке ниже отвечает точка НЕ в многоугольник, в то время как это .. . Это выход (с моим собственным форматирования текста):
(Polygon 20 является выше многоугольник)
Но если увеличенные площади (в 10 раз больше в моем тесте), рг Ответ на мою точку зрения лежит на площади.
Итак, я ищу еще один алгоритм, более точный.
Вот моя Vertice таблица, содержащий все вершины координаты каждого полигона моей БД
мне нужно проверить, для всех многоугольников (есть несколько тысяч), если заданная точка передается в параметре в виде многоугольника (и если да, то какой (ы)). Я могу сделать цикл один, но я пропускаю правильный Точка в полигоне алгоритм.
Не мог бы кто-нибудь мне помочь? спасибо.
РЕЗЮМЕ
Соответствующий SQL скрипку: http://sqlfiddle.com/#!3/0caa4/1
Плохое исполнение, если у вас огромные записи в базе данных, я пробовал этот запрос по 1600000 записей, и потребовалось 2 минуты для завершения. –
Hi Jitendra, это старый вопрос, но проект все еще находится в разработке (это персональный проект).Я реализовал алгоритм, указанный в моей ссылке, с объяснениями @Ben Thul, и он отлично работает, но я никогда не пробовал столько записей. Вы могли бы предложить лучший алгоритм в качестве ответа, это будет приветствоваться! – AlexB