简介:中国九大农业区划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路网的几何类型可能是MultiLineString,Clip后要素数量很大,建议先把路网融合,再算总长度。二是坐标系,OSM原始数据是WGS84经纬度,直接算长度会有偏差,要先把路网投影到适合分区的等积投影坐标,再计算。
3.3 行政区划和农业区划一起用
农业区划边界不和行政区边界重合,有时需要把县级行政区的属性挂到农业区划面上。用空间连接工具,把县名、县代码字段按面积最大归属原则匹配到农业区划要素上。这样后续做统计时,可以通过县域字段关联统计年鉴,做出更细颗粒度的分析。
4. 格式互转,我把高频的几种都做了一遍
4.1 shp转txt:导出坐标和属性
有时候非GIS同事只要坐标,或者要把数据喂给机器学习模型,shp不方便,就先转成txt。推荐用Python加geopandas,生态成熟,几行代码就能搞定。下面是一个基础示例:
import geopandas as gpd gdf = gpd.read_file('九大农业区划.shp', encoding='utf-8') gdf['geometry_wkt'] = gdf.geometry.to_wkt() out = gdf[['区划名称', 'geometry_wkt']].copy() out.to_csv('九大农业区划.txt', sep='\t', index=False)如果读取时报中文乱码,多半是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.0:dwg转带属性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脚本,也发出来和大家交流。
本文还有配套的精品资源,点击获取