1

I have the following geodataframes, corresponding to a regular grid:

        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...

and a points geodataframe:

    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)

I'm merging the two dataframes through a spatial join:

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

but it returns the following AttributeError:

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

the point is that when I call the function:

grid.bounds

it yields:

        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

calling both type(gdf.geomtry[0]) or type(grid.geomtry[0]) gives:

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

respectively.

Does anyone know where is the mistake?

3
  • Are you sure the geometries intersect? When I get None type returned it is usually because my geometry does not intersect, is there a method to check if the intersection exists before you join? Commented Jul 12, 2019 at 9:36
  • The files come from a csv file and a geojson file that apparently intersect in QGIS 3.4 environment. I've converted the first file several times from csv to geojson trying to fix the error without success. I chnged the crs already... Commented Jul 15, 2019 at 13:55
  • maybe do an "outer" join and see what comes out. it looks to me that your point is not within the polygon, I can't see all coords for the polygon but the ones I see all have longitude around 2.05 and your point longitude is 2.18. Commented Jul 16, 2019 at 13:09

1 Answer 1

1

I've solved trying points.bounds that yields the same attribute error message:

'NoneType' object has no attribute 'bounds'

So that means that the mistake was in the points geodataframe.

I ran the following script to slice the valid geometries:

points_fix = points.loc[points.is_valid]

It discards just about 1,000 points out of the original geodataframe, composed by more than 78,000 features, which works statistically for my purpose.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.