Выпуклая оболочка (долгота, широта) - точки на поверхности сферы
Стандартные выпуклые алгоритмы оболочки не будут работать с (долгота, широта) -точек, потому что стандартные алгоритмы предполагают, что вы хотите корпус множества декартовых точек. Точки долготы долготы не декартовы, потому что долгота "обертывается" на антимеридиане (+/- 180 градусов). Ie, в двух градусах к востоку от долготы 179 составляет -179.
Таким образом, если ваш набор точек окажется в положении против меридиана, вы будете вычислять ложные оболочки, которые будут растягиваться по всему миру неправильно.
Любые предложения для трюков, которые я мог бы применить со стандартным алгоритмом выпуклого корпуса, чтобы исправить это, или указатели на правильные "геосферические" алгоритмы корпуса?
Теперь, когда я думаю об этом, есть более интересные случаи, чем рассматривать антимердианы. Рассмотрим "полосу" точек, которые окружают Землю - ее выпуклый корпус не будет иметь границ востока/запада. Или еще дальше, что такое выпуклая оболочка {(0,0), (0, 90), (0, -90), (90, 0), (-90, 0), (180, 0)}? - казалось бы, она содержит всю поверхность земли, и какие точки находятся на ее периметре?
Ответы
Ответ 1
Стандартные выпуклые алгоритмы оболочки не преодолеваются обтеканием координат на поверхности Земли, а более фундаментальной проблемой. Поверхность сферы (пусть забывают не совсем сферичность Земли) не является евклидовым пространством, поэтому евклидова геометрия не работает, а выпуклые подпрограммы корпуса, предполагающие, что подстилающее пространство является евклидовым (покажите мне тот, который не " t, пожалуйста) не будет работать.
Поверхность сферы соответствует представлениям эллиптической геометрии где линии - большие круги, а противоположные точки - одна и та же точка. Вы уже начали испытывать проблемы, возникающие при попытке применить евклидову концепцию выпуклости к эллиптическому пространству.
Один подход, открытый вам, - принять определения геодезической выпуклости и реализовать процедуру геодезической выпуклой оболочки. Это выглядит довольно волосатым. И это может не привести к результатам, которые соответствуют вашим (обычно евклидовым) ожиданиям. Во многих случаях для 3 произвольных точек выпуклая оболочка оказывается всей поверхностью сферы.
Другой подход, принятый навигаторами и картографами на протяжении веков, заключался в том, чтобы проецировать часть поверхности сферы (часть, содержащую все ваши точки) в евклидово пространство (которое является объектом картографических прогнозов, и я выиграл " не обращайте на вас ссылки на обширную литературу по этому вопросу) и выясните выпуклую оболочку проектируемых точек. Проектируйте область, в которой вы заинтересованы, и скорректируйте координаты, чтобы они не обертывались; например, если вы заинтересованы во Франции, вы можете скорректировать все долготы, добавив 30deg, чтобы координировать всю страну + ve.
Пока я пишу, идея, предложенная в ответе @Li-aung Yip, об использовании алгоритма 3D-выпуклого корпуса, кажется мне ошибочным. Трехмерная выпуклая оболочка множества точек поверхности будет включать в себя точки, ребра и грани, лежащие внутри сферы. Они буквально не существуют на 2D-поверхности сферы и только изменяют ваши трудности от борьбы с не совсем правильной концепцией в 2D до совершенно неправильного в 3D. Кроме того, я узнал из статьи Википедии, на которой я ссылался, что замкнутое полушарие (то есть одно, которое включает его "экватор" ) не является выпуклым в геометрии поверхности сферы.
Ответ 2
Вместо того, чтобы рассматривать ваши данные как данные долготы долготы, вы могли бы вместо этого рассмотреть это в 3D-пространстве и применить 3D-выпуклый алгоритм корпуса? Возможно, вам удастся найти 2D-выпуклый корпус, который вы хотите, проанализировав трехмерную выпуклую оболочку.
Это возвращает вас к хорошо пройденным алгоритмам для декартовых выпуклых оболочек (хотя и в трех измерениях) и не имеет проблем с обтеканием координат.
В качестве альтернативы, есть статья: Вычисление выпуклой оболочки простого многоугольника на сфере (1996), которая, похоже, касается некоторых те же проблемы, с которыми вы имеете дело (координация обертки и т.д.)
Ответ 3
FutureNerd:
Вы абсолютно правы. Мне пришлось решить ту же проблему, что и Maxy-B для моего приложения. В качестве первой итерации я просто рассматривал (lng, lat) как (x, y) и запускал стандартный 2D-алгоритм. Это работало нормально, пока никто не смотрел слишком близко, потому что все мои данные были в соседнем штате США. Однако, как вторая итерация, я использовал ваш подход и доказал концепцию.
Точки ДОЛЖНЫ находиться в том же полушарии. Как оказалось, выбирая это полушарие нетривиально (это не только центр точек, как я изначально догадывался.) Чтобы проиллюстрировать, рассмотрим следующие четыре момента: (0,0), (-60,0), (+60,0) вдоль экватора и (0,90) северного полюса. Однако вы решили определить "центр", их центр лежит на северном полюсе по симметрии, и все четыре точки находятся в Северном полушарии. Однако подумайте о замене четвертой точки, скажем, (-19, 64) Исландии. Теперь их центр НЕ находится на северном полюсе, но асимметрично направлен к Исландии. Однако все четыре пункта все еще находятся в Северном полушарии. Кроме того, Северное полушарие, уникально определяемое Северным полюсом, является ТОЛЬКО полушарием, которым они разделяют. Поэтому вычисление этого "полюса" становится алгоритмическим, а не алгебраическим.
См. мой репозиторий для кода Python:
https://github.com/VictorDavis/GeoConvexHull
Ответ 4
Если все ваши точки находятся в полушарии (то есть, если вы можете найти секущую плоскость через центр Земли, которая ставит их всех с одной стороны), тогда вы можете сделать центральную aka gnomic aka gnomonic projection from the центра Земли к плоскости, параллельной плоскости разреза. Тогда все большие круги становятся прямыми линиями в проекции, и поэтому выпуклая оболочка в проекции вернется к правильной выпуклой оболочке на Земле. Вы можете видеть, как неправильные точки lat/lon выглядят на широтных линиях в разделе "Гномоническая проекция" здесь (обратите внимание, что долготные линии остаются прямой).
(Лечение Земли как сферы все еще не совсем верно, но это хорошее второе приближение. Я не думаю, что точки на пути истинной наименьшей дистанции через более реалистичную Землю (скажем WGS84) обычно лежат на плоскости через центр. Может быть, притворяясь, что они дают вам лучшее приближение, чем то, что вы получаете со сферой.)