ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

九大农业区划shp数据处理全流程:从解压到出图

2026/9/9 6:33:05 拓冰建站 浏览量
九大农业区划shp数据处理全流程:从解压到出图 简介中国九大农业区划shp数据集面向GIS研究者、农业规划人员和地理信息学习者用于分析中国九大农业区的地理边界与属性特征可用于制图、空间统计和农业区划研究。压缩包共11个文件包含核心的shp矢量文件、dbf属性表、prj投影信息以及sbn/sbx空间索引等配套辅助文件打包后大小17.21MB结构完整可直接加载到ArcGIS、QGIS等平台使用。目前已有4316人学习下载。通过该数据集读者可结合各农业区的气候、地貌和作物特点深入比较黄淮海平原、东北平原、长江中下游等九大区域的种植结构与生产潜力也可叠加气候、土壤等数据开展粮食安全评估与农业可持续发展研究为区域农业规划及政策制定提供基础数据支撑。文件命名清晰要素完整适合作为农业地理信息系统课程设计、科研预研或行业分析的基础底图。 做农业和规划类项目我隔三差五就要找行政区划之外的边界数据。前一阵子接手一个全国尺度的农业分区统计任务客户发来一个压缩包名字叫《中国九大农业区划shp.rar》里面是全国按综合农业区划划分的九个一级农业区的矢量边界。这个数据看着简单但真正用起来牵扯到坐标系判断、属性表处理、格式互转、批量整理一堆事。这篇文章就把我从解压到出图的完整过程拆开讲一遍适合手里有shp但不知道怎么处理的GIS新手也适合想快速上手九大农业区划数据的行业从业者。1. 拆开rar看“九大农业区划”这个数据包1.1 九大区划的分区逻辑不知道九大农业区划怎么来的拿到shp也只能当画图底图。这个数据的前身是《中国综合农业区划》划分依据主要是各地自然条件、农业生产结构和发展方向。九个一级农业区分别是东北区、内蒙古及长城沿线区、黄淮海区、黄土高原区、长江中下游区、西南区、华南区、甘新区、青藏区。每个区的名字基本就代表了它的地理位置和主要农业特征。区划名称大致覆盖农业特点东北区黑龙江、吉林、辽宁大部及内蒙古东北部大豆、玉米、水稻商品粮基地内蒙古及长城沿线区内蒙古中部、河北北部、晋陕等长城沿线农牧交错牧业与杂粮并重黄淮海区黄河下游、淮河流域、海河流域的平原地区小麦、玉米、棉花主产区黄土高原区山西、陕西、甘肃的黄土塬梁峁地区旱作杂粮水土保持关键区长江中下游区长江中下游平原及周边丘陵水稻、油菜、淡水养殖西南区云贵川渝及广西西部立体农业水稻、玉米、烟草华南区广东、广西、福建、海南及云南南部热带亚热带经济作物、水果甘新区甘肃、宁夏、新疆的绿洲区域绿洲农业棉花、瓜果青藏区青海、西藏及川西滇西北高寒牧业青稞种植这个分区之所以常用是因为它不纯按行政区边界走而是按农业生态条件来划。比如黄淮海区跨了多个省份秦岭南北也被区别对待。拿它做统计和出图比直接用省界更贴近农业生产的真实分布。1.2 shp不只是“一个文件”很多人以为shp就是一个文件其实它是Esri Shapefile格式的家族总称。rar解压后你至少会看到.shp、.shx、.dbf、.prj这几个兄弟文件。如果只把.shp发给别人对方软件大概率会提示“缺少数据源”或者“文件无法打开”。扩展名作用缺失会怎样.shp存储几何坐标整个文件作废.shx几何索引部分软件打不开.dbf属性表数据看不到“区划名称”等字段.prj坐标系统信息位置可能跑到别处.cpg字符集编码中文属性容易乱码我一般拿到rar里的shp数据先用7-Zip解压到一个不带空格的英文路径再打开。这样做是为了避免后面做转换、跑Python脚本时中文路径导致一些工具报错。尤其是FME、GDAL这类老牌工具对中文路径兼容性确实不稳定。1.3 先看.prj再谈其他在双击把数据拉进ArcGIS或QGIS之前建议先用记事本打开.prj文件看坐标系统写的是什么。九大农业区划shp常见的有两种一种是CGCS2000地理坐标系单位是度另一种是WGS84经纬度。也有提前做好投影的版本比如Albers等积投影单位是米。这个差别很关键。把经纬度shp叠到投影坐标系的底图上图形要么缩成一个点要么飘到海里。判断方法也简单右键查看图层范围如果是-180到180之间的数值基本是经纬度如果是几百万这种大数就是投影坐标。养成这个习惯加载阶段就能省下大量排查时间。2. 从拖入画布到导出新shp加载与属性表实操2.1 在ArcGIS/QGIS中加载并校准位置有.prj的情况下把shp直接拖进ArcMap、ArcGIS Pro或QGIS画布就行。我在ArcGIS Pro里一般是先把地图坐标系设成CGCS2000或WGS84再拖数据进去。动态投影会自动处理不同坐标系的显示但你要理解数据本身没有变只是“看起来对齐了”。如果叠加在线底图出现明显偏移先确认在线底图的坐标系和你shp的坐标系是否一致。如果shp没有.prj右键图层属性在Source里Set Coordinate System或者QGIS里用Layer CRS - Set Layer CRS。注意这是“定义坐标系”不是“转换坐标系”。举个例子我之前拿到一份九大农业区划shp解压后只有.shp和.dbf图形显示在赤道附近。经验告诉我它原本是WGS84经纬度于是在定义坐标系里选EPSG:4326图形立刻归位。但有人会用Project工具去转换结果错误坐标继续漂移越修越乱。先定义再转换顺序不能反。2.2 属性表能告诉你什么打开属性表农业区划shp通常会有OBJECTID、Shape_Leng、Shape_Area、区划编码、区划名称这几个字段。很多人直接拿Shape_Area字段去统计面积这是个坑。Shape_Area的单位和坐标系有关如果是经纬度它其实是“度平方”不是真实的平方公里如果是投影坐标单位通常和坐标单位一致米的话得到平方米。我习惯新建一个“面积_km2”字段用字段计算器处理。投影坐标下直接写!Shape_Area! / 1000000如果原始是经纬度就用!Shape_Area.geodesicAreaWGS84!这类球面面积函数。做分区占比统计时更不要直接对Shape_Area做加和先确认坐标系再算面积。2.3 ArcGIS里导出shp的几种方式“arcgis如何导出shp文件”是我被问过最多的问题之一。基础操作是右键图层 - 数据 - 导出数据选择“所有要素”输出Shapefile。另一种更批量化的方式是ArcToolbox里的Feature Class To Shapefile可以一次把多个图层全部转成shp。导出时容易忽略几个点输出路径不要用中文坐标系选“数据框”还是“源数据”要想清楚如果只想导出九大区划里的某几个区先用“按属性选择”选出要素再导出。批量导出多个图层时Feature Class To Shapefile效率很高但它只认要素类不认图层的符号化设置。3. 区域边界图shp数据从哪下载来源与叠加实战3.1 我常用的公开数据渠道每次有人问“区域边界图shp数据从哪下载”我第一反应是看你有多少时间。时间充足就去科研平台资源环境科学与数据中心、国家地球系统科学数据中心、全国地理信息资源目录服务系统这些都能找到行政边界和专题区划数据。OpenStreetMap则可以拿到路网、水系、地名点这类基础数据。需要说明的是九大农业区划这类专题shp很多平台需要登录申请部分用于科研免费商业用途要联系授权。我一般先看数据说明和更新年份再决定适不适用。不要图方便随便去公众号下载打包好的资源文件里缺个prj或dbf后续处理会非常痛苦。3.2 全国路网shp数据怎么和九大区划叠加做农业区划相关分析时路网是经常要叠加上去的一个图层。OpenStreetMap下载的全国路网shp可能超过100MB必须先把非道路要素过滤掉再和九大农业区划做叠加。我的操作流程是在QGIS里加载全国路网shp用“按属性选择”过滤highway字段只保留trunk、primary、secondary这类主要道路然后以九大区划为裁剪范围用Clip工具切出分区路网最后在属性表里新建字段用路网总长度除以区划面积得到路网密度。这里有两个坑。一是OSM路网的几何类型可能是MultiLineStringClip后要素数量很大建议先把路网融合再算总长度。二是坐标系OSM原始数据是WGS84经纬度直接算长度会有偏差要先把路网投影到适合分区的等积投影坐标再计算。3.3 行政区划和农业区划一起用农业区划边界不和行政区边界重合有时需要把县级行政区的属性挂到农业区划面上。用空间连接工具把县名、县代码字段按面积最大归属原则匹配到农业区划要素上。这样后续做统计时可以通过县域字段关联统计年鉴做出更细颗粒度的分析。4. 格式互转我把高频的几种都做了一遍4.1 shp转txt导出坐标和属性有时候非GIS同事只要坐标或者要把数据喂给机器学习模型shp不方便就先转成txt。推荐用Python加geopandas生态成熟几行代码就能搞定。下面是一个基础示例import geopandas as gpd gdf gpd.read_file(九大农业区划.shp, encodingutf-8) gdf[geometry_wkt] gdf.geometry.to_wkt() out gdf[[区划名称, geometry_wkt]].copy() out.to_csv(九大农业区划.txt, sep\t, indexFalse)如果读取时报中文乱码多半是dbf用了GBK编码把encoding改成gbk再试。如果只想导出每个区的质心经纬度先转换到EPSG:4326然后用centroid.x和centroid.y生成两个字段再写txt这样单位就是标准的经纬度。4.2 shp批量转kml给外业和汇报用给外业人员看地图KML是非常方便的格式。QGIS里右键图层 - 导出 - 另存要素为KML坐标系选WGS84。ArcGIS里用Layer To KML工具设置输出文件和名称字段一步能转完。批量转KML时我一般写一个ArcPy循环或者用QGIS的Batch Processing界面。导出后如果中文出现乱码检查一下导出选项里的编码是不是UTF-8。实际经验是shp里面的面很复杂时先做一次简化不然生成的KML/KMZ会很大外业设备上打开卡顿。4.3 shp转3dtiles上Cesium的必经步骤要把九大农业区划放到三维地球里展示常规做法是转成3dtiles。我用CesiumLab比较多新建处理任务选择“矢量数据转换”把shp拖进去设置高度模式为“贴地”或“拉伸”选好作为属性分类的字段点开始转换。输出目录里会有tileset.json随便放到一个静态服务器上Cesium里用Cesium3DTileset加载即可。这里提醒一点如果shp里的大区面很精细、要素量巨大最好在CesiumLab里限制最大层级或者先在GIS里做一次融合。不然生成的瓦片数量会非常夸张浏览器加载半天转不出来。4.4 FME Workbench 2024.0dwg转带属性shp经常有人拿CAD图转shp转完图层和属性全丢。FME Workbench 2024.0里可以用读模块读DWG通过AttributeExposer把Layer等属性暴露出来再用AttributeManager重命名字段最后写Esri Shapefile。关键点读DWG时要选择按“图层”分组并且只读取需要的实体类型比如Polyline和Text避免注记和辅助线把shp属性表塞满。还有一个实战技巧CAD里的属性块数据要在读模块参数里把“Expand Blocks”打开否则块属性不会进入shp。这是我实际踩过的坑处理规划边界时整整浪费了半天后来才发现是读模块设置问题。5. 文件整理批量压缩、渔网分割与按字段拆分5.1 用7-Zip批量压缩一整个文件夹的shp多个shp要发给别人一个一个右键压缩确实烦。用7-Zip命令行写个批处理几分钟就能处理几百个文件。在目标文件夹里新建一个.bat脚本写入for %%f in (*.shp) do C:\Program Files\7-Zip\7z.exe a %%~nf.rar %%~nf.shp %%~nf.shx %%~nf.dbf %%~nf.prj这样每个shp家族文件都会单独打成一个rar。如果文件太大加参数-v500m做分卷压缩或者用-tzip改成zip格式。需要留意批处理里for变量在cmd窗口用%f在.bat脚本里要写%%f否则会直接报错。如果只是单个shp要压缩右键用7-Zip压rar即可但同样要把同名系列的dbf、prj全部选中再拖进去。很多人只拖了一个.shp进压缩包收件人根本打不开这是最常见的“单个shp如何批量压缩”的问题来源。5.2 渔网分割shp把大区划切成规整网格按渔网分割shp是实际项目里很常见的需求。我处理过全国尺度的九大区划数据需要按1度乘以1度的网格发布瓦片做法分两步。第一步在ArcGIS里用Create Fishnet工具模板范围选九大区划图层的范围设置像元宽度1度、高度1度输出一个网格面。第二步用Clip或Intersect把区划面按网格切碎。Intersect能保留网格ID和区划名称属性更适合后续统计。QGIS里对应的是Create grid和Clip工具。经验之谈经纬度坐标下1度网格在不同纬度的面积并不相等。如果目的是等面积网格先把数据投影到Albers等积投影再做渔网结果会更科学。5.3 按属性把九大区划拆成独立shp如果想把九大区划shp按“区划名称”拆成9个独立文件ArcGIS Pro里用Split By Attributes工具QGIS里用Split Vector Layer。选择字段后工具会自动在输出文件夹里生成以属性值命名的shapefile。这个和“arcgis如何导出shp文件”是同一个问题但批量做更高效。拆分后每个小文件处理速度快非常适合分区出图不用反复开属性查询。拆分前务必检查字段没有空值名称不包含/、\、?等非法字符否则输出文件可能命名失败。这个我在QGIS里遇到过好几次。九大农业区划边界本身是静态数据但和路网、行政区、统计年鉴一叠加能做的分析非常多。写到这里这个shp压缩包从解压、加载、出图到格式转换和批量整理算是走完了一条完整链路。我个人的习惯是数据到手先看prj和dbf再做任何操作如果只是给项目组里非GIS同事看先转KML如果要上线web再考虑3dtiles。下次我再整理一套基于九大区划的分区统计Python脚本也发出来和大家交流。本文还有配套的精品资源点击获取