riku
2024-04-30 add483d13841cf472a9adb5c0cc72454f501fb7c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
 * 地图坐标相关计算
 */
 
import { map } from './index_old';
 
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;
  }
};