每次在QGIS交流群里看到有人问“为什么我的shp和高德底图对不上”,我的第一反应通常不是让他去检查数据,而是让他把当前图层的CRS截图发出来。十次里有八次,问题不是数据坏了,而是坐标系和投影没有说清楚。这篇内容不是纯粹的理论投影课,而是想把QGIS里最常碰到的高斯-克吕格、UTM、Web墨卡托这三类投影讲透:它们各自解决什么问题、在QGIS里怎么选、怎么设、最容易在哪里翻车。
如果你是要做国土、测绘、遥感、城市规划这类方向,高斯-克吕格几乎躲不掉;如果你经常下载全球范围的数据或者跟GPS、在线地图打交道,UTM和Web墨卡托就是你每天都要面对的东西。哪怕你只是刚装好QGIS,还没搞懂投影平面是什么,这篇文章也能帮你在半小时内建立一套足够用的坐标系判断逻辑。后面提到的操作我都按QGIS 3.x的界面来写,旧版本菜单位置可能有差异,但思路完全一致。
1. 每次“图层对不上”,八成是没分清经纬度和投影坐标
1.1 经纬度坐标:给地球写“门牌号”
先说最基础的一件事:你把GPS拿到户外,得到的通常是类似“39.9087°N, 116.3975°E”这样的经纬度,这一组数描述的是地球椭球面上的位置。它本质上是三维球面上的坐标,不是一张平面图纸上的坐标。平时说的WGS 84、CGCS2000、北京54、西安80,虽然经常被笼统叫成“坐标系”,但严格来说它们分两层:一层是椭球体和基准面,决定经纬度从哪里算起;另一层是基于这个椭球做出来的投影,决定平面坐标怎么形成。
在QGIS里,WGS 84的常用EPSG编号是4326,CGCS2000的经纬度坐标系是4490。两者在实际民用尺度的差别很小,很多情况下可以互相套用,但不要因此就把它们当成同一个东西。对于1:1万甚至更大比例尺的测绘成果,CGCS2000和WGS 84之间那几十厘米到一两米的差异,仍然需要通过转换参数处理。
经纬度坐标最大的优点是全球统一,不需要知道地方信息就能定位;最大的缺点是它没法直接用来量距离和面积。你在4326下测量两点距离,得到的结果通常是一个带小数的度,而不是米。想把度换成米,就必须引入投影。
1.2 投影坐标:把橘子皮切开再摊平
地球是球面,地图是平面。把一个球面展开成一张完整矩形,必然要撕裂或者拉伸,这就是地图投影要处理的根本矛盾。你可以把地球想象成一个橘子,把橘子皮剥下来之后想完整铺平,边缘一定会有褶皱或者裂口。为了减少褶皱,制图师想出各种办法:用圆锥、用圆柱、用平面去切地球,于是就有了圆锥投影、圆柱投影、方位投影。
任何投影都不可能同时做到角度、长度、面积都不变形。你只能根据自己的用途选择保留某一种性质。如果需要保持小区域的形状和方向,就选等角投影,也叫保形投影;如果需要比较面积大小,就选等积投影。高斯-克吕格和UTM都属于等角性质的横轴墨卡托投影,Web墨卡托则是直接用球体公式算出来的简化墨卡托,底层逻辑也是等角为主,但面积变形非常夸张。
投影坐标的常见特征就是坐标单位变成了米,数据范围看起来比较“规整”。比如一份高斯-克吕格坐标可能是“X=519500.36,Y=4456800.12”,前者是从中央经线往东算的东向坐标,后者是从赤道往北算的北向坐标。以后你看到这种七八位数的坐标,第一反应就应该是“这是投影坐标,不是经纬度”。
1.3 QGIS的CRS选项到底在选什么
QGIS所有跟坐标系相关的英文缩写都叫CRS(Coordinate Reference System)。打开任意一个矢量图层属性,或者点击右下角的投影按钮,你都会看到一大串EPSG编号。很多新手误以为在这里选一个坐标系就会自动把数据“纠正”过来,其实这里有个本质区别:
- 如果图层本来带正确的CRS信息,QGIS会自动把它显示在当前项目坐标系下。
- 如果图层没有CRS信息,或者被错误标记成了另一个坐标系,你需要先告诉QGIS“这份数据的真实坐标系是什么”,这叫给图层指定源坐标系。
- 如果你想把数据真正转换成另一个坐标系的文件,比如把WGS 84经纬度转成CGCS2000 3度带,那要做的是导出或另存为新文件,同时选目标CRS。
QGIS默认打开新项目时会把项目坐标系设成EPSG:4326,也就是经纬度。但你加载在线瓦片时,QGIS又会根据瓦片图层的定义自动把项目视角切换成EPSG:3857,所以很多人会看到右下角坐标系在跳变。这不是bug,而是QGIS在展示每个图层的原始位置,同时用实时投影转换让你能看到正确的叠加效果。弄明白这一步,后面再谈高斯-克吕格、UTM和Web墨卡托就会顺利很多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 高斯-克吕格投影:地方测绘绕不开的分带逻辑
2.1 为什么要分带:横着放的椭圆柱也有“保质期”
高斯-克吕格投影的几何概念可以理解为:把一个椭圆柱横着套在地球上,让椭圆柱的中心线正好切在某一条经线上,然后把地球表面投影到这个椭圆柱上,最后再把椭圆柱展开成平面。那条被切的经线叫中央经线,中央经线附近变形很小,越往东西两侧走,长度和面积变形就越大。
所以高斯-克吕格从不做“全球一张图”,而是一个带一个带地做。每个带只负责一段经度范围,这样就能把整个带内的变形控制在一个可接受的范围里。这就是“分带”最直接的原因。你越需要大比例尺的精确数据,带的宽度就越窄;反过来,小比例尺地形图可以用宽一点的带。
在中国测绘体系里,传统上常用的两条分带规则是:1:1万及更大比例尺的地形图,基本采用3度分带;1:2.5万到1:50万比例尺的地形图,一般用6度分带。地方上的控制测量和城市大比例尺测图还可能采用任意中央经线,甚至1.5度分带。放到QGIS里,你不需要把每条规范都背下来,但得会判断手里的数据到底是3度带还是6度带,否则后续选择EPSG时很容易选到隔壁带,导致数据横移几十上百公里。
2.2 三度带还是六度带:用公式和场景一起判断
3度带的公式非常容易记:带号乘以3,就是中央经线经度。例如40带的中央经线是120°E,41带的中央经线是123°E。如果你手里的数据范围在东经121.5度附近,又想用3度带,那显然40带和41带都有点偏,就要看测绘单位当初建控制网时选的是120°E还是123°E,甚至可能是自定义的121°30′中央经线。
6度带的公式是:中央经线经度 = 带号 × 6 − 3。以中国东部为例,东经120度不在6度带的中央,它落在21带,21带的中央经线是123°E。很多没有经验的人会把东经120度附近的数据直接套到20带,因为觉得120能整除6,想当然认为120是某个带的中央经线,这就是典型的错误判断。6度带的第一带是从0°经线到6°经线,中央经线是3°,不是0°。千万别把中央经线和带号整除关系记反。
在QGIS实际项目里,怎么判断手上的坐标是3度带还是6度带?最有效的办法是参考原始成果资料或数据说明。如果资料里写的是“1985国家高程基准,CGCS2000,3度带,中央经线120”,那就去选对应的CGCS2000 3度带带号。如果没有任何文档,只能靠坐标数值反推,那也需要先知道一个已知点的经纬度,再用公式回算,这个我会在后面的实操排查里展开。
2.3 QGIS里检索高斯-克吕格投影的正确姿势
在QGIS中给图层选CRS时,直接在窗口右上角搜索框输入“Gauss-Kruger”会出来一大堆结果,新手经常不知道选哪个。一个最关键的做法是先把基准面确定下来:如果是2000国家大地坐标系成果,优先搜“CGCS2000 / 3-degree Gauss-Kruger”;如果是基于西安80或北京54的老数据,则要搜对应的“Xian 1980”或“Beijing 1954”字样的Gauss-Kruger带号。
举个例子,你在江西南昌附近做1:1万数据,经度大概是115.9°E。3度带号 = 115.9除以3再四舍五入,得到39带,39带中央经线是117°E。如果最终成果是CGCS2000,QGIS里就可以搜索“CGCS2000 / 3-degree Gauss-Kruger zone 39”或“CGCS2000 / 3-degree Gauss-Kruger CM 117E”。6度带的话,115.9°E约等于带号19,因为19带的中央经线是19×6−3=111°E,20带中央经线是117°E,南昌115.9°E其实在19带和20带的边缘附近,这就需要结合比例尺和原数据提供单位来决定,不能自己拍脑袋。
还有一类地方坐标,中央经线是任意值,比如“城市独立坐标系,中央经线110°30′”。这类坐标在EPSG里不一定有现成编号,你需要在QGIS里新建一个自定义CRS。打开“项目 → 属性 → CRS”,在右侧点击新增按钮,把下面这段Proj参数粘贴进去,再根据实际情况把lon_0改成真实的中央经线:
text复制+proj=tmerc +lat_0=0 +lon_0=110.5 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs
如果原始成果是基于西安80或北京54的,ellps部分还要换成长半轴和扁率对应的参数,严格生产环境里还会涉及坐标转换七参数。我的建议是:自定义CRS只用来“看懂数据”和“快速预览”,正式成果转出前,尽量先找原数据单位确认基准面和转换参数。没有参数的裸转,地图上看着差不多,放到专业检核里还是会出问题。
3. UTM投影:和克吕格同门,但规则全球统一
3.1 UTM的带号、中央经线、比例因子到底怎么算
UTM全称是通用横轴墨卡托投影(Universal Transverse Mercator),和高斯-克吕格都是横轴墨卡托家族,但两者有两点关键差异。
第一点是分带起点不同。UTM从西经180°开始,自西向东按6度一个带划分,全球共60个带。带号计算公式是:带号 = floor((经度 + 180) / 6) + 1。比如东经120°:120加180等于300,除以6等于50,再加1得到51带,所以东经120°落在UTM 51带。按这个公式推,中国从最西边到最东边大概跨UTM 43带到53带。
第二点是比例因子不同。高斯-克吕格在中央经线上比例因子通常设为1,也就是中央经线没有长度变形,离它越远变形越大。UTM则在中央经线上把比例因子设为0.9996,相当于故意把中央经线附近的长度稍微“缩”了一点,目的就是把整个带内的最大变形压得更平衡。你可以理解为UTM不追求某一条经线完全不变形,而是追求整带范围内误差分布更均匀。
UTM的东向坐标也不是直接从中央经线的0米开始,而是给了一个500公里的假定值,这样中央经线以西不至于出现负坐标。北半球坐标直接以赤道为0米,南半球坐标则再加一个10000公里的假定北向偏移。所以当你看到一份坐标是“北坐标4456800.12,东坐标519500.36”,如果它在北半球,纬度大概就是40度左右;东坐标超过500000,说明它位于所选带的中央经线以东。
3.2 GPS、WGS84底图叠加时,怎样判断该用哪个UTM带
在QGIS里,UTM的EPSG编号有固定规律:WGS 84基准下的北半球UTM带是EPSG:326
