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

时间:2016-04-14 11:08:49

标签: javascript angularjs google-maps geolocation wgs84

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

X:595833.007,
Y:2418927.985

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

X:48.7687954,
Y:2.27984782

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

2 个答案:

答案 0 :(得分:1)

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

您应该创建一项服务:

(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

答案 1 :(得分:1)

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

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

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

在角度应用程序的根模块中添加模块依赖项:

  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答案中的转换不正确。