现在我的地理坐标为 Lambert 2 ,就像这样
X:595833.007,
Y:2418927.985
为了在谷歌地图中显示这个地方,我需要 WSG84 的相关地理坐标,就像这样
X:48.7687954,
Y:2.27984782
是否有包含此功能的angularjs库?提前谢谢。
答案 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);
答案 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答案中的转换不正确。