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

AngularJS convert geo coordinates from Lambert 2 to WSG84

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

X:595833.007,
Y:2418927.985

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

X:48.7687954,
Y:2.27984782

有angularjs库包含这个功能吗?提前致谢。

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

为了实现不同大地坐标系之间的坐标转换,我创建了这个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 的答案中的转换不正确