Arc 1960 / Зона UTM 36S до широты и долготы для Google Maps

У меня есть эта координата: 778597.3125000001, 9148353. Мне сказали, что это координата Arc 1960 / UTM zone 36S.

Когда я перехожу здесь, нажимаю "Получить позицию на карте" и ввожу приведенные выше координаты, точка размещается в правильном место на карте (в углу поля).

Какое преобразование/проекцию мне нужно сделать, чтобы сделать широту и долготу, а затем перейти к той же точке в Картах Google?

Я пробовал разные способы, но, кажется, в конечном итоге получил 400 - 200m диагональное смещение.

Правильные широта и долгота должны быть: Lat: -7.699944 Long: 35.5262575 (угол поля, см. ссылка):

Я использую 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}");

Кто-нибудь знает, почему это смещено?


person Kellie    schedule 22.12.2020    source источник
comment
Возможно, стоит задать вопрос на gis.stackexchange.com.   -  person MrUpsidown    schedule 22.12.2020
comment
Упомянутый вами инструмент переводит предоставленные координаты в -7.69721021, 35.52550186, так почему вы считаете, что это должно быть -7.7009819, 35.5280201?   -  person MrUpsidown    schedule 22.12.2020
comment
Когда я захожу сюда: epsg.io/21036, нажимаю "Получить позицию на карте" и ввожу указанные выше координаты utm, он размещает точку в правильном месте на карте (в углу поля). Раньше я публиковал неправильный ожидаемый LatLong и исправил его, но у меня все еще есть проблема со смещением. Я предполагаю, что мой вопрос: какое преобразование/проекцию мне нужно сделать, чтобы сделать его Lat Long, а затем перейти к той же точке в Картах Google (которая является WGS84?)   -  person Kellie    schedule 23.12.2020


Ответы (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);

хотя, я не понимаю, почему.

person Kellie    schedule 23.12.2020
comment
пожалуйста, задавайте любые вопросы, которые у вас есть относительно решения в комментариях / как новый вопрос. Пожалуйста, не задавайте вопросы внутри ответов. Вы можете задать этот вопрос здесь, в комментариях... - person Sabito 錆兎; 23.12.2020