Метод Geopandas geom_almost_equals выдает неверный вывод

#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 такая функция, которая проверяет фактическое геометрическое равенство, а не по строкам?

2. github.com/geopandas/geopandas/issues/…