☰
全国省份点位数据全攻略:SHP/Excel格式转换与坐标系纠偏
2026/10/16 7:09:07 网站建设 项目流程

最近接了一个数据可视化的活儿,需要一张“全国省级点位分布图”。正愁坐标底子不干净,群里就有人甩了个文件包过来,标题写着“【会员专享数据】2025年全国省份点位数据(shp格式\excel格式)”。我下载完看了一眼,发现不少朋友其实不太清楚这类“会员专享”资源到底该怎么验、怎么换格式、怎么真正用起来,甚至有人直接把Excel里的经纬度复制粘贴到在线地图就算完事,结果出图全是乱点。这篇文章就围绕“全国省份点位数据”这个主题,聊聊SHP和Excel两种格式的内部区别、坐标系踩坑、双向格式转换、实际出图,以及我一直坚持的那套数据体检流程。适合刚接触GIS的开发者、做数据分析但没系统碰过空间数据的朋友,也适合那些手上正好有一份来路不明的点位数据、正在纠结怎么处理的人。

1. 拆开数据包:SHP与Excel到底谁才是“真坐标”

1.1 一份SHP不是“一个文件”,而是一组文件

先说个最基础的坑。很多第一次拿到Shapefile的朋友会发现,自己明明下载的是“shp格式”,解压后却看到一堆乱七八糟的后缀,比如.shp、.shx、.dbf、.prj,甚至还有.sbn、.sbx、.cpg。别慌,这不是发错文件了,而是SHP本身就是“一群文件合体”的格式。

其中真正存几何坐标的是.shp文件;.shx是索引文件,帮软件快速定位几何信息;.dbf是属性表,存的是我们熟悉的“名称”“区划代码”这类非空间字段;.prj则记录坐标系统,这个太关键了,后面单独讲。很多人在网上下了SHP之后,习惯性只把.shp文件拷走,结果同事那边打开就报错“缺少相关文件”,其实缺的就是旁边那几个“跟班”。所以使用SHP时,最好整个文件夹一起打包,不要单独拖一个.shp出来。

Excel格式就直观得多:一个工作簿里通常放着“省份名称”“经度”“纬度”“备注”之类的列,谁都能打开,谁都能改。但缺点也随之而来,Excel只是个表格,不是一个空间数据格式,它本身不知道“经度118、纬度32”这些数字组合起来是一个点,更没法直接做空间分析。很多人以为“Excel里有坐标就等于有了地图数据”,其实只算有了一半。

1.2 字段结构:SHP的属性“藏”在dbf里,Excel则全裸

拿一份典型的“全国省份点位数据”来说,Excel里常见的表头和SHP属性表字段,其实是差不多的:

字段含义Excel表现SHP(dbf)表现
name / 名称省级行政单位名称直接可见存在dbf属性列
code / 区划代码6位或12位行政区划代码可能被读成科学计数法字段类型可能被识别为浮点数
lon / 经度点位的X坐标数字列Double类型
lat / 纬度点位的Y坐标数字列Double类型
备注/更新时间数据版本说明自由文本字符串字段

有一个很常见的问题:Excel打开下载来的CSV或xlsx时,区划代码这种长数字经常被自动转换成科学计数法,比如“110000”变成“1.10E+05”。遇到这种情况,最好先把整列格式设置为“文本”,再粘贴数据。如果你打算把Excel数据导入GIS,也一定要在导入前确认“区划代码”是文本类型,否则后面做连接查询时会非常痛苦。

1.3 拿到文件包之后,怎么快速“扫一眼”

我不会直接双击打开,而是习惯先用文本编辑器或办公软件快速浏览一遍内容,同时用GIS软件做一次图层加载。具体顺序大概是:

  1. Excel文件直接打开,看字段、看行数、看是否有合并单元格或空行。合并单元格是GIS导入时最讨厌的东西,一定要先拆掉。
  2. SHP文件用某个开源GIS桌面软件(比如QGIS)拖进去,看右下角显示的坐标系统是什么,再看属性表里的字段是否和Excel里一致。
  3. 粗看一眼坐标范围,比如经度是否都在73到135之间、纬度是否在18到54之间。如果出现纬度负数或者经度超过180,那基本可以断定这份数据被某些在线地图工具“悄悄换过坐标系”。

