资讯动态

34个省市驻地点SHP文件:解压、坐标转换与KML导出实战

发布时间:2026/9/10 12:11:31 来源:尧图企业网站定制
简介面向GIS分析、城市规划与地理教学的矢量数据集内含我国34个省级行政区含直辖市、特别行政区省会驻地点要素基于最新行政区划与地理坐标制作每个点位对应省会城市的几何中心可直接用于地图标注、空间分布分析与区域对比研究。资源共28个文件除核心shp几何文件外配套dbf属性表、shx索引、prj投影定义以及sbn/sbx空间索引等ArcGIS/QGIS常用辅助文件压缩包总大小15.96MB结构清晰便于导入主流GIS平台。数据内含中国各省轮廓与省会城市两个图层可叠加显示省市位置关系。该数据集已有1812人学习下载兼具实用性与参考性。尤其适合制图人员快速绘制全国省会城市分布图也可为交通路网规划、社会经济数据挂接、环境因素空间分析等场景提供基础底图数据帮助研究者减少坐标配准与属性整理时间。1. 点要素SHP文件为什么34个驻地点比行政边界更常用平时做全国图面图层SHP只用来显示边界真正决定标注位置和查询效率的常常是一个点文件。这个名为“34个省市直辖市省会驻地点要素 shp文件最新版.rar”的压缩包装的就是全国34个省级行政中心的驻地点要素没有面边界没有道路只有点坐标和对应的属性字段。做城市名称标注、做省级行政区定点位、做“某省会在哪”这种查询用这样一份点文件比拿省级面图层去算质心省事得多。标题里的“省市直辖市省会”排得有点绕实际数据一般就是34个省级行政中心的点坐标有些版本还会附上加粗的注记字段。数据量很小但它在日常GIS项目里出现的频率极高。下面从文件组成、RAR解压、坐标核查、批量转KML到最后的空间验证把这条线完整走一遍。新手能对照操作老手能确认边界条件。2. 点要素SHP结构先弄清文件组成和坐标系再动手2.1 一个完整SHP由哪些文件构成打开RAR后如果只看到“xx.shp”不要急着认为这就是全部。ESRI Shapefile从诞生起就不是单文件格式而是同一主名下一组配套文件共同构成。缺少任何一个关键文件QGIS或ArcGIS都会报错或显示不出要素。文件后缀作用缺失后果.shp几何坐标本体无法识别图层.shx几何索引建立坐标与属性对应关系读取异常无法定位要素.dbf属性表Record同一条要素的名称等字段属性为空或打不开表.prj投影和坐标系定义打开后坐标系未定义.cpg标识dbf的字符编码中文属性出现乱码很多人在微信或网盘里只传了一个.shp文件接收方打不开以为数据坏了其实就是缺少配套文件。所以拿到RAR时第一步是看解压后是否同时存在.shp、.shx、.dbf最好还有.prj和.cpg。提示把SHP文件从A机器拷到B机器时不要只拷.shp要把同主名的一套文件都拷走。用RAR整体打包分发是目前最不容易丢文件的方式。2.2 属性表字段与“驻点”的真实含义“驻点”不是行政区划上随便选的城市质心它代表省级行政中心的实际位置。不同来源的属性字段并不统一常见字段如下字段名类型内容说明NAMEString城市名例如“北京市”PYNAMEString拼音缩写或全拼ADCODEInteger行政区划代码LONGITUDEDouble经度十进制度LATITUDEDouble纬度十进制度REMARKString备注或更新时间说明拿到数据先打开.dbf看字段而不是先画图。我的习惯是直接用表格工具打开dbf检查一遍是否有重复记录、是否有空值、字段名里是否混入了特殊字符。曾经见过某份“34点”数据里混了36条记录多出来的是两个重复坐标说明原始来源做过追加操作没有去重。这类问题在几何上看不出属性表里一眼就能发现。2.3 解压之前用ogrinfo确认数据范围在打开桌面GIS之前先用命令行工具读出图层概要能避开很多后期问题。GDAL安装后自带ogrinfoQGIS安装目录里的OSGeo4W Shell也能直接调用。ogrinfo -ro -so 34驻地点.shp 34驻地点参数解释-ro表示只读打开避免误写源数据-so表示仅输出概要信息不逐条列出要素最后的“34驻地点”是图层名通常等于文件名主名。执行后能看到Geometry类型、Feature Count和Extent范围。如果输出显示“Feature Count: 34”说明记录数与预期一致。Extent里的经纬度大致在73到135度、3到54度之间说明这是地理坐标系数据。如果Extent出现4000多、5000多这样的数值则是投影坐标你需要确认它到底是哪个投影带再决定是否和底图匹配。如果提示“Layer SRS WKT”为空说明缺少.prj数据源的坐标参考已丢失。2.4 用Python直读dbf而不打开桌面GIS没有安装QGIS的环境下用Python第三方库fiona也能快速读字段。这个方法也适合在服务端做数据自动巡检。import fiona with fiona.open(34驻地点.shp, encodingutf-8) as src: print(src.schema) print(src.crs) print(len(src))代码逻辑src.schema输出属性字段列表src.crs输出坐标系描述len(src)统计要素数量。参数encodingutf-8决定dbf里的中文字段如何解码如果输出乱麻可改成gb18030再试一次。通过这种方式可以确认三件事记录数都是34、字段里是否有NaN、坐标系是否匹配周边底图。只要三点都通过后面的分析才有意义。3. 从RAR到QGIS解压、编码和打开的一条龙流程3.1 解压前用unrar测试压缩包完整性“.rar”是专有格式。拿到“34个省市直辖市省会驻地点要素 shp文件最新版.rar”这样的大文件我建议先测试完整性再正式解压不要在解压一半时才发现损坏。unrar t 34驻地点要素最新版.rart是test的意思只检查卷内每个文件的CRC不写入磁盘。测试结束看到“All OK”再解压。如果提示某个分卷CRC错误直接解压出来的SHP可能在几何上出现破洞点坐标也可能异常偏移这种文件后续怎么修都别扭。压缩包若被拆成r00、r01需要把全部分卷放进同一目录对第一个分卷执行测试。关于热词里常见的“rar密码移除”正规数据的密码都是作者主动散播的输入作者提供的密码即可不要在逻辑上尝试“破解”。如果拿到的压缩包带密码正确路径是找数据分发方索取这类点要素数据本身不是稀缺内容没必要冒风险运行来路不明工具。3.2 用unrar x保留目录结构解压unrar x 34驻地点要素最新版.rar ./2025_capital_points/参数x表示解压时保留压缩包内的目录结构e参数则是把所有文件平铺到当前目录。对SHP这种多文件配套格式建议用x避免把.shp和.dbf展开到不同位置。目标目录里最好不带中文比如./2025_capital_points这样后续脚本处理时少一层编码转换问题。解压完成后先核对文件同名.shp、.shx、.dbf必须放在同目录。还要留意压缩包内是否还有投影定义文件.prj以及命名为“说明.txt”之类的元数据说明很多“最新版”的更新时间、坐标基准就写在这些附加文档里不要删掉。3.3 QGIS加载SHP并解决中文乱码QGIS打开SHP的步骤不复杂但编码选择决定属性表是否可读。菜单“图层 - 添加图层 - 添加矢量图层”数据源类型选择“文件”浏览选中刚才解压出的.shp编码下拉框先选UTF-8点击“添加”打开属性表若中文显示为乱码移除图层后重新添加把编码改为GB18030或System参数说明dbf字符编码与.cpg文件有关。有的数据在Windows环境下用GBK写入.cpg缺失时QGIS默认按UTF-8解析导致“北京市”变成“鍖椾含甯”。加载后看左下角坐标显示如果鼠标移动时坐标在116度、39度附近说明数据是Web地图常见的WGS84或GCJ02如果坐标是七位八位的大数值那是投影坐标后续叠加底图时必须转换。3.4 打开后必做的图层信息复核加载成功后在图层上右键选择“属性 - 信息”确认Geometry类型写的是PointFeature Count等于34。这里不要只看地图上的符号数量因为点重叠时视觉上可能少一个。同时检查图层范围Extent全国驻点经度应覆盖东经73度到135度纬度覆盖北纬3度到54度。如果范围只有几个市那么大说明这个SHP根本不是全国数据可能是源文件被抽取过或者坐标缺失。如果QGIS弹出“未定义坐标系”对话框且Extent显示经纬度范围通常选EPSG:4326即可。若点位置直接跑到海里多半是原始数据用的坐标系不是底部数据用的坐标系需要回看压缩包里的说明文件。4. 点数据与边界叠加Excel坐标导入和坐标统一4.1 怎么把Excel经纬度数据导入到ArcMap中用户经常拿着一个Excel表格里面是省会城市的经纬度希望转成点图层。ArcMap的“添加XY数据”功能能完成这件事但细节决定成败。步骤操作关键参数1整理ExcelA列写经度B列写纬度字段名用英文字母例如X、Y2另存为CSV编码选UTF-8或GBK保持一致3在ArcMap中执行“文件 - 添加数据 - 添加XY数据”X Field选经度列Y Field选纬度列4点击“编辑”按钮设置坐标系与底图一致选WGS84或CGCS20005导出为SHP右键临时事件图层选择“数据 - 导出要素”最容易犯的错是把经度填到Y字段纬度填到X字段结果所有点沿着一条对角线排布看起来完全不是地图上的位置。如果导入后点跑到非洲或大西洋先检查X对应经度、Y对应纬度再检查度分秒格式ArcMap的XY数据只认十进制度“116°30′”这种格式必须提前换算成116.5。4.2 用QGIS空间连接排除面外的“飞点”当34个点与省级边界底图叠加后某个点漂到相邻省份内常见原因是“点图层坐标系”和“面图层坐标系”不一致比如点用GCJ02、边界用WGS84的底图。不要手工拖动点标准做法是做一次空间连接。QGIS菜单“处理 - 工具盒”搜索“连接属性按位置”参数设置如下目标图层选点数据连接图层选省级边界面几何谓词选intersects最后生成结果图层。这样每个点都会带上所在省份名称字段凡是“所属省”和实际城市不一致的就是投影或坐标基准错位。这种检查在边界接壤频繁的城市最有效例如京津冀一带坐标偏移几百米就可能从北京落到河北廊坊。空间连接的结果里若出现多个点落在同一省份代表数据里有重复点或错点应回到源表逐条核对。4.3 用Fiona把点要素统一到同一坐标系数据混用最直接的解法是重投影。GDAL自带的ogr2ogr处理简单情况很顺手但如果你想在写入前清洗字段、或者想保留原属性并做转换中断处理我用Python的fiona和pyproj更可控。import fiona from pyproj import Transformer with fiona.open(raw_points.shp, r, encodingutf-8) as src: transformer Transformer.from_crs(src.crs, EPSG:4326, always_xyTrue) schema src.schema.copy() schema[geometry] Point with fiona.open(points_wgs84.shp, w, driverESRI Shapefile, schemaschema, crsEPSG:4326, encodingutf-8) as dst: for feat in src: x, y feat[geometry][coordinates] feat[geometry][coordinates] transformer.transform(x, y) dst.write(feat)代码逻辑是用Transformer.from_crs建立从源坐标系到目标坐标系EPSG:4326的转换器参数always_xyTrue表示输入输出的坐标永远按经度在前、纬度在后的顺序处理。逐要素读取原始坐标转换后写进新文件。这样得到的points_wgs84.shp具备明确投影定义和任何WGS84底图叠加都不会出现漂移。如果目标坐标系想用国测局坐标系把EPSG:4326换成GCJ02对应参数即可但要注意GCJ02没有正式官方EPSG编号依赖第三方实现。5. SHP批量合并和转KML让点要素出活5.1 把多个点SHP合并成一份数据实际项目中你手上可能除了34个驻地点还有下属地级市的点位。把这些分散的点SHP合并成一个文件是常见需求。QGIS菜单“处理 - 工具盒”找到“合并矢量图层”。参数指定多个输入SHP字段兼容项勾选“将字段名视为名称”输出的图层是所有输入的集合。合并前先统一点坐标字段如果A文件的字段叫LONB文件叫LONGITUDE合并结果里两个字段会同时存在其中一个全为NULL。因此先对每个文件执行“修改字段名”统一成LON和LAT再合并。合并后的图层要素数量为各输入总和。若合并后只有34条而输入总和远高于此多半是中间选了“仅保留第一个图层的字段”而把后续字段全丢了。5.2 SHP批量转KML的三个必调参数KML是外业采集和Google Earth浏览的常用格式但很多人图省事直接右键“导出”结果在Google Earth里点全飞了。原因是KML标准强制要求WGS84坐标而源数据是GCJ02或国家2000。参数推荐值原因CRSEPSG:4326KML只合法支持WGS84格式KML或KMZKMZ为压缩包传输更小字段勾选NAME字段点标注显示城市名便于外业操作路径右键图层 - 导出 - 保存要素为格式选“Keyhole Markup Language [KML]”CRS选EPSG:4326。如果数据是GCJ02需要先用第4.3小节的重投影代码转一遍再导出KML。批量处理多个SHP时可以在“处理 - 批处理”里加载全部文件一次性输出KML。这样导出的文件可以直接拖进Google Earth、手机地图软件或无人机地面站检查。5.3 用Leaflet把点坐标发布成Web地图有时候需要在网页上临时展示34个驻点不搭GIS服务端。把SHP导出成CSV再整理成JavaScript数组用Leaflet渲染是轻量方案。const cities [ { name: 北京, lon: 116.40, lat: 39.90 }, { name: 上海, lon: 121.47, lat: 31.23 }, { name: 广州, lon: 113.26, lat: 23.13 } ]; cities.forEach(c { L.marker([c.lat, c.lon]) .addTo(map) .bindPopup(c.name); });注意L.marker接收的是纬度在前、经度在后而SHP里记录的坐标通常经度在前。直接复制CSV里的经纬度行列式标记就会跑到海里或变成一条斜线。参数说明bindPopup绑定属性字段对应的名称用于鼠标点击显示文字map是前面L.map(mapId)创建的底图变量。这里只是把导出后的坐标做展示底图切片务必也用WGS84服务否则点和底图偏移。6. 用空间运算验证34个点要素的合法性6.1 GeoPandas校验点是否在省级边界内用GeoPandas读点SHP和边界SHP做一次空间连接是校验这份“最新版”数据最直接的手段。import geopandas as gpd points gpd.read_file(34驻地点.shp) province gpd.read_file(全国省级行政区.shp) province province.to_crs(points.crs) result gpd.sjoin(points, province, howleft, predicatewithin) print(len(points), result[province].isna().sum())代码逻辑是先把边界数据投影到点数据所在坐标系再用sjoin做空间连接参数howleft保证点全保留predicatewithin要求点必须落在面内。输出第一项是点总数第二项是落在所有省份面外部的点数。正常结果是“34, 0”。只要第二项大于0就要逐条检查问题点。特别行政区、部分岛礁型地级市的边界在公开数据里经常被简化可能出现合法点落在面外的情况。这属于数据边界精度问题不是坐标系问题直接修改点位置不如换一套精度更高的边界数据。6.2 经纬度范围和重复点位检查最后一个检查项是数值层面的经度区间应在73至135度纬度区间应在3至54度。出现0、999、-1这类异常值基本可判定该记录是从Excel空行或错误行读出来的。还有一种情况是DBF表里有多行坐标相同但城市名不同这常见于不同来源数据合并时未去重。把坐标完全一致的点筛选出来通过属性表比对ADCODE字段最可靠直接保留最新更新时间的那条记录。对“最新版”三个字保持怀疑是数据工作者的基本素养所有空间数据都要自己验证一遍不要因为压缩包标题写着最新就跳过这一步。把过滤出的要素单独导出新SHP再对比ADCODE字段与边界属性表就能精确定位到具体是哪个城市点位需要反过来和最初的数据分发方补齐。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价