Что возвращает модуль shapely для пересечения объектов в качестве координаты третьего измерения?

У меня есть две траектории, сохраненные как объекты Linestring в shapely, каждая Linestring содержит список кортежей, каждый кортеж будет точкой (Easting_Utm, Northing_utm, Time_in_unix). Я знаю, что обе траектории пересекаются.

Мне нужно найти момент прихода каждого из объектов в точку пересечения. Я использую модуль shapely для выполнения двумерных пространственных вычислений, а в качестве третьего параметра я вставляю единицу измерения времени.

Например, Point=(x,y,z) означает z в тот момент, когда объект находился в позиции x, y. При вычислении пересечения между двумя Linestrings, у которых есть список кортежей (x, y, z), я должен получить точку (x_intersection, y_intersection) и координату z, являющуюся моментом Linestring1 или Linestring2, прибывающих в эту точку. Возможно ли это? Помните, что shapely выполняет только двумерные пространственные вычисления, но допускает третий параметр (z) при создании объектов, в моем случае это время в unix.

Я уже пробовал и получил этот результат, но третий параметр не имеет для меня интуиции того, что получилось красиво:

Linestring1=(List of tuples)--> First trajectory
Linestring2=(List of tuples)--> Second trajectory

Я вычисляю: Linestring1.intersection(Linestring2) и получаю такой результат.

[(604773.0962574851, 5792804.393592814, 1557932495.6671839)]

(Будучи первым элементом кортежа Easting_UTM, вторым Northing_UTM и третьим разом в unix...) Я в основном хочу знать, что делает shapely с этой третьей внутренней координатой.

Заранее спасибо!!

Я должен получить точку пересечения между двумя траекториями (линиями) и в качестве третьего параметра время, когда любая из двух траекторий достигнет этой точки.


person Juan    schedule 23.07.2019    source источник


Ответы (1)


Чтобы вычислить это значение Z, geos (базовая библиотека shapely) начинает с вычисления 2D-местоположения пересечения, затем выполняет линейную интерполяцию значения Z для каждой строки линий, затем берет среднее значение двух значений Z. .

Рассмотрим следующий фрагмент

l1 = LineString([(0, 0, 4), (1, 1, 5)])
l2 = LineString([(0, 1, 12), (1, 0, 13)])

которые представляют две линии, пересекающиеся в их центре, мы можем определить, что вычисленное значение Z может быть ((4+5) / 2) + (12+13) / 2) / 2 = 8.5

result = l1.intersection(l2)
print(result.coords[0]) # (0.5, 0.5, 8.5)
person mgc    schedule 12.02.2021