Библиотека 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 вверх или вниз, чтобы сходиться к решению, в котором оно не выступает необычно вверх или вниз в целом. Но любой новый алгоритм, вероятно, будет важной работой для реализации, и я ненавижу изобретать велосипед (вероятно, неоптимально). Конечно, должна быть какая-то быстрая библиотека, которая была бы хороша для такого рода вещей? Надеюсь, питон?:)