/**
|
* 地图坐标相关计算
|
*/
|
|
import { map } from './index_old';
|
|
function _prepare4convert(lnglats) {
|
var coor = [];
|
var maxLength = 1000;
|
var start = 0;
|
var end = start + maxLength;
|
while (end <= lnglats.length) {
|
coor.push(lnglats.slice(start, end));
|
start += maxLength;
|
end += maxLength;
|
}
|
if (start < lnglats.length) {
|
coor.push(lnglats.slice(start));
|
}
|
return coor;
|
}
|
|
function parse2LngLat(lnglats) {
|
// 创建包含4个节点的折线及文字标注
|
var path = [];
|
lnglats.forEach(function (value) {
|
// eslint-disable-next-line no-undef
|
path.push(new AMap.LngLat(value[0], value[1]));
|
});
|
return path;
|
}
|
|
/**
|
* 将gps经纬度转换为高德地图经纬度
|
* @param {*} lnglats
|
* @param {*} callback
|
*/
|
function _convertLatlng(index, coor, lnglats, callback) {
|
if (index < coor.length) {
|
var path = parse2LngLat(coor[index]);
|
// eslint-disable-next-line no-undef
|
AMap.convertFrom(path, 'gps', function (status, result) {
|
if (result.info === 'ok') {
|
lnglats.push.apply(lnglats, result.locations);
|
_convertLatlng(index + 1, coor, lnglats, callback);
|
}
|
});
|
} else {
|
callback(lnglats);
|
}
|
}
|
|
export default {
|
/**
|
* 根据坐标点、距离和角度,得到另一个坐标点
|
* @param {*} pos
|
* @param {*} distance 米
|
* @param {*} angle
|
*/
|
getLatLon: function (pos, distance, angle) {
|
var Ea = 6378137; // 赤道半径
|
var Eb = 6356725; // 极半径
|
var dx = distance * Math.sin((angle * Math.PI) / 180);
|
var dy = distance * Math.cos((angle * Math.PI) / 180);
|
var ec = Eb + ((Ea - Eb) * (90.0 - pos[1])) / 90.0;
|
var ed = ec * Math.cos((pos[1] * Math.PI) / 180);
|
var lng = ((dx / ed + (pos[0] * Math.PI) / 180.0) * 180.0) / Math.PI;
|
var lat = ((dy / ec + (pos[1] * Math.PI) / 180.0) * 180.0) / Math.PI;
|
return [lng, lat];
|
},
|
|
/**
|
* 将二维数组形式的坐标点数组转换为高德地图中 LngLat 类
|
* @param {*} lnglats
|
* @returns
|
*/
|
parse2LngLat: function (lnglats) {
|
// 创建包含4个节点的折线及文字标注
|
var path = [];
|
lnglats.forEach(function (value) {
|
// eslint-disable-next-line no-undef
|
path.push(new AMap.LngLat(value[0], value[1]));
|
});
|
return path;
|
},
|
|
/**
|
* 将高德地图的经纬度坐标转换为图形坐标
|
* @param {*} lnglats_GD
|
* @returns
|
*/
|
lngLatToGeodeticCoord: function (lnglats_GD) {
|
var coors_GD = [];
|
|
for (let i = 0; i < lnglats_GD.length; i++) {
|
var gd = lnglats_GD[i];
|
// eslint-disable-next-line no-undef
|
var r = new AMap.LngLat(...gd);
|
var p = map.lngLatToGeodeticCoord(r);
|
// **记录转换后的3D地图图形坐标
|
coors_GD.push(p);
|
}
|
return coors_GD;
|
},
|
|
convertFromGPS: function (gps, callback) {
|
var coor = _prepare4convert(gps);
|
_convertLatlng(0, coor, [], function (result) {
|
var gd = [];
|
result.forEach((r) => {
|
gd.push([r.lng, r.lat]);
|
});
|
callback(gd);
|
});
|
}
|
};
|