Inpolygon for Georeference raster and polygone files.

14 次查看(过去 30 天)
Hi there, I had a shapefile that imported in MATLAB by shaperead (the shapefile contains about 500 polygons, it is now a struct file & each row defines a polygone) and I have a raster which is georeferenced for the same area which I imported by geotiffread. I want to know the values (mean, sum, max) of the raster pixels that are located in each polygons. I have been suggested to use inpolygon, but I don't have any idea how can I put a my struct and raster and in the inpolygon function. Any idea is really appreciated.

回答(1 个)

duilio fonseca
duilio fonseca 2019-8-19
编辑:duilio fonseca 2019-8-19
Hi there, i have a solution,
% in my case i used lon and lat from NetCDF file, you can use the georefence data from your tiff.
%example
lon=-(77:0.05:65); %longitude in WGS84 for example with 0.05 degrees of resolution
lon=-(55:0.05:50); %longitude in WGS84 for example with 0.05 degrees of resolution
%Now do you have to craete a Mesh
[X,Y]=meshgrid(lon,lat);
points=[X(:),Y(:)]; %point of the grid
%Load your polygons
S = shaperead('yourfile.shp');
%Loading polygons (one by one)
for i=1:length(S)
%you can define yours polygons with some variable... or do it directly from Shape
polygons={S(i).X,S(i).Y}; %S(i).X and S(i).Y define the polygon "i" coordenates
%Index of point inside of each a polygon "i"
ind=inpolygon(points(:,1),points(:,2),polygons{:,2},polygons{:,3});
%here the function depends of you, in this example i used mean
mean_variable_polygon(i,:)=mean(your_raster_file(ind));
clear polygons ind
end
In other case, i recomend you use Zonal statistic extraction tool from Qgis.
  2 个评论
Dylan Ruth
Dylan Ruth 2022-7-17
I'm not the original poster, but seriously, thank you so much for this code! Worked like a charm for some work I'm doing with surface elevation DEMs.

请先登录,再进行评论。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by