ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

中国矢量地图SHP从格式转换到裁剪分割实用指南

中国矢量地图SHP从格式转换到裁剪分割实用指南 简介中国矢量地图SHP格式是一套覆盖国界、省界、市界、县界四级行政边界的GIS基础数据资源面向GIS开发者、城乡规划师、地理数据分析人员及科研学者可直接用于地图制图、区划分析、人口与经济数据可视化、城乡与交通规划等多种场景。资源包共28个文件每种核心格式各4个shp存储几何形状dbf记录行政区域属性prj提供投影坐标shx、sbn、sbx构成空间索引xml保存元数据配套完整可在ArcGIS、QGIS等主流平台中直接加载与编辑。整个压缩包仅1.78MB轻量紧凑便于快速部署。目前已有8029人浏览学习是相关地理工作者常用的基础数据。借助这套数据用户能省去自行搜集与整理行政边界的环节快速开展空间统计、专题制图与决策支持有效提升中国地理数据分析效率。 做GIS的人手里没有过几套“中国矢量地图SHP文件”都不好意思说自己是干这行的。但说实话我见过太多人卡在同一个地方要么下载SHP文件之后发现打不开要么就是格式五花八门KML、GeoJSON、DWG各种来路的数据堆在一起转换折腾到半夜还有人问得最多的一句话就是——“ArcGIS到底怎么按区域裁剪SHP”。这篇文章我就把自己这些年折腾中国矢量地图SHP的经验捋一遍从文件结构、格式互转、裁剪分割到国土报备常用的SHP转TXT和WKT转多边形最后再讲几个ArcGIS Pro和QGIS的实操细节尽量把热搜词里的那些需求一次说清楚。1. 中国矢量地图SHP先搞清楚你手里这份数据够不够用很多人拿到SHP文件就直接往ArcGIS里拖结果弹出一堆错误第一反应是软件坏了。其实不是多半是文件本身有问题。1.1 一份能直接用的中国矢量SHP文件结构长什么样SHP格式不是“一个文件”它是一组文件的集合。一个完整的中国省界矢量数据至少要有.shp几何信息也就是点线面的坐标.dbf属性表存放地名、区划代码、面积等字段.shx几何和属性的索引文件.prj坐标系定义文件这个文件尤其重要我遇到过一份中国地图SHP拖动到软件里只显示了一张空表检查才发现是.dbf文件丢失了。所以拿到数据后第一件事就是确认这些配套文件是否齐全。如果你只有单个.shp文件用QGIS打开时还勉强能识别但ArcGIS往往会报“无法打开”。网上很多下载包为了省事把.dbf和.shx分离了下载时一定要看清文件列表。还有一个更隐蔽的坑属性表里的字段名。中国数据常见的字段有NAME、PAC行政区划代码、AREA但有些数据源用的是中文表头例如“省名称”“代码”。这两种字段名在ArcGIS里都能显示可一旦要做连接、按字段筛选、导出TXT麻烦就来了。建议拿到数据的第一时间先打开属性表看一眼把字段名统一成英文或拼音顺便检查有没有乱码。中文乱码通常是因为.dbf的字符集问题ArcGIS Pro里可以通过“数据源字符集”设置调整QGIS里则是在打开文件时选编码。1.2 省级、市级、乡镇级不同粒度边界的获取与精度取舍你搜“中国矢量地图SHP”时大概率会看到几种粒度全国省级边界、市级边界、县级边界、乡镇边界还有一些专题数据像地质图、土壤图。粒度不同获取难度和精度完全不一样。全国省级边界最普及。网上随便一搜就能找到精度基本够做示意图、培训演示。地市级边界也常见但要注意数据版本。近几年不少地方撤地设市、县改区老数据里有些名字和边界已经变了。乡镇级边界真正的稀缺资源。像热搜词里的“云南省乡镇边界shp”得去各省测绘局、自然资源厅或第三方数据商那里找。乡镇边界更新的成本高很多数据实际上是几年前的用的时候要核对区划代码。说到“精度”这里想提醒一下很多免费SHP的精度是1:100万甚至更低。用来画小比例尺地图、做统计图表没问题但如果要做高精度出图或者空间分析运算还是得用1:25万、1:5万的官方基础地理数据。这就像拿地图App的离线包和测绘院的专业数据相比完全不是一个量级。大家在搜索时留意一下数据说明里有没有标注比例尺和数据来源别一看到“中国矢量地图”几个字就下载。2. 格式互转的完整方案KML、GeoJSON、DWG、3DTiles到SHP的六条路线热搜词里有大量关于格式转换的问题“kml转shp”、“geojson转换成shp格式工具”、“dwg转shp”、“wkt字符串转多边形shp”、“shp转3dtiles”。说到底这些操作背后的逻辑没变让不同来源的空间数据统一成SHP或者让SHP走向更广阔的Web可视化场景。下面几条路线是我实测过比较稳的。2.1 KML转SHPArcGIS模型构建器实现批量转换Google Earth里画的KML文件基本没有属性字段可言只有几何图形和名称而ArcGIS里的KML转图层工具默认只输出点、线、面三类要素还经常把多面体拆散。单文件转换很简单用ArcToolbox里的“KML转图层”KML To Layer工具。但在KML数量很多时一个个转太费时间这时候就要上模型构建器。模型构建器的核心思路是遍历某个文件夹下所有.kml文件逐个执行转换最后合并成一个要素类。我用一个最简单的模型结构说明“遍历文件”工具设置输入文件夹过滤器选KML。把遍历结果连到“KML转图层”工具的输入KML文件参数。“KML转图层”的输出是图层和子文件夹直接用“要素转面/线/点”工具提取几何。最后用“合并”把多次转换的结果整合到同一个SHP。实际操作时有一个非常容易忽略的坑同一个KML里可能同时含有点、线、面转图层后系统会生成多个子图层但模型构建器里如果不对输出路径做动态命名后一次转换会覆盖前一次的结果。解决办法是用%名称%作为输出要素类名的一部分保证每次生成的临时文件名不同。我经常看到有人模型构建器写完了跑了半天最后结果只有最后一个KML的数据就是这个原因。2.2 GeoJSON转换SHP和DWG转SHP小工具与大软件各显神通GeoJSON转SHP其实没有技术壁垒QGIS里直接把GeoJSON文件拖进图层面板右键导出选ESRI Shapefile格式就行。如果你不想装QGIS也可以用在线转换工具不过我建议涉及坐标系的转换慎重用在线工具——很多免费网站不处理坐标参考系统转换结果直接套用了WGS84和中国常用的CGCS2000叠起来就偏了。DWG转SHP又是另一套逻辑。AutoCAD的DWG本质上是CAD图形数据转成SHP之前要先想清楚你要的是边界线还是面要素很多房屋、地块图纸里的闭合多段线直接转SHP出来是线不是面。我常用的流程是先在CAD里把图层整理清楚把需要转面的闭合线放到单独图层然后用ArcGIS的“CAD转地理数据库”工具导入后再用“要素转面”生成面SHP。这一步在批量处理时特别有用尤其是热搜词里提到的“arcgis模型构建器实现批量kml文件转换者shp”这类需求思路完全一致数据整理→批量导入→结构转换→合并输出。2.3 从SHP到3DTilesWebGIS可视化的跨维升级“shp转3dtiles”这个词条近两年热度一直很高因为基于Web的三维地球应用越来越普及。SHP是二维数据转3DTiles的本质是给二维要素加上“高度”或“拉伸”属性然后重新组织成支持LOD的瓦片结构。目前最常用的转换方式是CesiumLab国产工具界面友好支持SHP直接转3DTiles。操作时选择“矢量数据转3DTiles”设置高度字段比如楼层数或海拔值再设置坐标参考系统即可。FME灵活度高可以处理超大数据量几百MB的SHP转出来的3DTiles瓦片数量和大小控制得更好。自研或GDAL脚本适合有开发能力的团队。思路是先用GDAL读取SHP几何和属性再用Cesium的3D Tiles规范封装成b3dm。做转换的时候最需要注意的是纹理和坐标如果SHP自带高度字段但没有“高程基准”转出来的3DTiles会和地形对不齐。我曾在做一个城市白模项目时直接用SHP的默认高度拉伸结果建筑底标高和地形起伏完全脱节后来才意识到必须给每个要素设置一个基准高程并从DEM里采集。记住3DTiles的坐标原点、高度基准、几何细节层级决定了你的模型在Web端是否“稳”。2.4 WKT字符串转多边形SHP数据库里的坐标怎么变成可用数据WKTWell-Known Text是一串文本坐标例如POLYGON((116.391 39.907, 116.394 39.909, 116.392 39.912, 116.391 39.907))在PostgreSQL和MySQL里空间字段存的往往就是WKT。把它转成SHP最直接的办法是用PostGIS输出GeoJSON再转SHP如果没有数据库环境也可以用Python的shapely加geopandasimport geopandas as gpd from shapely.wkt import loads wkt POLYGON((116.391 39.907, 116.394 39.909, 116.392 39.912, 116.391 39.907)) geom loads(wkt) gdf gpd.GeoDataFrame(geometry[geom], crsEPSG:4326) gdf.to_file(polygon.shp, encodingutf-8)这里有一个小坑很多数据库导出的WKT带SRID前缀或者坐标顺序是“纬度、经度”一定要先确认坐标系和坐标顺序再转出SHP不然图形会跑到地球对面去。我自己因为这个栽过跟头数据库里存的是WGS84的经纬度结果转SHP时默认套了Web Mercator最后所有图形都叠不到底图上。3. 裁剪、分割、批量出图中国区数据的三大高频操作拿到一份全国SHP大多是“杀鸡焉用牛刀”——你往往只需要某个省、某个市的边界。这时候就涉及裁剪、分割和批量处理。3.1 按指定区域裁剪SHPArcGIS裁剪工具的隐藏细节ArcGIS里“裁剪”Clip工具是按“裁剪要素”的几何范围切掉原始要素。很多人都知道用“分析工具→提取分析→裁剪”但不知道几个细节裁剪时如果“裁剪要素”是面输出要素会精确保留落在范围内的部分如果“裁剪要素”是线或点输出结果往往不是预期效果。裁剪后属性表会自动保留原始字段但也会新增几个字段如裁剪要素的ID让数据显得乱。建议裁剪后用“删除字段”清理。如果裁剪对象本身是图斑比如地质图里的多边形要素裁剪工具产生的碎屑小图斑很常见可以用“消除”Eliminate工具把面积过小的碎斑合并到邻近多边形。我经常用这样的流程全国省界SHP → 按“NAME云南省”筛选出云南的边界 → 用这个边界裁剪全国要素类 → 得到云南省范围的数据。这套流程看似简单但放在模型构建器里配合迭代就能批量生成多个省份的数据包。热搜词里“arcgis裁剪shp指定区域”问的就是这个。3.2 渔网分割SHP与批量裁剪影像从整幅到瓦片“渔网分割shp”这个需求通常出现在要把一个大范围数据切碎成瓦片、分发给不同项目组的时候。ArcGIS的“创建渔网”Create Fishnet工具可以生成规则格网然后用格网裁剪SHP。但渔网裁剪有个细节渔网拐角和边界必须和SHP完全匹配稍微有一点缝隙裁剪出的边缘就会出现狭长碎面。解决方案是创建渔网时把“几何类型”设为“面”并且“模板范围”选SHP的包络矩形这样格网边缘就不会越过原始数据范围。批量裁剪影像则常用“按掩膜提取”Extract by Mask配合渔网格网做循环。其实不用写代码也能做ArcGIS的“批处理”窗口支持一次设定多个输入输出。操作思路是在“按掩膜提取”工具上右键选择“批处理”每一行对应一个渔网单元格和一个输出文件名几十个瓦片几分钟就生成完。3.3 中国区数据批量处理的通用思路模型构建器和Python脚本二选一中国的行政区域层级多、数据量大经常要批量做各省、各市的裁剪。我的习惯是能上Python就不用手工点。给一段通用代码示例import arcpy shp_path D:/data/省级行政区.shp clip_features D:/data/地市边界.shp out_dir D:/output with arcpy.da.SearchCursor(clip_features, [NAME]) as cursor: for row in cursor: name row[0] where fNAME {name} clip_fc arcpy.Select_analysis(clip_features, f{out_dir}/clip_{name}.shp, where) arcpy.Clip_analysis(shp_path, clip_fc, f{out_dir}/{name}.shp)用代码的好处是可控性和可复现性都很强哪一步出错可以直接看错误信息不会像模型构建器那样跑完发现输出目录全是空结果。没有Python基础的读者用模型构建器同样可以核心就是把迭代器和输出路径处理好。4. 国土报备场景下的SHP转TXT字段映射与格式校验的实战细节“shp转txt”和“shp转txt插件国土报备”这两个热搜词一看就是土地报批、国土调查场景下的真实需求。SHP是空间矢量数据国土报备系统大多要求的是固定格式的TXT文本每个字段按特定顺序排列、以逗号或制表符分隔。这种转换的关键不是“怎么转”而是“字段怎么对齐”。4.1 为什么国土报备要转TXT而不是直接用Excel或SHP很多新手不理解为什么系统不直接接收SHP其实国土报备系统很多是上世纪90年代开始建设的底层数据库和SHP的兼容性并不好TXT反而是最通用的中间格式。TXT文件本质上就是一个纯文本数据表行是记录列是字段几乎没有软件打不开。这个做法虽然土但胜在稳定、传输体积小、不容易被解析器“嫌弃”。国土报备的TXT通常要求这些字段按顺序输出图斑编号行政区代码地类编码面积单位通常为公顷坐标点串格式多为“经度,纬度;经度,纬度”注意坐标点串在TXT里是一个长字符串而不是多行坐标。这个格式如果手工在Excel里拼几千个图斑能把人逼疯。我的做法是先用ArcGIS打开SHP属性表按系统要求的字段顺序把必要字段用“添加字段”和“字段计算器”补全然后用“表转Excel”导出再用Python脚本把坐标和属性合并成TXT。4.2 用ArcGIS和Python完成SHP转TXT全流程先说最关键的一步计算每个图斑的坐标点串。ArcGIS里可以直接用Python在字段计算器里写def get_coords(feature): parts [] for part in feature: for point in part: parts.append(f{point.X:.6f},{point.Y:.6f}) return ;.join(parts)然后在面积字段、地类编码字段都准备好之后把属性表导出成CSV再用Python脚本做最后拼接import csv with open(result.txt, w, encodinggbk) as f: with open(data.csv, r, encodinggbk) as csvfile: reader csv.DictReader(csvfile) for row in reader: content f{row[图斑编号]},{row[行政区代码]},{row[地类编码]},{row[面积]},{row[coords]} f.write(content \n)这里最容易出问题的是编码。很多国土软件在Windows上跑默认用GBK或GB2312编码如果生成的是UTF-8的TXT上传后所有中文都会变成乱码。所以SHP转TXT时优先选择GBK编码文件没有中文汉字段时才考虑UTF-8。4.3 WKT字符串转多边形SHP在报备场景中的应用报备数据里还经常遇到空间数据库导出的WKT字符串。比如有人发来一个Excel表格里面有一列是“几何信息”存的是一整段POLYGON((...))。这其实就是WKT字符串。转成SHP时我建议直接用QGIS或GeoPandas来做步骤在上面已经写过。特别提醒在处理报备WKT时要注意面积单位是平方米还是公顷以及坐标是经纬度还是投影坐标。坐标系统的差异会在后面“坐标系三座大山”部分详细说。5. 软件实操避坑SHP文件位置、导出顺序、坐标系三座大山最后这部分专门讲搜索热词里那几个看似基础但经常把人卡住的问题ArcGIS Pro的SHP文件在哪、QGIS导出SHP最简单的方法、以及坐标系问题。5.1 ArcGIS Pro / GIS Pro的SHP文件到底放在哪很多人问“gis pro的shp文件在哪里”这其实是个数据管理习惯问题。ArcGIS Pro默认会在“工程文件夹”里存放工程文件.aprx但这个文件夹并不会自动包含你下载的SHP。SHP文件的位置取决于你把它放在哪里。SHP是一组磁盘文件不会自动存进Pro工程文件。正确的做法是在ArcGIS Pro的“目录”面板中右键“数据库”或“文件夹”节点选择“添加文件夹连接”把SHP所在的本地目录连接上。然后才能在目录面板里看到SHP文件并拖入地图。还有一种办法是使用“添加数据”按钮直接浏览到SHP文件路径。如果找不到刚才打开的SHP存到哪里可以在图层的属性里查看“数据源”里面有完整的物理路径。5.2 QGIS导出SHP最简单的方法QGIS导出SHP只要三步图层列表右键 → 导出 → 保存要素为格式选“ESRI Shapefile”。真正让我无数次翻车的是弹窗里的“编码”选项。如果源数据是中文属性导出时编码选UTF-8然后在部分老软件里打开还会乱码。一个稳妥的组合是源数据是中文 → 导出编码选UTF-8在QGIS里打开正常源数据要交给ArcGIS或国土报备软件 → 导出编码选GBK或System避免中文乱码还有一个细节导出的SHP文件名不要用中文和数字开头。虽然QGIS允许中文文件名但Shapefile格式的一些底层组件比如.dbf的字段名限制对非英文路径支持并不好导出后放在有中文路径的目录下再用ArcGIS读取时很容易报错。我建议所有SHP文件和路径都统一用英文。5.3 坐标系为什么你的SHP叠不上影像坐标系是中国矢量地图使用中最容易踩的坑没有之一。CGCS2000中国官方测绘采用的国家大地坐标系很多基础地理数据都默认CGCS2000。WGS84GPS和Web地图常用和CGCS2000在多数应用场景下差异只有几厘米到几十厘米肉眼几乎看不出但精度要求高的项目必须区分。Web MercatorEPSG:3857Google Map、天地图Web端常用带距离和面积误差不适合直接做面积计算。很多人在ArcGIS里打开全国SHP后发现它跑到地图外边去了或者叠不上影像多半是坐标系不对。有一个非常典型的操作把SHP直接拖到ArcGIS Pro里因为Pro支持同图层动态投影如果图层本身没有.prj文件Pro就会默认用WGS84处理几何坐标。可如果你的SHP实际是CGCS2000投影坐标几何数值是米制不定义坐标系直接打开图层就会以一个“假WGS84”形式显示在赤道附近怎么都对不上位置。解决办法是先用“定义投影”工具给SHP指定真正的坐标系。如果你确定数据是CGCS2000 3度分带比如CGCS2000 / 3-degree Gauss-Kruger zone 40EPSG:4549就选对应坐标系。注意定义投影不会改变几何数值改的是“解释方式”真正改变坐标数值要用“投影”工具。这两者的区别是新手最容易混淆的地方。另外GIS里用的“中国矢量地图”很多都带独立的.prj文件有时候打开时没显示坐标系错误但缩放到某一级别后SHP明显偏移。这时要检查是不是因为ArcGIS Pro默认的底图是Web Mercator而SHP是WGS84投影动态投影后导致微小的偏移。动态投影下WGS84和Web Mercator的偏差在高纬度区域会更明显所以处理中国数据时我习惯先把底图换成和SHP相同的坐标系再做其他分析。最后分享一点个人习惯与数据管理建议做GIS数据这么多年我的个人体会是SHP文件管理的关键不是软件操作而是“数据规范”。每一份中国矢量地图SHP我都会在旁边的同名文件夹里放一个README.txt写清楚数据来源、坐标系、比例尺、下载时间、字段说明。看起来很土但半年之后再翻出来用能省下不少重新琢磨的时间。另外一个小技巧手上常备一个万能坐标系转换工具箱。QGIS和ArcGIS Pro都能做投影但遇到批量、跨软件的数据迁移我会用ogr2ogr命令行工具ogr2ogr -t_srs EPSG:4490 -s_srs EPSG:4326 output.shp input.shp它支持一次性批量转换整个目录下的SHP再配合Shell或Python循环基本能应对99%的坐标系转换需求。最后建议所有SHP数据导出后把.dbf、.prj、.shx三个配套文件一起打包备份少一个后续使用都会多一份折腾。本文还有配套的精品资源点击获取
返回列表