Это задача точка-многоугольник для сферы с системой координат, которая имеет несколько тонкостей, которые усложняют задачу по сравнению с «обычной» задачей точка-многоугольник в плоскости 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, поэтому он «загрязнит» остальную часть вашего источника, если вы захотите использовать его в проприетарном продукте.