AngularJS 将地理坐标从 Lambert 2 转换为 WSG84

Posted

技术标签:

【中文标题】AngularJS 将地理坐标从 Lambert 2 转换为 WSG84【英文标题】:AngularJS convert geo coordinates from Lambert 2 to WSG84 【发布时间】:2016-04-14 11:08:48 【问题描述】:

现在我有了 Lambert 2 的地理坐标,就像这样

X:595833.007,
Y:2418927.985

为了在谷歌地图中显示这个地方,我需要WSG84的相关地理坐标,像这样

X:48.7687954,
Y:2.27984782

是否有包含此功能的 angularjs 库?提前致谢。

【问题讨论】:

【参考方案1】:

为了实现不同大地坐标系之间的坐标转换,我创建了这个 repo,angular-geo-converter。它很容易使用。

添加angular-geo-convert.js的脚本依赖:

  <script src="angular-geo-converter.js"></script>

在 Angular 应用程序的根模块中添加模块依赖:

  angular.module('app',['geoConverter'])

在你的控制器中调用服务

  angular.module('app').controller('geoCtrl',['geoConverter',function(geoConverter)
    var coordinates = geoConverter.lambert2wgs(595833,2418928);
    var coordinateX = coordinates.latitude;    // result:48.7687954
    var coordinateY = coordinates.longitude;    // result:2.27984782
  ])

PS: manzapanza 答案中的转换不正确。

【讨论】:

【参考方案2】:

Here 我找到了将 Lambert 2 转换为 WSG84 坐标的算法。

你应该创建一个服务:

(function()
  'user strict';

  function Lambert2ToWSG84() 

    var self = ;

    self.convert = function(x, y) 

      var newLongitude, newLatitude;

      var n = 0.77164219;
      var F = 1.81329763;
      var thetaFudge = 0.00014204;
      var e = 0.08199189;
      var a = 6378388;
      var xDiff = 149910;
      var yDiff = 5400150;
      var theta0 = 0.07604294;

      var xReal = xDiff - x;
      var yReal = yDiff - y;

      var rho = Math.sqrt(xReal * xReal + yReal * yReal);
      var theta = Math.atan(xReal / -yReal);

      newLongitude = (theta0 + (theta + thetaFudge) / n) * 180 / Math.PI;
      newLatitude = 0;

      for (var i = 0; i < 5 ; ++i) 
        newLatitude = (2 * Math.atan(Math.pow(F * a / rho, 1 / n) * Math.pow((1 + e * Math.sin(newLatitude)) / (1 - e * Math.sin(newLatitude)), e / 2))) - Math.PI / 2;
      

      newLatitude *= 180 / Math.PI;

      return 
        lat: newLatitude, 
        lng: newLongitude
      ;

    ;

    return self;

  

  angular
    .module('myModuleName')
    .factory('Lambert2ToWSG84', Lambert2ToWSG84);

)();

例如,在控制器中使用它:

  function MyCtrl(Lambert2ToWSG84) 
    var vm = this;

    vm.convert = function(x, y)
      return Lambert2ToWSG84.convert(x, y);
    ;

  

  MyCtrl.$inject = ['Lambert2ToWSG84'];

  angular
    .module('myModuleName')
    .controller('MyCtrl', MyCtrl);

CHECK THE DEMO FIDDLE

【讨论】:

以上是关于AngularJS 将地理坐标从 Lambert 2 转换为 WSG84的主要内容,如果未能解决你的问题,请参考以下文章

使用 AngularJS 获取地理位置坐标

ArcMap 10.0使用问题:已知一点的经纬度,如何在China_Lambert_Conformal_Conic下投影?

Mapinfo + Java:一种解密DAT文件中坐标的方法?

将地理坐标从度数转换为十进制

将地理坐标从 GEOSTAT 转换为 lat 和 lng

在 WP8 中从距离转换为地理坐标