2

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

X:595833.007,
Y:2418927.985

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

X:48.7687954,
Y:2.27984782

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

4

2 回答 2

1

在这里,我找到了转换Lambert 2WSG84坐标的算法。

您应该创建一个服务:

(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);

检查演示小提琴

于 2016-04-14T11:31:56.003 回答
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答案中的转换不正确。

于 2016-04-21T11:28:04.013 回答