MATLAB读写shapefile以及提取shapefile范围内的数据

shapefile文件下载

全世界

下载链接1:http://www.naturalearthdata.com
下载链接2:https://tapiquen-sig.jimdofree.com/english-version/free-downloads/world/
下载链接3:http://geoportal.icpac.net/layers/geonode%3Aafr_g2014_2013_0#more
在这里插入图片描述

各国区划

下载链接:https://www.diva-gis.org/gdata
在这里插入图片描述

MATLAB读取shaplefile并提取该区域的数据

步骤一,读取shapefile文件

首先,使用shaperead函数读取shapefile文件,识别出shp文件的经纬度信息。读取后
下图的X、Y代表了shp的经度、纬度。

s = shaperead('IND_adm0.shp');

在这里插入图片描述

步骤二,根据待提取数据的经纬度判断是否在shp范围

使用inpolygon函数判断待提取数据经纬度是否在shp范围内。

%判断是否在shape范围内,其中s.X和s.Y为shp的经度、纬度,x和y分别是待提取数据的经纬度
%in为满足条件的数据,是一个逻辑数组
in = inpolygon(x,y,s.X,s.Y);

我们下载的是印度区域的shapefile,截取数据并绘图后,如下所示:
在这里插入图片描述

shapefile写入

与读入shp相比,输出shp文件相比麻烦一些,需要自己建立一个struct,然后利用shapewrite函数将struct写入shp文件中。

india = shaperead('IND_adm0.shp');

%必要字段
sites.Geometry = india.Geometry;                %元素类型,Point,Line,Polygon等
sites.BoundingBox = india.BoundingBox;          %[minx,miny; maxx,maxy];
sites.X = india.X;                              %坐标X,经度
sites.Y = india.Y;                              %坐标Y,纬度

%附加字段
%这部分属于自定义内容,不定义也不影响使用,只是不会生成dbf文件
sites.NAME = 'AERONET_SITES';

shapewrite(sites,'test_shape'); %生成shp,dbf,shx三个文件

在这里插入图片描述

若是多个独立polygon可以使用如下的方式生成shapefile文件

for i=1:5
	Map(i).Geometry = 'Polygon';
	Map(i).BoundingBox = [100*i,100*i;100*i+100,100*i+100];
	Map(i).X = [100*i,100*i+100,100*i+100,100*i,NaN];
	Map(i).Y = [100*i,100*i,100*i+100,100*i+100,NaN];
	Map(i).Id = i;
end
shapewrite(Map,'Example');

在这里插入图片描述

参考
https://www.mathworks.com/help/map/ref/shaperead.html?s_tid=srchtitle
https://www.mathworks.com/help/matlab/ref/inpolygon.html?s_tid=srchtitle
https://blog.csdn.net/qq_37844142/article/details/83474760

  • 7
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
shapefile是一种常用的地理空间数据格式,它可以存储点、线、多边形等空间几何对象的属性信息。在Matlab中,可以使用自带的函数shapewrite来写shapefile文件。然而,该函数对字段名的要求是字符型,无法直接支持中文字段名。为了解决这个问题,可以对shapewrite函数进行修改,以实现中文字段名的功能。 除了对shapewrite函数进行修改之外,还可以使用其他方法来实现在Matlab中写入shapefile文件并支持中文字段名。其中一种方法是使用自定义函数shapewrite_chinese_field_name,它与Matlab自带的shapewrite函数使用方法一致,但支持中文字段名。通过调用shapewrite_chinese_field_name函数并传入结构体参数P,可以将数据写入shapefile文件文件名为'test_name.shp'。 另外,还可以使用Matlab脚本将KML文件读入mapstruct结构数组,并提供写入Shapefile的选项。KML文件必须是统一类型:点、线、线环或多边形。输出的Shapefile文件包含5-6个字段,包括'Geometry'、'X'、'Y'、'altitude'、'Id'等。 综上所述,要在Matlab中写入shapefile文件并支持中文字段名,可以通过修改shapewrite函数或使用自定义函数shapewrite_chinese_field_name,还可以使用Matlab脚本将KML文件读入mapstruct结构数组并写入Shapefile文件[3]。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [matlabshpfile文件(字段名改为中文)](https://blog.csdn.net/weixin_43955546/article/details/127828066)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [KML-Matlab-Shapefile 转换:Matlab 脚本将 KML 文件导入 Matlab 以及转换为 Shapefile。-matlab开发](https://download.csdn.net/download/weixin_38636763/19291767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值