简介:世界地图shapefile数据包以国家测绘地理信息局2019版标准地图为底图绘制,面向投稿C刊、制作科研图件的学者及GIS从业者,既提供符合审查要求的底图,也给出将世界地图转为中国为中心视角的可行方法。压缩包共177个文件,大小60.75MB,其中25组shp/dbf/shx构成完整矢量要素,prj定义投影坐标,mxd保存地图工程,doc/docx则是操作说明;sbn/sbx用于空间索引加速,dbf保存属性信息,结构完整便于二次编辑。资源分为简单与详细两版:简单版保留国境线和主要城市,适合快速制图;详细版另含大洲、行政边界、湖泊、河流、经纬网等独立图层,可自由取舍以适配不同版式。底图源自国家测绘地理信息局标准地图,曾支撑两篇C刊论文顺利通过图形审查,规范性与精度均有实绩;配套文档针对中国为中心投影转换给出具体思路,能帮助用户快速完成视角切换。已有7329人学习或下载,适合地理制图、论文配图等场景参考。
1. 世界地图shp离“中国为中心”只差一次投影,这步不做全是白下
一张世界地图shp下载下来,默认坐标系几乎都是WGS84或Web Mercator,画出来永远是以0度经线为世界中心:欧洲居中、东亚被甩到右边边缘,太平洋被硬生生切成两半。这不是数据有问题,而是“世界中心”是由投影的中央经线决定的。要把这张shp变成中国为中心的世界地图,本质上不是换数据,而是换投影定义并重新导出。这篇笔记就把离线shp转中国为中心地图的完整流程、参数选型和五个翻车点一次说清。适合刚拿到shp不知怎么下手的新手,也适合需要批量转出同款底图的开发。
2. 中央经线怎么改才合理:Robinson、等距方位、Miller三种方案实测选择
2.1 shp坐标、投影和“视觉中心”三者关系
很多人第一次接触这问题时,以为把地图“挪”到中国为中心,是像图片编辑那样拖着画布平移。其实矢量shp里存的是经纬度坐标,比如东经120度就是120,不会因为你换了投影就变成别的值。真正改变视觉中心的,是投影算法里的中央经线参数。把中央经线从0度改成东经110度,整张图的左右边界就跟着平移,原来被裁到图幅两边的太平洋就拼到了一起,中国在图面上自然就回到中间位置。
先记住一个结论:转换后shp仍然是一堆经纬度坐标,只是导出时按新投影重新计算了平面位置。你在ArcGIS里看到地图变“正”了,只是数据框的动态投影效果;要把这种效果固化下来,必须重新导出为新的shp或要素类。这一步不做,换台电脑打开还是老样子。
还有一个容易混淆的概念:WGS84是地理坐标系,存的是经纬度;Mercator、Robinson这些是投影坐标系,把经纬度画到平面上。世界地图shp大多自带.prj文件声明自己是WGS84,但很多下载源会把这个文件漏掉。后面避坑章会专门讲缺.prj导致的全盘漂移问题,这里先记住第一步永远先确认原始坐标系。
2.2 三种投影方案对比表与适用场景
中国为中心的世界地图没有唯一标准答案,按用途不同主要有三种投影方案。下面这张表是我自己反复用下来的选型依据,前两个是伪圆柱类,视觉大头在中低纬度,第三个是方位类,从中心点向四周等距。
| 投影方案 | 中央经线建议值 | 核心特性 | 适合场景 |
|---|---|---|---|
| Robinson(罗宾逊) | 东经110度或150度 | 视觉均衡,全球压在同一张图上不变形到夸张 | 出版物底图、教学用图、数据展示 |
| 等距方位投影(Azimuthal Equidistant) | 中心点取东经110度、北纬35度附近 | 从中心点到任意点距离真实,但四周面积变形大 | 距离量算、航空分析、以中国为圆心的辐射图 |
| Miller(米勒圆柱) | 东经110度 | 横平竖直,经纬网整齐,高纬拉伸较轻 | 图表底图、需要经纬网格对齐的场景 |
Robinson是我用得最多的选项,因为它专门为“全世界放在一张图上”设计,从中间向两侧的变形比较均匀。很多在线地图服务里的“亚洲中心版世界地图”底层就是Robinson加中央经线偏移。等距方位投影更适合表达“从中国出发到世界各地有多远”,但外圈陆地会被拉得厉害,第一次看到可能觉得图坏了,其实不是。Miller圆柱相对冷门,好处是经纬网是直线,做统计图表叠加坐标格网很方便。
选型时可以遵循一条粗略规律:要好看选Robinson,要量真实距离选等距方位,要对齐网格选Miller。大多数工作流里,“中国为中心”默认值我建议直接定为Robinson加东经110度中央经线,理由后面实操部分会展开说。
2.3 选定参数后用两步快速验证投影是否生效
投影参数设完,别急着导出,先做两步验证,能在五分钟内排除大部分低级错误。
第一步,在ArcGIS或QGIS里把图层加载出来,打开图层的属性表,随便挑一个要素看坐标范围。如果数据框切换到新投影后,图层显示正常,但属性表里的X、Y坐标仍是经纬度小数,说明当前只是动态显示;属性表坐标变成了几百万米级的值,说明图层已经真的被重投影过。这个差别就是后面要讨论的“显示”和“导出”的区别。
第二步,加一个经纬网或参考线验证。最常见的做法是新建一个点图层,在里面放一个东经110度、北纬0度的点。这一点在新投影下应该大致落在图幅水平中心线上。如果这个点明显偏离中心线,说明中央经线或中心点参数根本没生效;如果点在图外,大概率是原始shp缺少空间参考定义,需要先补.prj再谈投影。
提示:用“点落在图幅中心”来验证中央经线,比肉眼判断陆地形状是否居中来得更客观,因为陆地形状在投影变换里本来就会偏移。
3. ArcGIS实操:把“默认世界”重投影为东经110度为中心的成品shp
3.1 先补.prj:绝大多数转换翻车都死在这
从网上下载的世界地图shp,经常是一整套文件里少了.prj。没有.prj,ArcGIS会按未知坐标系对待,图层叠加时默认把它当成和底图同一套坐标。这时你把数据框切到东经110度的Robinson,所有要素会先被当作米制坐标参与计算,结果就是全国界和点标全部飞出几万公里。我之前转过一批“世界地图shp”,导出的图一眼看去太平洋上是空的,检查半天才发现是缺.prj。
补.prj的方法很简单:在ArcCatalog里选中shp,打开属性,在“XY Coordinate System”里如果没有定义,就手动指定为WGS84(EPSG:4326)。这个操作不会改动坐标值,只是告诉ArcGIS“这些经纬度是按WGS84解释的”。对绝大多数从标准GIS数据源下载的世界地图shp,WGS84是正确选项。
要是用QGIS,更直接:加载shp时如果弹出“invalid datum”或“CRS is undefined”,就在图层属性里指定EPSG:4326,然后保存。节省时间的经验是:下载后先别急着转中国为中心,先打开属性表看一眼“Extent”范围。如果X范围在-180到180、Y范围在-90到90,说明是标准经纬度数据;如果出现几百万米的大数字,说明原数据已经是某种投影,再补4326就是错上加错。
3.2 数据框坐标系设置与导出参数
ArcGIS里最常用的操作路径是:把shp加进ArcMap,然后在图层列表右键“Data Frame Properties”,切到“Coordinate System”页签,新建或选择投影坐标系。Robinson在ArcMap里自带预置,但内置的World Robinson默认中央经线是0度,需要手动新建一个副本,把参数改成中央经线东经110度。
操作步骤拆开是这样的:
- 打开Data Frame Properties,进入Coordinate System页签
- 选“New Projected Coordinate System”,名字随意,比如“Robinson_110E”
- 在Projection Name里选Robinson,修改Central_Meridian为110
- 确认地理坐标系是GCS_WGS_1984,其余参数保持默认
- 应用后,数据框内地图会立刻呈现为中国居中的效果
这一步只是动态投影,地图显示变了,但原始shp没有变。要得到成品,需要把图层导出为新数据。这里有两个导出动作需要注意区分:一个是“Export Features”,把矢量shp按数据框的当前投影导出;另一个是“Export Data”对话框里的“Use the same coordinate system as the data frame”选项。选后者才会把重投影写入新文件。
导出参数据我经验,多数情况按默认即可,但有三个值得刻意设置的项:
| 参数项 | 推荐值 | 说明 |
|---|---|---|
| 坐标系 | 与数据框相同 | 选这个才固化中国为中心效果 |
| 输出要素类名 | 不带中文和空格 | 中文字段名转出去常出乱码 |
| 几何精度 | 与源数据保持一致 | 设置过密会让文件体积翻倍 |
导出完成后,把新shp重新加回地图,再打开属性表看坐标范围,应该已经是Robinson平面坐标。这里再补一刀:如果导出后图层和原图层叠在一起不重合,原因多半是导出时没选“与数据框相同坐标系”,而是选了“与图层相同坐标系”,结果导出文件仍是WGS84。
3.3 导出后的文件清单
ArcGIS导出要素类会生成一组文件:.shp、.dbf、.shx,以及自动生成的.prj、.sbx等。很多初学着只复制.shp走,拷到别处打开发现打不开,就是因为漏了.dbf和.shx。发布或归档时,整组文件要放在同一个目录一起分发。.prj尤其不能丢,不然别人拿去又是“未知坐标系”,跟你当初那张缺.prj的图一样,一切都得重来。
4. QGIS方案:自定义CRS字符串,一条规则覆盖整个工作流
4.1 在QGIS里新建Robinson自定义CRS
QGIS对自定义投影的支持比ArcGIS更透明,因为它直接暴露proj字符串。Robinson投影在中国为中心的CRS定义里,核心参数就是+proj=robin +lon_0=110 +datum=WGS84。在QGIS的“设置→自定义投影”里新建一个CRS,把下面这行proj字符串粘贴进去,命名成“Robinson China Centered”:
+proj=robin +lon_0=110 +datum=WGS84 +units=m +no_defs这段字符串的含义拆开看:+proj=robin表示采用Robinson投影算法,+lon_0=110就是中央经线设在东经110度,+datum=WGS84保证坐标基准和shp原始数据一致,+units=m说明导出后的平面单位是米,+no_defs表示不使用系统默认的额外定义。这里绝大多数人会踩的坑是把+lon_0小心直接改成110,数值必须写成度,不能写“110E”这种带字母的形式,proj解析器不认。
等距方位投影的自定义CRS同理,只是proj类型换成+proj=aeqd,再加一个中央纬度+lat_0=35。整个字符串是这样:
+proj=aeqd +lat_0=35 +lon_0=110 +datum=WGS84 +units=m +no_defs+lat_0=35代表投影中心点纬度在北纬35度附近。如果后续用图时发现中国偏在图下方,就把+lat_0往下调,比如30,整个图面的中心线会跟着变。这个参数就是方位投影的“视觉锚点”,记住它。
4.2 图层另存为并勾选重投影,几个参数对应关系
QGIS里把图层真正转成新坐标系的操作在“导出→另存为要素类”里。打开对话框后,最关键的选项是“CRS”:默认是“图层原有CRS”,点开下拉框,选刚才新建的“Robinson China Centered”即可。这一步等同于ArcGIS里导出时选“与数据框相同坐标系”,本质是把每个顶点坐标重新计算一遍再落盘。
文件格式选ESRI Shapefile,保存路径不要带空格和中文,否则有些旧版GDAL库在读写时容易报文件找不到的错误。保存之后,把新图层拖进画布,再去“图层属性→信息”里看“范围”。如果范围坐标已经在几十万到几百万量级,且图层叠加旧底图时位置完全错开,说明转换成功。叠加错开是正常的,因为两套坐标系的数学基础不同,不能要求顶点一一对应。
QGIS的另存为界面里还有一个容易被忽略的选项叫“也保存样式”,建议关掉。样式文件里如果记录了以原坐标系为基准的符号位置,加载新shp时可能把标注或符号位置带歪。数据是干净的,花里胡哨的样式文件反而添乱。
5. 五个转换常见坑:从经线撕裂到数据漂移的排查记录
5.1 现象:导出的世界地图东西两端被切掉
第一次转中国为中心时,导出的图左右两端各少了块陆地,看着像地图被掰断。原因在于Robinson投影的中央经线改成110度后,图幅左右边界不再是原始数据的±180度经线,而是以110度为中心的±180度,部分要素正好落在图幅外或被裁掉。这类问题在跨经线要素上尤其常见:比如一条穿过日界线的线要素,连续性会丢失。
解决:对矢量shp,用“裁剪”或“切割”工具沿着新投影的左右边界做清理;对只剩断裂面不连续的碎要素,用“修复几何”工具补充悬挂线。如果只是显示用,可以选择在布局里关闭裁剪选项;要导出成果图,就必须先处理几何边界,否则后期出图会中间断一条白缝。
5.2 现象:国界或点标注重影错位
转换后,面图层和点标注错开很大,比如城市点跑到国界外几百公里。常见原因有两个。一是点图层的原始坐标系和面图层不一致,比如面是WGS84,点是某国坐标系,转换时QGIS没有自动对齐两个图层的坐标系。二是导出时只转了面图层,标注图层用的还是旧样式坐标。
解决:转换前先用“Reproject Layer”把点、线、面全部统一到同一坐标系,再一起导出。转完后把点图层放在最上层,用“Move Label”手动微调已错位的标注,并把标注的坐标系锁定为新的投影坐标。这一步没什么玄学,纯粹是先统一再操作。
5.3 现象:shp与在线底图叠不对
很多人在QGIS里导入OSM或其它在线瓦片底图,再把转换后的shp叠上去,结果完全错位。原因是在线瓦片底图通常是Web Mercator投影,而你的shp是Robinson或等距方位,两套投影在平面上的网格完全不一致,当然叠不到一起。
解决:这类混搭场景里,shp和底图必须同投影。如果底图是Web Mercator,shp也必须转成EPSG:3857,所谓“中国为中心”就只能在保留Mercator的前提下偏移中央经线,但Mercator本身不支持任意中央经线偏移。更现实的做法是接受“中国为中心”只体现在矢量空间里,不用在线瓦片配合,而是用一张已转好投影的栅格底图。这点在接需求时要提前说清楚,避免做一半推倒重来。
5.4 现象:导出后面积比例看起来离谱
等距方位投影下,越远离中心点的区域,面积变形越严重,甚至亚洲看起来只占图幅一小块,美洲和欧洲大得不成比例。这不是数据坏了,是方位投影的数学特性。Robinson投影相对均衡,但如果把中央纬度设得太偏,低纬地区的横向拉伸也会很明显。
解决:要控制视觉比例,就别用等距方位,改用Robinson;要表达距离,就必须接受面积变形。选型时直接在参数比对阶段决定,不要在出图后再强行调整,因为后期压缩比例只会让坐标失真。实际经验是:凡是给业务方看“全世界布局”的图,一律优先Robinson,跟对方说清楚“变形是投影决定的”,比事后解释图坏了高效得多。
5.5 现象:.prj缺失导致全世界坐标整体漂移
这个坑前面提过一次,但值得单列,因为危害大到很难自查。shp丢.prj后,QGIS和ArcGIS都会默认把坐标解释成经纬度,但一旦你的原始数据其实是投影坐标,所有顶点会被当成经纬度重新映射,画出来的“世界”扭曲成一条条乱线,看起来跟外星地图一样。
解决:转前打开Extent确认坐标范围。如果X/Y在-180到180和-90到90的范围之外,就得先弄清楚原始投影。最常见的补救方案是拖入一个已知正确坐标的参考图层,用“Align Layers”对齐功能让QGIS猜原始CRS;对可疑数据,宁可多花十分钟确认,也不要用“近似”心态直接转换。
6. 从手工到脚本:用ogr2ogr批处理,再用一个自检函数收尾
6.1 ogr2ogr一条命令完成重投影
手工流程熟练之后,强烈建议把转换动作固化成一命令行,原因是你总会有多张shp要转。GDAL自带的ogr2ogr工具是跨平台的,Windows、Linux都能跑,一条命令完成坐标系转换和文件输出。下面这条命令把world.shp从WGS84转成中国为中心的Robinson投影:
ogr2ogr -t_srs "+proj=robin +lon_0=110 +datum=WGS84 +units=m +no_defs" \ -f "ESRI Shapefile" world_110e.shp world.shp-t_srs指定目标坐标系,后面跟的是和目标投影完全一致的proj字符串,这样和QGIS自定义CRS其实是同一条定义;-f指定输出格式;最后两个参数依次是输出文件路径和输入文件路径。命令执行后,成功时没有任何提示输出,失败时才在终端报错。我一般执行完会立即加一句ogrinfo world_110e.shp看坐标系信息,确认输出确实带上了目标CRS定义。
6.2 自检:读bbox和要素数量
命令批处理最怕的是“看着转完了,实际数据是坏的”。我的习惯是转完立刻跑一段小脚本自检。用Python的geopandas库读输出shp,打印要素数量、几何类型和边界范围,再和原shp对比:
import geopandas as gpd gdf = gpd.read_file("world_110e.shp") print(gdf.crs) print(gdf.total_bounds) print(len(gdf))total_bounds输出的是四元组(min_x, min_y, max_x, max_y),Robinson投影下X范围应该在千万米量级,Y范围在数百万米量级。如果X范围还是-180到180,说明投影没写进文件,需要重新检查-t_srs参数是否被正确解析。要素数量如果和原shp不一致,多半是转出时有的要素因几何错误被丢弃,这时优先回到源数据修复几何再重转。
从那以后,我每次转换都会强制走一遍“先查原始坐标系、再定投影参数、转完读bbox自检”的三步流程,没有再被丢.prj或投影错位的怪问题坑过。希望帮到你,省掉几个晚上的排查时间。
本文还有配套的精品资源,点击获取