这一步花不了五分钟,但能避免后续所有“数据拉出来是歪的”这种莫名其妙的问题。

2. 坐标系:这份数据最容易被忽略的第一道坎

2.1 地理坐标系和投影坐标系,简单说就是“橘皮”和“橘皮展开图”

地图坐标这个问题,很多做业务分析的朋友第一次接触时都容易懵。其实拿橘子打个比方就明白了:地球本身是一个三维球体,我们描述球面上的位置用“经纬度”,这就是地理坐标系;但是纸面屏幕是平面的,要把橘皮摊平,就必须在摊平的过程中做变形,这就产生了投影坐标系。

对于“全国省份点位数据”来说,如果只是展示点的位置,直接用经纬度(地理坐标系)就够了;但如果你想做“两点之间距离多少公里”或者“哪个点落在哪个面里”这类分析,最好还是转成投影坐标系,因为平面上的米制距离和球面上的经纬度距离不是一回事。

2.2 四种绕不开的坐标系:WGS84、CGCS2000、GCJ-02、BD-09

收到一份数据,我第一件事永远是确认它的坐标系。国内常见的几种大概是这样的:

坐标系性质经纬度偏移情况常见使用场景
WGS84GPS原生坐标系无偏移,全球统一各种开源数据、GPS设备原始输出
CGCS2000国家法定测绘基准与WGS84差异极小(米级)官方测绘成果、标准地理信息产品
GCJ-02国内民间地图坐标系相对WGS84有几百米偏移常见在线地图服务的坐标
BD-09部分在线地图二次加密在GCJ-02基础上再偏移某些地图API输出

这里要特别提醒:如果你拿到的“2025年全国省份点位数据”是从某个在线地图的接口批量抓下来的,那么经纬度很可能不是WGS84,而是GCJ-02甚至BD-09。把这种坐标原封不动导进GIS,去跟公开底图叠加,就会发现自己手上的点整体偏移了几百米到一千米,而且偏移方向还不固定。很多做“全国点位图”的人,最后图做得难看,十有八九不是技法问题,而是坐标系没对齐。

2.3 怎么判断手里的数据是什么坐标系

判断坐标系有几个实用招数:

  1. 看SHP里的.prj文件。用文本编辑器打开,如果里面有“GCS_WGS_1984”“D_WGS_1984”字样,就是WGS84;如果出现“GCS_China_Geodetic_Coordinate_System_2000”“CGCS2000”就是国家2000坐标系。
  2. 如果只有Excel,没有旁证,那就用交叉验证:随机抽几个点位,跟某个确定是WGS84的公开底图叠加,看是否重合。如果整体偏移几百米,且网上查不到任何说明,多半是GCJ-02,需要做坐标纠偏。
  3. 看数据的字段描述。正规数据源通常会写明“坐标系:CGCS2000地理坐标系”;如果写“国测局坐标”“火星坐标”,那基本就是GCJ-02。

我自己处理民间抓取的数据,习惯先默认它是GCJ-02,然后用脚本把坐标转回WGS84再做入库。这样后续用到任何标准GIS底图都不会出大问题。坐标转换的算法在开源社区已经有很成熟的计算方式,网上随便一搜都能找到,我这里就不贴大段公式了,重点是要有这个意识。

2.4 坐标偏移的典型表现与规避

举一个我这边的真实排查过程。A同学拿着Excel点位表导进GIS,叠加公开行政区划边界图,发现所有点都落在真实位置的东南方向约500米处。一开始他以为是底图配错了,换了好几套底图都一样,最后我让他先随便挑一个点位拿到在线地图里反查,结果发现点位坐标本身就和实际位置对不上。问题不是出在出图环节,而是出在数据生成端——他的坐标是直接从某在线地图拾取器里拷的,那套工具输出的就是偏移坐标。

