5

I have a shapefile that I have loaded as a geopandas dataframe, and it has a geometry column containing polygons and multipolygons.

My end goal is to do some zonal computations on a GeoTiff raster, in particular I want to compute the mean value within each polygon, and also count the number of pixels that contributed to that polygon zonal mean. Here's a link to another GIS-SE question of mine that outlines my attempts to do that so far using GDAL and rasterstats.

I am just wondering if geopandas is up to zonal calculations yet? If I open a raster in GDAL/numpy/rasterio and load the shapefile in a geopandas dataframe, is there a way to compute the number of raster pixels inside each polygon?

  • Could you clarify what you mean by 'count the number of pixels'? – juturna May 29 '15 at 13:43
  • My apologies, I'm new to GIS and wasn't thinking straight. Obviously the shapefile doesn't have pixels, I was thinking of the GeoTiff raster I want to overlay. I'll delete this question – user3591836 May 29 '15 at 14:16
  • So you are looking for the number of pixels in the raster within each polygon? You can edit your question to clarify what you are asking. – juturna May 29 '15 at 14:23
7

You can do zonal statistics from a GeoDataFrame directly on a GeoTiff using rasterstats.

from rasterstats import zonal_stats
import geopandas as gpd
geodf = gpd.read_file("foo.shp")
zonal_stats(geodf, "bar.tif")

There are some good examples of rasterstats integration on the wiki

  • Yes - I did go with rasterstats in the end and it works great. – user3591836 Oct 26 '15 at 18:29
  • do these stats reflect the values of the pixels? or their area? – fccoelho Dec 3 '16 at 17:35
  • @fccoelho Zonal statistics are descriptive statistics (mean, median, min, max, etc) of the set of pixels which intersect a geometry. Thus both the number of pixels (roughly equivalent to the area of the geometry) and the value of those pixels are considered. – perrygeo Dec 4 '16 at 23:33
0

By "count the number of pixels" do mean the area of each polygon? If so,

mygeodf.area
  • 1
    Thanks for your answer. My question didn't make any sense, so I've updated it. – user3591836 May 29 '15 at 14:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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