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的主要内容,如果未能解决你的问题,请参考以下文章
ArcMap 10.0使用问题:已知一点的经纬度,如何在China_Lambert_Conformal_Conic下投影?