【问题标题】:Arc 1960 / UTM zone 36S to Lat Long for Google MapsArc 1960 / UTM zone 36S to Lat Long for Google Maps
【发布时间】:2021-04-01 05:18:52
【问题描述】:

我有这个坐标:778597.3125000001, 9148353。有人告诉我这个坐标是Arc 1960 / UTM zone 36S

当我转到here 并单击“获取地图上的位置”并输入上述坐标时,它会将点放置在地图上的正确位置(在字段的角落)。

我必须做什么样的变换/投影才能使它成为纬度和经度,然后去谷歌地图中的同一个点?

我尝试了各种方法,但似乎以400 - 200m 对角偏移结束。

正确的经纬度应该是:Lat: -7.699944 Long: 35.5262575(场地一角,见link):

我正在使用 DotSpatial。

    var Arc1960UTMZone36S = KnownCoordinateSystems.Projected.UtmOther.Arc1960UTMZone36S; 
    Arc1960UTMZone36S.AuthorityCode = 21036;

    var WGS1984 = KnownCoordinateSystems.Geographic.World.WGS1984;
    //4326 google earth  
    //3857 for google maps
    WGS1984.AuthorityCode = 3857;

    double[] xy = new double[2] { 778597.3125000001, 9148353 };
    double[] z = new double[1] { 0d };

    Reproject.ReprojectPoints(xy, z, Arc1960UTMZone36S, WGS1984, 0, 1);

    var latitude = xy[1];
    var longitude = xy[0];

    Debug.WriteLine($"Lat: {latitude} Long: {longitude}");

有人知道为什么会偏移吗?

【问题讨论】:

  • 可能值得在gis.stackexchange.com上提问
  • 您提到的工具将提供的坐标转换为-7.69721021, 35.52550186,那么您为什么认为它应该是-7.7009819, 35.5280201
  • 当我去这里时:epsg.io/21036 并单击“获取地图上的位置”并输入上面的 utm 坐标,它将点放在地图上的正确位置(在字段的角落).我之前确实发布了不正确的预期 LatLong 并已修复它,但我仍然有偏移问题。我想我的问题是:我必须做什么样的变换/投影才能让它拉长,然后去谷歌地图中的同一点(WGS84?)

标签: google-maps gis map-projections wgs84 dotspatial


【解决方案1】:

解决方案是使用proj4 字符串而不是已知坐标系。

而不是

var Arc1960UTMZone36S = KnownCoordinateSystems.Projected.UtmOther.Arc1960UTMZone36S; 
Arc1960UTMZone36S.AuthorityCode = 21036;

使用

String proj4_21036_str = "+proj=utm +zone=36 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs";    
ProjectionInfo proj21036 = ProjectionInfo.FromProj4String(proj4_21036_str);

虽然,我不明白为什么。

【讨论】:

  • 请将您对 cme​​ts/ 中的解决方案的任何问题作为新问题提出。请不要在答案中提问。你可以在 cmets 里问这个问题...
猜你喜欢
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 2016-09-18
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多