Пространственное объединение Geopandas - AttributeError: у объекта 'NoneType' нет атрибута 'bounds' - PullRequest
0 голосов
/ 10 июля 2019

У меня есть следующие геоданные, соответствующие регулярной сетке:

        id   grid_id    geometry
0       48         0    (POLYGON ((2.052457758079306 41.42493869117656...
1       49         1    (POLYGON ((2.052470852112577 41.42403805731954...
2       215        2    (POLYGON ((2.053641274433816 41.42584917461342...
3       216        3    (POLYGON ((2.053654352531821 41.42494854059127...
4       217        4    (POLYGON ((2.053667430035439 41.42404790642426...

и точка геоданных:

    id_act  geometry
0   4001    POINT (2.183026563657264 41.37459702541483)
1   4003    POINT (2.183012216695291 41.37471411724238)
2   4003    POINT (2.183128113845906 41.37472901746361)
3   3002    POINT (2.182820482338962 41.37482095671629)
4   4003    POINT (2.182945418252172 41.37482221760939)

Я объединяю два кадра данных через пространственное соединение:

id_grid = gpd.sjoin(gdf, grid, how="inner", op='intersects')

но возвращает следующее AttributeError:

AttributeError: 'NoneType' object has no attribute 'bounds'

Дело в том, что когда я вызываю функцию:

grid.bounds

это дает:

        minx         miny       maxx         maxy
0   2.052458    41.424038   2.053667    41.424949
1   2.052471    41.423137   2.053681    41.424048
2   2.053641    41.424949   2.054851    41.425859
3   2.053654    41.424048   2.054864    41.424958
4   2.053667    41.423147   2.054877    41.424058
5   2.053681    41.422247   2.054890    41.423157

вызов обоих type(gdf.geometry[0]) или type(grid.geometry[0]) дает:

shapely.geometry.point.Point
shapely.geometry.multipolygon.MultiPolygon

соответственно.

Кто-нибудь знает, где ошибка?

1 Ответ

0 голосов
/ 16 июля 2019

Скорее всего, ваши точки геоданных содержат пустую геометрию. Вот почему вы получите «NoneType». Вы можете оставить их через

points_clean = points[points.geometry.type == 'Point']

В столбце геометрии будут храниться только строки с типом Point. Тогда ваше пространственное соединение должно работать. У вас также может быть пустая геометрия в ваших слоях Polygon. В этом случае просто измените приведенный выше код с Point на Polygon или MultiPolygon.

...