首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS将地理坐标从Lambert 2转换为WSG84

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

Stack Overflow用户
提问于 2016-04-14 11:08:48
回答 2查看 316关注 0票数 2

现在我有Lambert 2的地理坐标,如下所示

代码语言:javascript
复制
X:595833.007,
Y:2418927.985

为了在google地图中显示这个位置,我需要WSG84的相关地理坐标,如下所示

代码语言:javascript
复制
X:48.7687954,
Y:2.27984782

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-21 11:28:04

为了实现不同大地测量系统之间坐标的转换,我创建了这个repo,角地变流器。它很容易使用。

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

代码语言:javascript
复制
  <script src="angular-geo-converter.js"></script>

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

代码语言:javascript
复制
  angular.module('app',['geoConverter'])

调用控制器中的服务

代码语言:javascript
复制
  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:回答的转换是不正确的。

票数 1
EN

Stack Overflow用户

发布于 2016-04-14 11:31:56

我找到了将Lambert 2转换为WSG84同义词的算法。

您应该创建一个服务:

代码语言:javascript
复制
(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);

})();

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

代码语言:javascript
复制
  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);

检查演示小提琴

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36621295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档