Пересечение наложения Geo pandas дает неверный результат - PullRequest
0 голосов
/ 07 августа 2020

Я хочу пересечь два кадра геоданных (полигоны) с помощью gpd.overlay. Когда я пересекаюсь в QGIS, результирующий шейп-файл является правильным (я пересекаю красный эллипс и желтый шейп-файл, результат отображается зеленым на изображении ниже).

Когда я пересекаюсь с использованием geo pandas, результирующий фрейм геоданных пуст. Вот код:

import geopandas as gpd
gdf1 = gpd.read_file('... /gdf1.shp')   
gdf2 = gpd.read_file('... /gdf2.shp')   
gdf_inter = gpd.overlay(gdf1, gdf2, how='intersection')

> len(gdf_inter)
> 0

Ссылка на шейп-файлы: https://www.dropbox.com/s/6e7frbev71phkpy/SHP_TEST.7z?dl=0

Изображение: образ

Я полагаю, это могло быть связано с проекцией? Идеи? Заранее спасибо,

Ответы [ 2 ]

0 голосов
/ 08 августа 2020

Спасибо вам обоим. Crs был одинаковым в обоих файлах. Я установил для параметра keep_geom_type значение False, что решило проблему (вернуло коллекцию Geometrycollection, состоящую из Linestring и многоугольника).

Я не пробовал это раньше, так как информация на веб-сайте сбивала с толку: «В настройках по умолчанию, overlay возвращает только геометрии того же типа геометрии, что и df1 (левый), где Polygon и MultiPolygon рассматриваются как один и тот же тип (другие типы аналогично). [...] ". Я пересекаю два многоугольника, но не получаю взамен многоугольник.

В любом случае, теперь это решено. Большое вам спасибо.

0 голосов
/ 08 августа 2020

Вот что я бы попробовал:


import geopandas as gpd
gdf1 = gpd.read_file('... /gdf1.shp')   
gdf2 = gpd.read_file('... /gdf2.shp').to_crs(gdf1.crs)
gdf_inter = gpd.overlay(gdf1, gdf2, how='intersection')
...