QGIS坐标系转换失败?自定义投影怎么设?

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

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

QGIS坐标系转换失败与QGIS自定义投影设置流程
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

  1. 在 QGIS 图层面板中右键目标图层。
  2. 点击“属性”。
  3. 进入“信息”或“源”页面。
  4. 查看图层 CRS、图层范围和坐标数值。

如果坐标范围是类似 116.3, 39.9,一般是经纬度数据;如果坐标范围是类似 500000, 440000039500000, 3450000,多半是投影坐标。这个判断可以快速发现 QGIS 坐标系转换失败的根源。

步骤二:不要用“项目 CRS”代替“图层 CRS”

项目 CRS 只影响地图画布显示,不会修复图层原始坐标系错误。如果一个图层 CRS 设置错了,把项目 CRS 改来改去只会让显示状态变化,但不会得到正确数据。

正确做法是:

  1. 先确认图层真实 CRS。
  2. 在图层属性中检查是否识别正确。
  3. 必要时使用“设置图层 CRS”修正图层的 CRS 标签。
  4. 确认显示正确后,再执行重投影导出。

步骤三:用“另存为”完成真正的QGIS坐标系转换

如果图层 CRS 已经正确,需要转换成另一个坐标系,可以这样操作:

  1. 右键图层,选择“导出”。
  2. 点击“另存为”。
  3. 格式选择 GeoPackage、Shapefile 或 GeoJSON。
  4. 在“CRS”处选择目标坐标系,例如 EPSG:4326 - WGS 84EPSG:4490 - China Geodetic Coordinate System 2000
  5. 设置输出路径。
  6. 点击“确定”,生成新图层。

这一步才是实际的坐标系转换。转换完成后,建议查看新图层的坐标范围,确认经纬度或投影坐标是否符合预期。

步骤四:使用处理工具“重投影图层”

也可以使用 QGIS 处理工具箱中的“重投影图层”:

  1. 打开“处理工具箱”。
  2. 搜索“重投影图层”。
  3. 输入图层选择需要转换的图层。
  4. 目标 CRS 选择需要的坐标系。
  5. 运行工具并保存输出结果。

这种方法适合批处理流程,也适合后续放入 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

  1. 打开 QGIS。
  2. 进入“设置”。
  3. 选择“自定义投影”或“自定义坐标参考系统”。
  4. 点击新增按钮。
  5. 填写名称,例如“CGCS2000_3_Degree_GK_CM_117”。
  6. 在参数区域输入 WKT 或 PROJ 字符串。
  7. 点击验证,确认语法无误。
  8. 保存自定义 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:

  1. 右键图层。
  2. 选择“图层 CRS”。
  3. 选择“设置图层 CRS”。
  4. 搜索刚创建的自定义 CRS 名称。
  5. 应用后检查图层是否与参考数据正确叠加。

如果需要把它转换到 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 坐标系转换失败问题都可以定位并修复。