#geospatial #geopandas
#геопространственный #геопанды
Вопрос:
У меня есть 2 фрейма геоданных.
geoframe1
MULTILINESTRING((-0.87131 52.25771, -0.87144 52.25763, -0.87126 52.25756, -0.87146 52.25747, -0.87159 52.25756))
MULTILINESTRING((-0.87180 52.25758, -0.87167 52.25760, -0.87160 52.25767, -0.87148 52.25769, -0.87141 52.25774))
MULTILINESTRING((-0.87190 52.25757, -0.87185 52.25767, -0.87171 52.25775, -0.87151 52.25777, -0.87151 52.25777))
geoframe2
MULTILINESTRING((-0.87131 52.25771, -0.87144 52.25763, -0.87126 52.25756, -0.87146 52.25747, -0.87159 52.25756))
MULTILINESTRING((-0.87190 52.25757, -0.87185 52.25767, -0.87171 52.25775, -0.87151 52.25777, -0.87151 52.25777))
прежде чем перейти к геометрии, оба набора точно равны. чтобы проверить метод «geom_almost_equals», я удалил одну строку строки из geoframe2 и выполнил метод.
features_equal = geoframe1.loc[geoframe1.geom_almost_equals(geoframe2, decimal=5)]
Результат должен дать мне только 2 геометрии, которые на самом деле равны.
Но в результате я получил только 1 геометрию
**MULTILINESTRING((-0.87190 52.25757, -0.87185 52.25767, -0.87171 52.25775, -0.87151 52.25777, -0.87151 52.25777))**
Как это могло произойти?
есть ли какая-либо внутренняя обработка, которая выполняет неправильную операцию?
пожалуйста, помогите в этом.
Ответ №1:
Копирую мой ответ с GitHub.
geoframe1.geom_almost_equals(geoframe2, decimal=5)
работает по строкам. Он выравнивает оба геосериала и проверяет, почти ли одинаковы геометрии для каждой строки.
В вашем случае первый проверяет первый, True
поскольку оба равны. Второй проверяет второй, то есть False
потому, что они разные. Третья проверка None
выполняется .
Поэтому у вас есть [True, False, False]
, который, естественно, возвращает одну строку.
Комментарии:
1. Спасибо, Мартинфлейс. до сих пор я придерживаюсь мнения, что каждая строка geoframe1 сравнивает себя со всеми строками geoframe2 (например, вложенный цикл for) Есть ли в geopandas такая функция, которая проверяет фактическое геометрическое равенство, а не по строкам?