Как преобразовать геокоординаты в JavaScript к геокоординатам в C#

Вот набор неочевидных функций, которые время от времени полезны:

  • mfilename (возвращает название в настоящее время под управлением сценария MATLAB)
  • dbstack (предоставляет Вам доступ к именам & номера строки matlab функционируют стек)
  • keyboard (выполнение остановок и управление урожаями к подсказке отладки; это - то, почему существует K в подсказке отладки K>>
  • dbstop error (автоматически помещает Вас в режим отладки, остановленный в строке, которая инициировала ошибку)
5
задан Robert Harvey 7 June 2016 в 21:44
поделиться

6 ответов

Компания, в которой я работаю, только что открыла исходный код библиотеки, которая делает именно это: http://code.google.com/p/geocoordconversion /

0
ответ дан 18 December 2019 в 08:28
поделиться

Ваш фрагмент кода JavaScript создает анонимные типы. Вы можете сделать то же самое в C #:

var e = new
{
    WGS84 = new { a = 6378137, b = 6356752.3142, f = 1 / 298.257223563 },
    Airy1830 = new { a = 6377563.396, b = 6356256.910, f = 1 / 299.3249646 },
    Airy1849 = new { a = 6377340.189, b = 6356034.447, f = 1 / 299.3249646 }
};

var h = new
{
    WGS84toOSGB36 = new
    {
        tx = -446.448, ty = 125.157, tz = -542.060, // m
        rx = -0.1502, ry = -0.2470, rz = -0.8421,   // sec
        s = 20.4894                                 // ppm
    },                               
    OSGB36toWGS84 = new
    {
        tx = 446.448,
        ty = -125.157,
        tz = 542.060,
        rx = 0.1502,
        ry = 0.2470,
        rz = 0.8421,
        s = -20.4894
    }
};
9
ответ дан 18 December 2019 в 08:28
поделиться

Я не думаю, что есть действительно простой способ преобразовать код, поскольку javascript - гораздо более свободный язык. Более того, в вашем коде вы используете генерацию javascript-объектов на лету, чего нельзя было сделать в C #.

Вероятно, вам нужно объявить те же классы, которые вы используете в JS (но вы не были вынуждены это сделать) и переписать код, я не думаю, что есть простой способ.

С моей личной точки зрения, вероятно, было бы полезно переписать код с нуля на C #. Если вы опытный разработчик C #, вы можете найти лучший алгоритм или более простой дизайн кода, если вы новичок, это поможет вам выучить язык.

1
ответ дан 18 December 2019 в 08:28
поделиться

] Лучшая надежда - использовать Dictionary в сочетании с новым классом def.

public class abf
{
   public double a
   {get;set;}
   public double b
   {get;set;}
   public double f
   {get;set;}
}

public class txtytz
{
   //repeat for tx ty tz etc
}

//

public Dictionary<string, abf> e;
public Dictionary<string, txtytz> h;

Вот как вы можете его использовать:

abf wgs84Result=e["WGS84"];  // will yield { a: 6378137,     b: 6356752.3142, f: 1/298.257223563 }

txtytz OSGB36toWGS84Result=h["OSGB36toWGS84"];  // will yield { tx:  446.448,  ty: -125.157,   tz:  542.060,
                           rx:    0.1502, ry:    0.2470,  rz:    0.8421,
                           s:   -20.4894 } };
1
ответ дан 18 December 2019 в 08:28
поделиться

В javascript используются анонимные типы. Вы могли бы сделать то же самое в C #, но было бы проще использовать именованные типы.

например, такой javascript:

// ellipse parameters
var e = { WGS84:    { a: 6378137,     b: 6356752.3142, f: 1/298.257223563 },
          Airy1830: { a: 6377563.396, b: 6356256.910,  f: 1/299.3249646   },
          Airy1849: { a: 6377340.189, b: 6356034.447,  f: 1/299.3249646   } };

.. представляет собой эллипсы. Вы могли бы сделать это в C # следующим образом:

// ellipse class
public class EllipseParameters {
    public double a {get; set;} 
    public double b {get; set;} 
    public double f {get; set;}
}

public Ellipses { 
    public EllipseParameters WGS84 {get;set;}
    public EllipseParameters Airy1830 {get;set;}
    public EllipseParameters Airy1849 {get;set;}
}

Ellipses e = new Ellipses {
    WGS84 = new EllipseParameters { a = 6378137,     b= 6356752.3142, f = 1/298.257223563 },
    Airy1830 = new EllipseParameters { a= 6377563.396, b= 6356256.910,  f= 1/299.3249646   },
    Airy1849 = new EllipseParameters { a= 6377340.189, b= 6356034.447,  f= 1/299.3249646   }
};

Но вместо класса Ellipses вам может потребоваться словарный подход, примерно так:

var e = new Dictionary<String,EllipseParameters>();
e.Add("WGS84", new EllipseParameters { a = 6378137,     b= 6356752.3142, f = 1/298.257223563 });
e.Add("Airy1830", new EllipseParameters { a= 6377563.396, b= 6356256.910,  f= 1/299.3249646   });
e.Add("Airy1849", new EllipseParameters { a= 6377340.189, b= 6356034.447,  f= 1/299.3249646   });

Вы могли бы использовать тот же подход с классами преобразования Helmert.

7
ответ дан 18 December 2019 в 08:28
поделиться

Кто-то написал класс C # для преобразования WGS84 в OSGB36 и LAT LON в NE, вы можете загрузить его здесь Я проверил это, и кажется, работает просто хорошо.

1
ответ дан 18 December 2019 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: