QGIS坐标系转换失败?自定义投影怎么设?
遇到“QGIS坐标系转换失败?自定义投影怎么设?”这类问题时,很多同学第一反应是反复修改图层 CRS,但结果仍然偏移、空白,甚至导出后坐标完全不对。本文以 QGIS 坐标系转换失败为主线,讲清楚为什么会失败、什么时候需要自定义投影,以及如何一步步验证转换结果。

引言:QGIS坐标系转换失败最常见的表现
QGIS坐标系转换失败通常不是软件“不能转换”,而是数据本身的坐标系信息、项目坐标系、转换参数或自定义投影定义存在问题。典型表现包括:
- 图层加载后出现在很远的位置,和底图完全对不上。
- 执行“另存为”重投影后,结果图层为空或范围异常。
- 经纬度数据被当成米制坐标,或米制坐标被当成经纬度。
- 使用地方坐标系、工程坐标系、老北京54、西安80数据时找不到合适 EPSG 编码。
- 设置了自定义投影后仍然偏移几百米到几公里。
解决这类问题的关键是:先判断原始数据“真实坐标系”是什么,再决定是设置图层 CRS、转换坐标系,还是创建 QGIS 自定义投影。
背景:为什么QGIS坐标系转换失败
在 QGIS 中,坐标系相关问题通常涉及三个概念:
- 图层 CRS:图层当前被 QGIS 识别为哪一种坐标参考系统。
- 项目 CRS:地图画布显示时使用的坐标参考系统。
- 导出 CRS:通过“另存为”或处理工具生成新数据时采用的目标坐标系。
很多 QGIS 坐标系转换失败问题,其实是把这三个概念混在一起导致的。例如,一个 Shapefile 明明是 CGCS2000 高斯投影坐标,但缺少 prj 文件,QGIS 可能会提示“未知 CRS”。如果此时直接把图层 CRS 设置成 WGS84,经纬度和米制坐标就会被错误解释,后续怎么转换都不可能正确。
常见数据场景
| 数据情况 | 常见错误操作 | 正确处理方向 |
|---|---|---|
| 图层没有 CRS 信息 | 随便选择 WGS84 | 先确认真实坐标系,再设置图层 CRS |
| 图层有 CRS,但和底图偏移 | 反复修改项目 CRS | 检查坐标系基准、带号和转换参数 |
| 地方坐标系没有 EPSG | 用相近 EPSG 代替 | 创建 QGIS 自定义投影或使用七参数转换 |
| 经纬度字段导入为点 | 把 X/Y 字段顺序弄反 | 确认经度为 X、纬度为 Y,并指定 EPSG:4326 |
原理:先区分定义坐标系和坐标系转换
要解决 QGIS 坐标系转换失败,必须先理解两个操作的区别。
1. 定义坐标系:告诉 QGIS 数据原来是什么坐标系
定义坐标系不会改变坐标值,只是告诉 QGIS:“这些数字应该按哪个 CRS 理解”。例如,某个点的坐标是:
X = 39500000
Y = 3450000
这明显不是经纬度,而更像高斯投影坐标。如果你把它定义成 EPSG:4326,QGIS 会把 39500000 当成经度,结果必然异常。
2. 坐标系转换:把坐标值真正换算到另一个坐标系
坐标系转换会生成新的坐标值。例如从 CGCS2000 高斯投影转换到 WGS84 经纬度,坐标会从米制 X/Y 变为经度/纬度。这一步通常通过“导出另存为”或“重投影图层”完成。
简单判断:如果数据本身 CRS 识别错了,先“定义”;如果数据 CRS 正确但要换成另一个 CRS,再“转换”。
步骤:QGIS坐标系转换失败的排查与修复流程
步骤一:检查原始图层是否有正确 CRS
- 在 QGIS 图层面板中右键目标图层。
- 点击“属性”。
- 进入“信息”或“源”页面。
- 查看图层 CRS、图层范围和坐标数值。
如果坐标范围是类似 116.3, 39.9,一般是经纬度数据;如果坐标范围是类似 500000, 4400000 或 39500000, 3450000,多半是投影坐标。这个判断可以快速发现 QGIS 坐标系转换失败的根源。
步骤二:不要用“项目 CRS”代替“图层 CRS”
项目 CRS 只影响地图画布显示,不会修复图层原始坐标系错误。如果一个图层 CRS 设置错了,把项目 CRS 改来改去只会让显示状态变化,但不会得到正确数据。
正确做法是:
- 先确认图层真实 CRS。
- 在图层属性中检查是否识别正确。
- 必要时使用“设置图层 CRS”修正图层的 CRS 标签。
- 确认显示正确后,再执行重投影导出。
步骤三:用“另存为”完成真正的QGIS坐标系转换
如果图层 CRS 已经正确,需要转换成另一个坐标系,可以这样操作:
- 右键图层,选择“导出”。
- 点击“另存为”。
- 格式选择 GeoPackage、Shapefile 或 GeoJSON。
- 在“CRS”处选择目标坐标系,例如
EPSG:4326 - WGS 84或EPSG:4490 - China Geodetic Coordinate System 2000。 - 设置输出路径。
- 点击“确定”,生成新图层。
这一步才是实际的坐标系转换。转换完成后,建议查看新图层的坐标范围,确认经纬度或投影坐标是否符合预期。
步骤四:使用处理工具“重投影图层”
也可以使用 QGIS 处理工具箱中的“重投影图层”:
- 打开“处理工具箱”。
- 搜索“重投影图层”。
- 输入图层选择需要转换的图层。
- 目标 CRS 选择需要的坐标系。
- 运行工具并保存输出结果。
这种方法适合批处理流程,也适合后续放入 QGIS 模型构建器中自动化处理。
步骤:QGIS自定义投影怎么设
当 QGIS 内置 EPSG 列表中找不到你的地方坐标系、工程坐标系或特定中央经线的高斯投影时,就可能需要设置 QGIS 自定义投影。
步骤一:获取可靠的投影参数
创建 QGIS 自定义投影之前,至少需要知道以下参数:
- 坐标系基准:如 WGS84、CGCS2000、北京54、西安80。
- 投影方法:常见为 Transverse Mercator,即横轴墨卡托,也就是高斯-克吕格投影常见形式。
- 中央经线:例如 114、117、120 等。
- 纬度原点:通常为 0。
- 尺度因子:高斯-克吕格常见为 1,UTM 常见为 0.9996。
- 东偏移和北偏移:如 500000、0,或带有带号的假东坐标。
- 单位:通常为米。
如果涉及北京54、西安80到 WGS84 或 CGCS2000 的转换,还可能需要七参数、三参数或网格改正文件。没有这些参数时,QGIS 自定义投影只能解决投影定义问题,不能完全解决基准转换偏移。
步骤二:在 QGIS 中创建自定义 CRS
- 打开 QGIS。
- 进入“设置”。
- 选择“自定义投影”或“自定义坐标参考系统”。
- 点击新增按钮。
- 填写名称,例如“CGCS2000_3_Degree_GK_CM_117”。
- 在参数区域输入 WKT 或 PROJ 字符串。
- 点击验证,确认语法无误。
- 保存自定义 CRS。
一个常见的 CGCS2000 横轴墨卡托示例 PROJ 字符串如下,仅用于说明结构,实际中央经线和假东坐标必须按你的数据修改:
+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs
其中 +lon_0=117 表示中央经线为 117 度,+x_0=500000 表示假东坐标为 500000 米,+ellps=GRS80 对应 CGCS2000 常用椭球。
步骤三:把自定义投影应用到图层
如果原始数据本来就是这个自定义坐标系,但 QGIS 没有识别出来,应先设置图层 CRS:
- 右键图层。
- 选择“图层 CRS”。
- 选择“设置图层 CRS”。
- 搜索刚创建的自定义 CRS 名称。
- 应用后检查图层是否与参考数据正确叠加。
如果需要把它转换到 WGS84、CGCS2000 经纬度或 Web Mercator,则再使用“另存为”或“重投影图层”输出目标 CRS。
步骤四:用已知控制点验证结果
不要只看图层“差不多叠上了”。建议至少用以下方式验证:
- 选择 3 个以上已知控制点,检查转换前后位置是否合理。
- 与权威底图、影像或测绘成果叠加对比。
- 检查图层范围是否落在正确城市、省份或项目区域。
- 检查坐标单位是否符合目标 CRS。
如果仍然有系统性偏移,通常不是 QGIS 坐标系转换失败,而是缺少正确的基准转换参数。
常见坑:QGIS坐标系转换失败的高频错误
坑一:把“设置图层 CRS”当成“重投影”
“设置图层 CRS”只是改标签,不改变坐标值。如果图层原本是 EPSG:4547,你把它设置成 EPSG:4326,坐标不会自动变成经纬度,只会被错误解释。
坑二:经纬度顺序写反
导入 CSV 点数据时,X 应为经度,Y 应为纬度。很多 QGIS 坐标系转换失败案例,其实是把纬度字段放到了 X,把经度字段放到了 Y。
坑三:混淆 EPSG:4326、EPSG:4490 和 EPSG:3857
| EPSG | 名称 | 常见用途 |
|---|---|---|
| 4326 | WGS 84 | GPS、GeoJSON、全球经纬度数据 |
| 4490 | CGCS2000 | 国内测绘成果、自然资源数据 |
| 3857 | Web Mercator | 互联网地图瓦片显示 |
如果你的目标是 WebGIS 显示,底图使用 EPSG:3857 很常见;但数据生产和分析并不一定应该长期保存为 EPSG:3857。
坑四:地方坐标系缺少七参数
地方坐标系常常经过平移、旋转、尺度变化处理。只有投影参数而没有转换参数时,自定义投影可能让形状和方向正确,但位置仍然偏移。此时需要向数据提供方索取转换参数,而不是继续猜 EPSG。
坑五:Shapefile 的 prj 文件丢失或错误
Shapefile 的 CRS 信息通常保存在 .prj 文件中。如果 .shp、.shx、.dbf 在,但 .prj 缺失,QGIS 可能无法判断坐标系。此时应根据数据来源恢复正确 CRS,而不是随便选择一个。
方法比较:设置图层CRS、重投影、自定义投影怎么选
| 方法 | 是否改变坐标值 | 适用场景 | 风险 |
|---|---|---|---|
| 设置图层 CRS | 不改变 | 图层 CRS 缺失或识别错误,但你知道真实 CRS | 选错会导致更严重偏移 |
| 另存为并选择目标 CRS | 改变 | 把正确 CRS 的图层转换到另一个 CRS | 原始 CRS 错误时会转换出错误结果 |
| 处理工具“重投影图层” | 改变 | 批量处理、模型构建、规范化输出 | 同样依赖正确输入 CRS |
| QGIS 自定义投影 | 本身不一定改变 | 内置 CRS 找不到、地方坐标系、特殊中央经线 | 参数不完整会产生系统偏移 |
实践中推荐的顺序是:先确认原始 CRS,再判断是否需要自定义投影,最后执行重投影导出。不要一开始就频繁尝试不同 EPSG 编码。
检查清单:转换前后必须确认的项目
- 数据来源:是否有元数据、说明文档、坐标系说明或测绘单位备注。
- 坐标数值:是经纬度范围,还是米制投影坐标范围。
- 图层 CRS:QGIS 当前识别的 CRS 是否与数据真实 CRS 一致。
- 项目 CRS:是否只是用于显示,不要误认为它会修改数据。
- 目标 CRS:是否符合交付、分析或 WebGIS 发布要求。
- 自定义投影参数:中央经线、假东坐标、椭球、单位是否正确。
- 基准转换:是否涉及北京54、西安80、地方坐标系到 CGCS2000 或 WGS84。
- 验证结果:是否使用控制点、底图或权威数据进行叠加检查。
- 输出格式:Shapefile 字段和编码限制是否会影响后续使用,必要时优先使用 GeoPackage。
FAQ:QGIS坐标系转换失败与自定义投影常见问题
QGIS坐标系转换失败是不是因为版本太旧?
不一定。版本可能影响坐标数据库和转换支持,但大多数问题来自原始 CRS 不明确、设置图层 CRS 和重投影混淆、地方坐标系参数缺失。建议先检查数据坐标范围和元数据,再考虑升级 QGIS。
QGIS自定义投影设置后为什么还是偏移?
常见原因是只定义了投影参数,没有处理基准转换参数。比如北京54、西安80或地方独立坐标系转到 WGS84、CGCS2000 时,可能需要三参数、七参数或网格改正文件。没有这些参数,偏移可能无法完全消除。
如何判断数据应该用 EPSG:4326 还是 EPSG:4490?
EPSG:4326 是 WGS84,经常用于 GPS 和互联网通用数据;EPSG:4490 是 CGCS2000,经常见于国内测绘和自然资源数据。两者坐标形式都可能是经纬度,所以不能只看数值格式,最好查看数据来源和元数据说明。
把项目 CRS 改成目标坐标系,算不算完成转换?
不算。项目 CRS 只影响 QGIS 画布显示,不会改变图层文件中的坐标值。要生成真正转换后的数据,需要使用“另存为”选择目标 CRS,或使用“重投影图层”工具。
没有 prj 文件的 Shapefile 怎么办?
先向数据提供方确认真实坐标系。如果无法确认,可以通过坐标范围、所在区域、已知控制点和相同来源数据推断。但不要直接猜一个常用 CRS 后就用于正式成果。
QGIS自定义投影应该用 PROJ 还是 WKT?
两者都可以。对于简单投影,PROJ 字符串更直观;对于正式、完整的 CRS 定义,WKT 信息更完整。实际项目中,建议优先使用权威来源提供的 WKT 或 EPSG 定义。
结论:先确认真实CRS,再转换或自定义投影
QGIS坐标系转换失败的核心原因,通常不是工具操作复杂,而是原始坐标系没有被正确识别。正确流程应当是:先判断数据真实 CRS,再区分“设置图层 CRS”和“重投影”,只有在内置坐标系无法满足时才创建 QGIS 自定义投影。
如果你的数据来自地方坐标系或工程坐标系,还要特别关注中央经线、假东坐标、椭球和基准转换参数。只要把这些环节逐项核对,绝大多数 QGIS 坐标系转换失败问题都可以定位并修复。