所以,规避的方法很简单:拿到数据别急着画图,先做一次“坐标真实性抽查”。排查坐标的问题远比学习操作软件重要,这一步不做,后面所有的分析都是建立在错位数据上的。

3. Excel坐标表转SHP:从“表格数据”到“空间数据”的实操路线

3.1 为什么非转不可

Excel坐标表可以看、可以筛、可以算平均值,但它毕竟不是空间数据。GIS软件没法拿一张Excel表直接做“点在面内”的判断,也没法直接给你出渲染图。真正的矢量图层是一个带有空间引用的几何集合,SHP就是最常见的载体。所以当你需要做专题图、做缓冲分析、做空间连接时,把Excel转成SHP是绕不过去的一步。

3.2 用开源GIS桌面软件转,五分钟搞定

这里我以某开源GIS桌面软件(QGIS)为例,完整跑一遍:

  1. 准备一份干净的表格。表头尽量简单,比如“名称,经度,纬度,区划代码”,不要有中文括号、不要有单位(“118度”这种写法最要命),经纬度必须是数值列。
  2. 点击“图层 -> 添加图层 -> 添加分隔文本图层”,选择你的CSV或Excel文件。
  3. 在“几何定义”区域中,分别指定X字段为经度列、Y字段为纬度列。几何类型通常选“点”。
  4. 最关键的一步:指定坐标系。如果你的经纬度是WGS84,选EPSG:4326;如果是国测局坐标,先转成4326再继续。这里选错,后面全白干。
  5. 点击添加之后,图上应该会出现一组点。随便点一个点,右键看属性,确认坐标对得上。
  6. 右键刚加载的临时图层,选“导出 -> 要素另存为”,格式选ESRI Shapefile,文件名和保存路径都尽量不要用中文和空格,编码推荐UTF-8。

有些版本导入Excel需要先另存为CSV,这个不影响,注意CSV保存时用UTF-8编码即可。

3.3 中文乱码和字段类型,两个高频翻车点

很多朋友在导出SHP后,用GIS软件重新打开,发现属性表里的中文全变成了“鏄煶”“鍖椾含”这类乱码。这不是数据坏了,而是编码设置问题。SHP的dbf文件对中文编码非常敏感,处理时尽量统一采用UTF-8编码。如果老项目里的旧文件是GBK编码,打开时也要手动指定。

另外一个高频问题:某些CSV的经纬度列如果被Excel保存成了文本格式,导入时QGIS会把X、Y识别成字符串,然后报错“无效的几何”。解决方法是先在表格工具里把经纬度列转成“数值”格式,或者用公式“=VALUE(B2)”重建一列纯数字。

3.4 用代码批量处理:Python + geopandas版本

如果只是转一两个文件,图形界面就够了。但如果你每个月都要处理更新版的点位数据,我建议学会用Python自己做。下面给一段我常用的入门级转换代码,注释已经写得很清楚了:

import pandas as pd import geopandas as gpd from shapely.geometry import Point # 读取Excel中的点位表 df = pd.read_excel("省份示例.xlsx", dtype={"区划代码": str}) # 把经纬度列转换为几何对象 geometry = [Point(x, y) for x, y in zip(df["经度"], df["纬度"])] # 构造GeoDataFrame,并指定坐标系为WGS84(EPSG:4326) gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326") # 导出为Shapefile gdf.to_file("省份示例.shp", encoding="utf-8")

可以看到,整个过程其实就四步:读取、创建几何、指定坐标系、导出。geopandas在背后把SHP那套“多文件结构”封装好了,导出之后目录里同样会出现.shp、.dbf等一组文件,这是正常的。

4. 反向操作:SHP属性表转到Excel,以及字段整理技巧

4.1 什么时候需要“从SHP到Excel”

