Matlab提供了关于shp读取以及shp存储的函数。
S = shaperead(filename)
shapewrite(S,filename)
常见的三种shp类型:Point,Line,Polygon。
首先先读取了一个面状的shp看看。
![](https://img-blog.csdnimg.cn/img_convert/bc878ed1b2bf802a6fc68cf7de4f9c15.png)
读取完是多个struct(这里每个struct代表一个省),每个struct都有几个共同的字段。
如果是Point类型,X字段(经度)和Y字段(纬度)只需要一个数字。
如果是Polygon类型,则多需要多个数字形成闭合,需要注意的是,第一个数字和倒数第二个数字需要相同,最后一个数字需要是NaN,具体的见代码。
clc;clear;
S(1).Geometry = 'Polygon';
S(1).BoundingBox=[116,29; 117,28];
S(1).X = [116,116,117,117,116, NaN]; % 经度 lon
S(1).Y = [29,28,28,29,29, NaN]; % 纬度 lat
S(1).Id = 1; %除了以上的几个关键字段,还得有至少一个额外的字段,不然不能生成dbf文件
S(2).Geometry = 'Polygon';
S(2).BoundingBox=[114,25; 115,24];
S(2).X = [114,114,115,115,114, NaN]; % 经度 lon
S(2).Y = [25,24,24,25,25, NaN]; % 纬度 lat
S(2).Id = 2;
shapewrite(S,'test.shp'); %生成shp,dbf,shx三个文件
生成的shp效果如图:
![](https://img-blog.csdnimg.cn/img_convert/cbdd71c3da0cafb1dfb2ee8d5e1efdff.png)
了解了以上的步骤和原理之后,下面批量生成shp
% Satellite-based survey of extreme methane emissions in the Permian basin
PermianBasin = [-104.5,31;-103,31;-103,32.5;-104.5,32.5;-104.5,31;NaN,NaN];
% Monitoring large methane point sources with Sentinel-2 satellite observations
Algeria = [5.6,31.2;6.2,31.2;6.2,32;5.6,32;5.6,31.2;NaN,NaN];
% Airborne methane remote measurements reveal heavytail flux distribution in Four Corners region
SanJuanBasin = [-108.25,36.75;-107.75,36.75;-107.75,37;-108.25,37;-108.25,36.75;NaN,NaN];
% Satellites Detect Abatable Super-Emissions in One of the World’s Largest Methane Hotspot Regions
Turkmenistan = [53.4,37.8;54.5,37.8;54.5,39.6;53.4,39.6;53.4,37.8;NaN,NaN];
Hotspots = {'PermianBasin','Algeria','SanJuanBasin','Turkmenistan'};
for i = 1:4
basin = eval(Hotspots{1,i});
P.Geometry = 'Polygon';
P.BoundingBox=[min(basin(:,1)),max(basin(:,2)); max(basin(:,1)),min(basin(:,2))];
P.X = basin(:,1); % 经度 lon
P.Y = basin(:,2); % 纬度 lat
P.Id = 1;
shapewrite(P,[Hotspots{1,i},'.shp']); %生成shp,dbf,shx三个文件
end
PermianBasin变量如下
![](https://img-blog.csdnimg.cn/img_convert/060e6509e2be348e2a6c068a1888fb1e.png)