проверить, существует ли точка в данной области, содержащая 4 вершины - PullRequest
5 голосов
/ 03 июня 2009

ссылаясь на http://www.weather.gov/directives/sym/pd01008006curr.pdf, стр. 8, мы получаем область с четырьмя вершинами в географической системе координат (широта и долгота). Я хочу проверить, существует ли точка с определенным широтой и долготой в этой области.

Ответы [ 4 ]

6 голосов
/ 03 июня 2009

Способ проверить, находится ли точка в произвольном многоугольнике (любое количество сторон, в том числе и вогнутая), состоит в том, чтобы выбрать точку, которая, как вам известно, находится вне ВЕРХНЕГО многоугольника; если отрезок прямой между точкой, которую вы тестируете, и точкой, находящейся за пределами многоугольника, пересекает число ODD сегментов многоугольника, эта точка находится внутри многоугольника.

3 голосов
/ 03 июня 2009

Это задача точка-многоугольник для сферы с системой координат, которая имеет несколько тонкостей, которые усложняют задачу по сравнению с «обычной» задачей точка-многоугольник в плоскости XY:

1) что внутри и снаружи? (Например, если у меня есть маленький «квадрат» в 1 миле на стороне, он охватывает 1 квадратную милю или остаток поверхности Земли? Это тривиальный пример, но для очень больших полигонов может быть неясно, что должно быть внутри и который должен быть снаружи, если не указано явно)

2) Являются ли сегменты многоугольников сегментами большого круга? Если это так, то они не представляют собой прямые линии в системе координат широты, если они не являются линиями меридианов или экватором - и вам нужно иметь дело с кривыми, а не линиями в вашей геометрии. Сферическая геометрия - путь.

3) «края» системы координат (международная линия даты и полюсы) - «квадрат», ограниченный долготой +179,9 градуса, -179,9 градуса и широтой + 0,1 градуса, -0,1 градуса обычно не будет считается, что он содержит точку 0 N, 0 W, и будет содержать точку 0 N, 180 W. Но если вы наивно проверяете неравенства с точками широты / долготы, вы получите противоположный ответ.

Так что у меня нет ответа, но это тонкие вопросы для рассмотрения. (прочитайте это как «убедитесь, что вы включили их в качестве контрольных примеров»!)

edit: Я нашел пакет spheres , который имеет метод SphericalPolygon.contains , который может делать то, что вы ищете. Однако я лично не использовал этот пакет, и он GPL , а не LGPL, поэтому он «загрязнит» остальную часть вашего источника, если вы захотите использовать его в проприетарном продукте.

1 голос
/ 03 июня 2009

Вы имеете в виду программно или математически? Программно легко, если вы понимаете это математически. По сути, вершины определяют линии. Вы просто должны знать, какая сторона линий составляет «внутри». Затем превратите свои вершины в уравнения, но используйте меньше или больше, чем равно.

То есть, предположим, что у вас есть прямоугольник, определенный следующими уравнениями: х = 1, х = 3, у = 1, у = 3

Если вы хотите знать, находится ли (2,2) внутри этой области, просто оцените каждое уравнение: x> 1, x <3, y> 1, y <3. </p>

Если все четыре верны, точка находится внутри области.

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