Библиотека Python для полей высоты облака точек?

Кто-нибудь знает хороший способ справиться с полем высоты облака точек в python? Я немного погуглил, но не уверен, что какие-то результаты действительно описывают то, что мне нужно. У меня есть более 20 миллионов точек в виде (широта, долгота, высота) (или, если хотите, (х, у, высота)), и я хочу иметь возможность интерполировать в произвольную позицию. Но мой опыт показывает, что простая квадратичная интерполяция ужасна для данных о высоте. Например, изобразите следующие точки высоты и хотите выполнить интерполяцию в точке X:

      4         3         2
4        3        2   2     0  0 
  3           2       0   0     2
      2   22      0    2   2
 2           X    2   3
   0  0  0     2         3
0          2    3             4
   2                3

Ясно, что X находится внизу какого-то глубокого канала, запускающего ENE слева внизу (или WSW сверху справа). Но квадратичная интерполяция будет указывать, что X находится на высоте около 2, то есть не в каньоне, а на его краю. Квадратичная интерполяция заботится только о расстоянии, а не об угле. Но на местности угол имеет большое значение. Если у вас есть удаленная точка и несколько более близких точек в одном и том же направлении, удаленная точка практически не имеет смысла, но если у вас есть удаленная точка в направлении без других точек на пути, эта точка может быть очень значимой.

Хорошая триангуляция могла бы захватить геометрию, очевидно - достаточно просто интерполировать точку на треугольной грани. Но триангуляция Делоне не оборвала бы ее - она ​​только усилила бы заворот, потому что она не любит длинные тонкие формы, такие как каньоны, и вместо этого предпочла бы тесселяцию точек по краям каньона в приведенном выше примере.

Я могу придумать алгоритмы, чтобы хорошо захватить местность (например, "проецирование" из каждой точки линией в направлении X, представляющей взвешенный наклонный вклад, и ослабление взвешивания каждой точкой, которую проходит линия, относительно того, как близко она проходит... затем делать наименьших квадратов, подходящих для всех склонов и точек). Другой вариант, который приходит на ум, - это использовать квадратичную интерполяцию во всех направлениях от X, чтобы получить наклоны в каждом направлении, а затем итеративно настраивать X вверх или вниз, чтобы сходиться к решению, в котором оно не выступает необычно вверх или вниз в целом. Но любой новый алгоритм, вероятно, будет важной работой для реализации, и я ненавижу изобретать велосипед (вероятно, неоптимально). Конечно, должна быть какая-то быстрая библиотека, которая была бы хороша для такого рода вещей? Надеюсь, питон?:)

0 ответов

Другие вопросы по тегам