转换不是单向的,我们经常也需要把SHP里的属性表抽出来给业务同事看。比如做完了空间分析,把“某省点位是否落在某区域范围内”这个判断结果,汇总成Excel报表给运营团队;又比如要把数据进行多轮核实,直接发SHP给不懂GIS的同事,对方根本打不开,这时就需要导出Excel。

4.2 图形化操作:导出CSV与Excel的注意点

在GIS软件里右键图层,选“导出 -> 要素另存为”,格式下拉菜单里选CSV,就能把属性表导出来。但这里有个老坑:默认导出的CSV是UTF-8编码,老版本Excel打开直接乱码。解决办法是导出时在“文件编码”选项里选“UTF-8 with BOM”,或者导出后用文本编辑器把文件另存为带BOM的UTF-8。新版本Excel对UTF-8的兼容性已经好多了,但很多公司用的还是旧版,依然建议用带BOM的方式。

如果你需要直接导出真正的.xlsx格式,可以借助“另存为”对话框里的“MS Office Open XML”格式(不同版本名称略有差异),或者干脆用代码转。

4.3 用代码导出Excel,字段精度可控

用Python导出的好处是,可以对字段做精细处理。比如经纬度要保留几位小数、区划代码要不要补前导零、null值要不要填成空字符串,这些都可以在导出前统一控制。

import geopandas as gpd # 读取SHP gdf = gpd.read_file("省份示例.shp", encoding="utf-8") # 把几何的XY坐标单独提取出来,方便表格查看 gdf["经度"] = gdf.geometry.apply(lambda p: round(p.x, 6)) gdf["纬度"] = gdf.geometry.apply(lambda p: round(p.y, 6)) # 删掉几何列,只保留属性字段,导出Excel df = gdf.drop("geometry", axis=1) df.to_excel("省份点位汇总.xlsx", index=False)

字段里如果存了12位区划代码,用Excel打开可能又出现科学计数法,我在导出时习惯先把代码列转成字符串。这一步最好在导出前完成,不然交付出去又是一堆“1.10E+05”。

4.4 坐标精度到底保留几位

这算是一个细节经验。经纬度不同小数位数对应的精度大概是这样的:

小数位约略精度适用场景
2位约1公里不适合展示,只适合粗略统计
4位约11米城市级展示可以
6位约0.1米通常点位数据建议保留到6位
7位以上厘米级专业测绘才需要

对“全国省份点位数据”这种尺度,6位小数绰绰有余,导出时用round保留6位就够,没必要为了显示精度凭空增加数字位数,反而不利于数据量大的时候压缩存储。

5. 把点位数据用起来:出一张能看的省份分布图

5.1 点提出来之后,先叠加公开的行政边界底图

点位数据转成SHP并确认坐标系正确后,最基础的应用就是出“省份点位分布图”。我一般会把公开的省级行政边界作为底图,再把点位图层叠加上去。这样看的人能清楚知道每个点落在哪个省域范围内,而不是一张孤零零的点图在空中飘着。

需要特别说明的是:如果你手上的点位数据里只有一个点,通常代表的是省级行政单位的驻地位置或几何中心,它不等于省份轮廓。千万别拿点位描出边界来冒充行政区界线,边界数据应该使用正式的区划边界成果。

5.2 符号化与标注:让图自己会说话

在GIS软件里,我可以根据一条“分区字段”来给点设置不同颜色,比如“华南区”“华北区”开车的话,按大类分色可以让图面更清晰。如果数据没有分区字段,也可以按“数据来源”或“更新时间”来分色。然后打开标注,用“名称”字段显示点旁边的名称。

这里要注意标注的避让问题。全国尺度下,省份之间距离相对均匀,一般不太会挤压在一起;但如果你后面把数据扩展到区县级别,那么标注就很容易互相压盖,必要时需要开启“避让”或手动调整个别标注位置。

5.3 做空间连接:这个点到底在哪个省

