如何解决Arc 1960 / UTM zone 36S 到 Lat Long for Google Maps
我有这个坐标:778597.3125000001,9148353
。有人告诉我这个坐标是 Arc 1960 / UTM zone 36S
。
当我转到 here 并单击“获取地图上的位置”并输入上述坐标时,它会将点放置在地图上的正确位置(在字段的角落)。
我必须做什么样的变换/投影才能使它成为纬度和经度,然后在 Google 地图中转到同一点?
我尝试了各种方法,但似乎以 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,1);
var latitude = xy[1];
var longitude = xy[0];
Debug.WriteLine($"Lat: {latitude} Long: {longitude}");
有人知道为什么它被抵消了吗?
解决方法
解决方案是使用 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 +units=m +no_defs";
ProjectionInfo proj21036 = ProjectionInfo.FromProj4String(proj4_21036_str);
虽然,我不明白为什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。