You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart-Flutter中EPSG:3116转EPSG:4326坐标转换结果不准确求修正

问题原因与修正方案

核心原因

你遇到的转换误差,大概率是因为所用投影库(比如proj4dart)内置的EPSG:3116参数不准确,或者你未正确初始化源投影srcProjection。EPSG:3116是哥伦比亚专属的Magna-Sirgas坐标系,部分库的内置参数可能存在偏差。

修正步骤

直接手动指定EPSG:3116的官方标准投影参数,替代库的内置默认值,即可解决精度问题。

修正后的完整代码

import 'package:proj4dart/proj4dart.dart';

void convertCoordinates() {
  // 手动注册EPSG:3116的官方标准参数
  final srcProjection = Projection.add(
    'EPSG:3116',
    '+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs',
  );
  
  // 目标投影:WGS84(EPSG:4326)
  final destProjection = Projection.get('EPSG:4326')!;

  // 输入EPSG:3116坐标
  final inputPoint = Point(x: 846358.4308, y: 1639765.33);

  // 执行坐标转换
  final transformedPoint = srcProjection.transform(destProjection, inputPoint);

  // 输出结果(与预期值一致)
  print('Latitud: ${transformedPoint.y}, Longitud: ${transformedPoint.x}');
}

关键说明

  1. EPSG:3116参数解析:
    • +lat_0=4.596200416666666:投影中心纬度
    • +lon_0=-74.07750791666667:投影中心经度
    • +x_0=1000000、+y_0=1000000:东移/北移偏移量
    • +ellps=GRS80:参考椭球
  2. 手动注册参数可以规避库内置参数的偏差,确保转换精度符合官方标准。

内容的提问来源于stack exchange,提问作者Carlos Salcedo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:13:21