有一类常见需求是:手里有很多带坐标的POI点位,想知道它们分别落在哪个省份。这个在GIS里叫“空间连接”。geopandas的写法非常简短:

import geopandas as gpd # points_gdf是你要判断的点数据,province_gdf是省级面数据 joined = gpd.sjoin(points_gdf, province_gdf, how="left", predicate="within")

这里的predicate="within"表示“点在面内”,结果会附带上省份名称字段。一个容易踩的坑是:边界上的点可能同时落入两个面,sjoin默认会返回匹配到的两条记录。如果你想每个点只保留一条,一种做法是先按点去重,只保留第一个匹配结果。

5.4 从静态图走向动态可视化

省级点位数据除了出GIS专题图,还能喂给前端可视化的图表组件做交互。比如把经纬度整理成标准JSON,传到在线平台上做散点图、气泡图、热力图。这里有一个前置要求:无论用什么平台,你一定要知道它接收的是WGS84还是GCJ-02坐标。很多在线平台都有内置坐标纠偏选项,但也有很多平台没有,导致画出来的热力图整体偏移。我的经验是提前在GIS软件里把坐标统一转成WGS84,再导出JSON,这样不管到哪个平台都不怕。

6. 别急着用:数据质量体检的五个常规动作

6.1 范围检查:坐标必须落在合理区间

拿到任何一份“全国省份点位数据”,我建议先写一个简单的脚本或直接在Excel里做筛选,检查经度是否在73到135之间、纬度是否在18到54之间。这一步能快速暴露两类问题:一是经纬度列填反了(经度写到了纬度位置),二是混入了其他国家的坐标。如果出现海南某点位纬度比黑龙江还高,那肯定是字段错位。

6.2 重复值检查:一个省份不能冒出N个点

之前处理过一份共享数据,属性表里同一个省份名称出现了三次,坐标还各不相同。后来问了数据提供方才知道,是底表更新时重复追加了记录,没有做去重。处理方式很简单:在Excel里用“名称”列做条件格式或countif统计,凡是出现次数大于1的都要重点核实。

6.3 时效性验证:所谓“2025年”到底新在哪

很多“2025年版本”的数据其实是从旧版复制过来的,只是改了年份。省级行政单位的数量相对稳定,但近年部分省级以下的区划做过调整,点位名称和代码可能跟着变。所以我拿到所谓“2025年版”之后,会重点核对那几条涉及变更的记录,看看字段里有没有版本说明或更新时间。如果整个文件里连一句“数据来源”都没写,时效性基本上就要打问号了。

6.4 坐标抽查:随机挑几个点去对比底图

这是最笨但最可信的方法。从数据里随机挑3到5个点,把坐标填到某个可信赖的在线地图或GIS底图上,确认点位附近的地名和“名称”字段对得上。如果连省会级点位都能偏移出去,这份数据就不要投入正式项目。

6.5 元数据记录:给自己的数据写“身份证”

我养成的习惯是:任何一份外部数据入库前,都额外建一个说明文件,记录获取时间、来源渠道、坐标系、字段含义、做了哪些清洗操作。这个文件不花多少时间,却能在三个月后救你一次。经常有朋友半年后看着一份SHP发呆,完全想不起它是WGS84还是GCJ-02,更不敢拿去画图。有了元数据,至少能知道这份数据当初是怎么处理的,坐标有没有做过转换,要不要重新来一遍。

最后多说一句

我收到这类“会员专享”数据,第一反应永远是先做十分钟体检,而不是直接拖进软件开始画图。坐标系对不对、坐标范围是不是全境内、有没有重复点、字段类型是否靠谱,这些问题检查清楚再入库,后面出图和空间分析都会顺很多。如果你手头也有一份类似的SHP或Excel点位数据,建议你今天也把这套流程走一遍,特别是随机抽查几个点位坐标,确认它和你信赖的底图对得上。这十分钟省下来的,可能是后面一整天的返工时间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询