@hzab/map-combine 0.4.2-alpha.7 → 0.4.2-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,75 +1,77 @@
1
- # @hzab/map-combine@0.4.2
2
-
3
- feat: 点线面 height 设置
4
- fix: openlayer getFromLonLat this 指向修复
5
- break: PointAggregation datas 改为数组对象
6
- fix: cesium flyTo height 计算
7
- feat: map.bussinesses onFrame 事件回调
8
- fix: AmapPoint drawPoint 逻辑修复
9
- feat: Cesium 线 首次加载优化
10
-
11
- # @hzab/map-combine@0.4.1
12
-
13
- fix: 点聚合销毁时监听事件解除
14
-
15
- # @hzab/map-combine@0.4.0
16
-
17
- feat: 点聚合功能
18
- fix: 高德地图 canvasTgeography 参数取值问题修复
19
- fix: AMap、Openlayer、MinMap view-moveEnd 事件
20
-
21
- # @hzab/map-combine@0.3.0
22
-
23
- fix: reactpoint 添加高德地图引擎并添加相应点线面绘制
24
- feat: 高德地图支持 ReactPoint
25
- feat: 增加 loadPromise 参数,用于地图异步加载判断是否加载完成
26
- fix: 解决 ReactPoint 点击事件无法触发的问题
27
-
28
- # @hzab/map-combine0.2.8
29
-
30
- fix: reactpoint 添加状态回调
31
-
32
- # @hzab/map-combine0.2.7
33
-
34
- fix: flyToViewer 支持配置 minRadius 最小判断半径
35
-
36
- # @hzab/map-combine0.2.6
37
-
38
- fix: flyToViewer 修复点位过近导致高度异常问题
39
-
40
- # @hzab/map-combine0.2.5
41
-
42
- feat: flyTo 函数
43
-
44
- # @hzab/map-combine0.2.4
45
-
46
- fix: Cesium flyToViewer use flyTo
47
-
48
- # @hzab/map-combine0.2.3
49
-
50
- fix: 流动线可配置图形+颜色
51
-
52
- # @hzab/map-combine0.2.2
53
-
54
- fix: openlayer point 问题修复
55
-
56
- # @hzab/map-combine0.2.1
57
-
58
- feat: openLayer 对除 EPSG:3857 和 EPSG:4326 的瓦片坐标系取消偏移
59
-
60
- # @hzab/map-combine0.2.0
61
-
62
- feat: flyToViewer 所有点位移动至视口,调整位置及层级
63
-
64
- # @hzab/map-combine0.1.3
65
-
66
- feat: 添加地图 preRender 事件
67
-
68
- # @hzab/map-combine@0.1.0
69
-
70
- feat: BIM 模型加载;旋转、平移、缩放
71
- feat: 地图瓦片转 84 坐标系
72
-
73
- # @hzab/map-combine@0.0.1
74
-
75
- 组件初始化
1
+ # @hzab/map-combine@0.4.2
2
+
3
+ feat: 点线面 height 设置
4
+ fix: openlayer getFromLonLat this 指向修复
5
+ break: PointAggregation datas 改为数组对象
6
+ fix: cesium flyTo height 计算
7
+ feat: map.bussinesses onFrame 事件回调
8
+ fix: AmapPoint drawPoint 逻辑修复
9
+ feat: Cesium 线 首次加载优化
10
+ feat: 高德地图 颜色支持配置十六进制 rgba
11
+ feat: map event 添加 "drill-pick" 类型事件 返回当前点击位置的所有元素
12
+
13
+ # @hzab/map-combine@0.4.1
14
+
15
+ fix: 点聚合销毁时监听事件解除
16
+
17
+ # @hzab/map-combine@0.4.0
18
+
19
+ feat: 点聚合功能
20
+ fix: 高德地图 canvasTgeography 参数取值问题修复
21
+ fix: AMap、Openlayer、MinMap view-moveEnd 事件
22
+
23
+ # @hzab/map-combine@0.3.0
24
+
25
+ fix: reactpoint 添加高德地图引擎并添加相应点线面绘制
26
+ feat: 高德地图支持 ReactPoint
27
+ feat: 增加 loadPromise 参数,用于地图异步加载判断是否加载完成
28
+ fix: 解决 ReactPoint 点击事件无法触发的问题
29
+
30
+ # @hzab/map-combine0.2.8
31
+
32
+ fix: reactpoint 添加状态回调
33
+
34
+ # @hzab/map-combine0.2.7
35
+
36
+ fix: flyToViewer 支持配置 minRadius 最小判断半径
37
+
38
+ # @hzab/map-combine0.2.6
39
+
40
+ fix: flyToViewer 修复点位过近导致高度异常问题
41
+
42
+ # @hzab/map-combine0.2.5
43
+
44
+ feat: flyTo 函数
45
+
46
+ # @hzab/map-combine0.2.4
47
+
48
+ fix: Cesium flyToViewer use flyTo
49
+
50
+ # @hzab/map-combine0.2.3
51
+
52
+ fix: 流动线可配置图形+颜色
53
+
54
+ # @hzab/map-combine0.2.2
55
+
56
+ fix: openlayer point 问题修复
57
+
58
+ # @hzab/map-combine0.2.1
59
+
60
+ feat: openLayer 对除 EPSG:3857 和 EPSG:4326 的瓦片坐标系取消偏移
61
+
62
+ # @hzab/map-combine0.2.0
63
+
64
+ feat: flyToViewer 所有点位移动至视口,调整位置及层级
65
+
66
+ # @hzab/map-combine0.1.3
67
+
68
+ feat: 添加地图 preRender 事件
69
+
70
+ # @hzab/map-combine@0.1.0
71
+
72
+ feat: BIM 模型加载;旋转、平移、缩放
73
+ feat: 地图瓦片转 84 坐标系
74
+
75
+ # @hzab/map-combine@0.0.1
76
+
77
+ 组件初始化
package/README.md CHANGED
@@ -1,83 +1,83 @@
1
- # @hzab/map-combine
2
-
3
- 组件模板
4
-
5
- - node@16.16.0
6
-
7
- # 组件
8
-
9
- ## 示例
10
-
11
- ```jsx
12
- import Demo from "@hzab/map-combine";
13
-
14
- <Demo />;
15
- ```
16
-
17
- ## API
18
-
19
- ### InfoPanel Attributes
20
-
21
- | 参数 | 类型 | 必填 | 默认值 | 说明 |
22
- | ------ | ------ | ---- | ------ | ----------------- |
23
- | schema | Object | 是 | - | 数据信息的 schema |
24
-
25
- # 组件开发流程
26
-
27
- - 在 config/webpack.config.js 中按需修改 library 配置的文件名
28
- - 在 config/webpack.config.js 中按需修改 alias 配置的包名,便于本地调试
29
- - 在 tsconfig.json 中按需修改 paths 配置的包名,解决 ts 报错问题
30
- - npm run dev
31
-
32
- ## 文件目录
33
-
34
- - example 本地开发测试代码
35
- - src 组件源码
36
- - lib 组件打包编译后的代码
37
-
38
- ## 命令
39
-
40
- - Mac 执行该命令,设置 pre-commit 为可执行文件
41
-
42
- - npm run mac-chmod
43
- - chmod +x .husky && chmod +x .husky/pre-commit
44
-
45
- - 生成文档:npm run docs
46
- - 本地运行:npm run dev
47
-
48
- ## 发布
49
-
50
- - npm 源和云效源都需要发布
51
-
52
- - 命令:npm publish --access public
53
- - 发布目录:
54
- - src
55
-
56
- ### 迭代发布命令-版本自增
57
-
58
- - beta: 需要手动修改 package.json 中的 version,添加 -betaX 版本号。使用 npm publish --beta 发布
59
- - 0.0.x: npm run publish-patch
60
- - 0.x.0: npm run publish-minor
61
- - x.0.0: npm run publish-major
62
-
63
- ### nrm
64
-
65
- - 安装
66
- npm install -g nrm
67
- - 增加源
68
- nrm add aliyun https://packages.aliyun.com/62046985b3ead41b374a17f7/npm/npm-registry/
69
- - 切换源
70
- nrm use aliyun
71
- nrm use npm
72
- - 登录(账号密码在 https://packages.aliyun.com/npm/npm-registry/guide 查看)
73
- npm login --registry=https://packages.aliyun.com/62046985b3ead41b374a17f7/npm/npm-registry/
74
-
75
- ## 配置
76
-
77
- ### 配置文件
78
-
79
- - 本地配置文件:config/config.js
80
-
81
- ### webpack 配置文件
82
-
83
- - config/webpack.config.js
1
+ # @hzab/map-combine
2
+
3
+ 组件模板
4
+
5
+ - node@16.16.0
6
+
7
+ # 组件
8
+
9
+ ## 示例
10
+
11
+ ```jsx
12
+ import Demo from "@hzab/map-combine";
13
+
14
+ <Demo />;
15
+ ```
16
+
17
+ ## API
18
+
19
+ ### InfoPanel Attributes
20
+
21
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
22
+ | ------ | ------ | ---- | ------ | ----------------- |
23
+ | schema | Object | 是 | - | 数据信息的 schema |
24
+
25
+ # 组件开发流程
26
+
27
+ - 在 config/webpack.config.js 中按需修改 library 配置的文件名
28
+ - 在 config/webpack.config.js 中按需修改 alias 配置的包名,便于本地调试
29
+ - 在 tsconfig.json 中按需修改 paths 配置的包名,解决 ts 报错问题
30
+ - npm run dev
31
+
32
+ ## 文件目录
33
+
34
+ - example 本地开发测试代码
35
+ - src 组件源码
36
+ - lib 组件打包编译后的代码
37
+
38
+ ## 命令
39
+
40
+ - Mac 执行该命令,设置 pre-commit 为可执行文件
41
+
42
+ - npm run mac-chmod
43
+ - chmod +x .husky && chmod +x .husky/pre-commit
44
+
45
+ - 生成文档:npm run docs
46
+ - 本地运行:npm run dev
47
+
48
+ ## 发布
49
+
50
+ - npm 源和云效源都需要发布
51
+
52
+ - 命令:npm publish --access public
53
+ - 发布目录:
54
+ - src
55
+
56
+ ### 迭代发布命令-版本自增
57
+
58
+ - beta: 需要手动修改 package.json 中的 version,添加 -betaX 版本号。使用 npm publish --beta 发布
59
+ - 0.0.x: npm run publish-patch
60
+ - 0.x.0: npm run publish-minor
61
+ - x.0.0: npm run publish-major
62
+
63
+ ### nrm
64
+
65
+ - 安装
66
+ npm install -g nrm
67
+ - 增加源
68
+ nrm add aliyun https://packages.aliyun.com/62046985b3ead41b374a17f7/npm/npm-registry/
69
+ - 切换源
70
+ nrm use aliyun
71
+ nrm use npm
72
+ - 登录(账号密码在 https://packages.aliyun.com/npm/npm-registry/guide 查看)
73
+ npm login --registry=https://packages.aliyun.com/62046985b3ead41b374a17f7/npm/npm-registry/
74
+
75
+ ## 配置
76
+
77
+ ### 配置文件
78
+
79
+ - 本地配置文件:config/config.js
80
+
81
+ ### webpack 配置文件
82
+
83
+ - config/webpack.config.js
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hzab/map-combine",
3
- "version": "0.4.2-alpha.7",
3
+ "version": "0.4.2-alpha.8",
4
4
  "description": "地图组件",
5
5
  "main": "src",
6
6
  "scripts": {
@@ -53,8 +53,8 @@
53
53
  "peerDependencies": {
54
54
  "@turf/turf": "6.5.0",
55
55
  "coordtransform": "^2.1.2",
56
- "nanoid": "^3.3.7",
57
56
  "lodash": ">=4.17.21",
57
+ "nanoid": "^3.3.7",
58
58
  "react-dom": "^17.0.2",
59
59
  "zrender": "^5.4.4"
60
60
  },
@@ -62,6 +62,5 @@
62
62
  "**.{js,jsx,ts,tsx,css,scss,less,json,html}": [
63
63
  "prettier --write"
64
64
  ]
65
- },
66
- "dependencies": {}
65
+ }
67
66
  }
@@ -1,3 +1,5 @@
1
+ import { pointToLineDistance } from "@turf/turf";
2
+
1
3
  import { AMap } from "./AMap";
2
4
 
3
5
  /**
@@ -47,6 +49,59 @@ export function bindEvent(map: AMap) {
47
49
 
48
50
  viewer.on("click", (e) => {
49
51
  event.trigger("left-click");
52
+
53
+ // "drill-pick" 获取点击位置的元素
54
+ const clickPosition = e.lnglat;
55
+ const position = [clickPosition.lng, clickPosition.lat];
56
+ const allOverlays = viewer.getAllOverlays(); // 获取所有覆盖物
57
+ const pickedObjects = [];
58
+
59
+ // 遍历所有覆盖物,检查点击位置是否在覆盖物内
60
+ allOverlays.forEach((overlay) => {
61
+ // 判断是否为多边形
62
+ if (overlay instanceof map.LbsAMap.Polygon) {
63
+ // 使用 contains 方法判断点是否在多边形内
64
+ if (overlay.contains(clickPosition)) {
65
+ pickedObjects.push(overlay);
66
+ }
67
+ }
68
+ // 判断是否为折线
69
+ else if (overlay instanceof map.LbsAMap.Polyline) {
70
+ // 使用点线距离计算
71
+ const path = overlay.getPath();
72
+ const coords = path.map((p) => [p.getLng(), p.getLat()]);
73
+ const distance = pointToLineDistance(position, coords, { units: "meters" });
74
+
75
+ // 获取当前地图的分辨率(米/像素) 每像素代表多少米
76
+ const resolution = viewer.getResolution();
77
+ // 计算线宽对应的地理距离(单边)
78
+ const halfWidthInMeters = (overlay.getOptions().strokeWeight / 2) * resolution;
79
+
80
+ // 根据距离判断是否点击
81
+ if (distance < halfWidthInMeters + 2) {
82
+ pickedObjects.push(overlay);
83
+ }
84
+ }
85
+ // 判断是否为 Marker
86
+ else if (overlay instanceof map.LbsAMap.Marker) {
87
+ const position = overlay.getPosition();
88
+ const distance = map.LbsAMap.GeometryUtil.distance(position, clickPosition);
89
+ if (distance < 20) {
90
+ // 点击位置距离 Marker 小于 20 像素
91
+ pickedObjects.push(overlay);
92
+ }
93
+ }
94
+ });
95
+
96
+ // 按 zIndex 从高到低排序
97
+ pickedObjects.sort((a, b) => (b.getzIndex?.() || 0) - (a.getzIndex?.() || 0));
98
+
99
+ event.trigger("drill-pick", {
100
+ event: e,
101
+ pickedTargets: pickedObjects.map((it) => it.getOptions()?.extData?.target),
102
+ sourceObjects: pickedObjects,
103
+ position: position,
104
+ });
50
105
  });
51
106
 
52
107
  viewer.on("dblclick", (e) => {
@@ -20,9 +20,12 @@ export function drawPoint(map: AMap, point: Point<unknown>) {
20
20
  angle: point.rotation,
21
21
  anchor: point.center,
22
22
  draggable: point.editable,
23
+ bubble: true,
23
24
  extData: {
25
+ userdata: point.userdata,
24
26
  cursor: point.cursor,
25
27
  silent: point.silent,
28
+ target: point,
26
29
  },
27
30
  offset: pointOffset,
28
31
  });
@@ -1,8 +1,12 @@
1
1
  import { AMap } from "./AMap";
2
2
  import { Polygon } from "../basic/Polygon";
3
3
 
4
+ import { parseHexColor } from "../utils/color";
5
+
4
6
  export function drawPolygon(map: AMap, polygon: Polygon<unknown>) {
5
7
  const { event, viewer, LbsAMap } = map;
8
+ const { color: strokeColor, opacity: strokeOpacity } = parseHexColor(polygon.stroke);
9
+ const { color: fillColor, opacity: fillOpacity } = parseHexColor(polygon.fill);
6
10
 
7
11
  let status = 0;
8
12
  let skip = 0;
@@ -49,18 +53,20 @@ export function drawPolygon(map: AMap, polygon: Polygon<unknown>) {
49
53
 
50
54
  aMapPolygonEditor = new LbsAMap.PolygonEditor(viewer, undefined, {
51
55
  createOptions: {
52
- strokeColor: polygon.stroke,
56
+ strokeColor: strokeColor,
57
+ strokeOpacity: strokeOpacity,
53
58
  strokeWeight: polygon.lineWidth,
54
- fillOpacity: 0.4,
55
- fillColor: polygon.fill,
59
+ fillColor: fillColor,
60
+ fillOpacity: fillOpacity,
56
61
  strokeStyle: polygon.dash ? "dashed" : "solid",
57
62
  strokeDasharray: [10, 10],
58
63
  },
59
64
  editOptions: {
60
- strokeColor: polygon.stroke,
65
+ strokeColor: strokeColor,
66
+ strokeOpacity: strokeOpacity,
61
67
  strokeWeight: polygon.lineWidth,
62
- fillOpacity: 0.4,
63
- fillColor: polygon.fill,
68
+ fillColor: fillColor,
69
+ fillOpacity: fillOpacity,
64
70
  strokeStyle: polygon.dash ? "dashed" : "solid",
65
71
  strokeDasharray: [10, 10],
66
72
  },
@@ -76,13 +82,21 @@ export function drawPolygon(map: AMap, polygon: Polygon<unknown>) {
76
82
  status = 2;
77
83
  target = new LbsAMap.Polygon({
78
84
  path: polygon.coordinates,
79
- strokeColor: polygon.stroke,
85
+ strokeColor: strokeColor,
86
+ strokeOpacity: strokeOpacity,
80
87
  strokeWeight: polygon.lineWidth,
81
- fillOpacity: 0.4,
82
- fillColor: polygon.fill,
88
+ fillColor: fillColor,
89
+ fillOpacity: fillOpacity,
83
90
  strokeStyle: polygon.dash ? "dashed" : "solid",
84
91
  strokeDasharray: [10, 10],
85
92
  zIndex: polygon.coordinates[0]?.[2] ?? polygon.height,
93
+ bubble: true,
94
+ extData: {
95
+ userdata: polygon.userdata,
96
+ cursor: polygon.cursor,
97
+ silent: polygon.silent,
98
+ target: polygon,
99
+ },
86
100
  });
87
101
  viewer.add(target);
88
102
  bindEvent(target);
@@ -126,13 +140,17 @@ export function drawPolygon(map: AMap, polygon: Polygon<unknown>) {
126
140
  });
127
141
  break;
128
142
  case "fill":
143
+ const { color: fillColor, opacity: fillOpacity } = parseHexColor(polygon.fill);
129
144
  target.setOptions({
130
- fillColor: polygon.fill,
145
+ fillColor: fillColor,
146
+ fillOpacity: fillOpacity,
131
147
  });
132
148
  break;
133
149
  case "stroke":
150
+ const { color: strokeColor, opacity: strokeOpacity } = parseHexColor(polygon.stroke);
134
151
  target.setOptions({
135
- strokeColor: polygon.stroke,
152
+ strokeColor: strokeColor,
153
+ strokeOpacity: strokeOpacity,
136
154
  });
137
155
  break;
138
156
  case "dash":
@@ -1,8 +1,11 @@
1
1
  import { AMap } from "./AMap";
2
2
  import { Polyline } from "../basic/Polyline";
3
3
 
4
+ import { parseHexColor } from "../utils/color";
5
+
4
6
  export function drawPolyline(map: AMap, polyline: Polyline<unknown>) {
5
7
  const { event, viewer, LbsAMap } = map;
8
+ const { color: strokeColor, opacity: strokeOpacity } = parseHexColor(polyline.stroke);
6
9
 
7
10
  let status = 0;
8
11
  let skip = 0;
@@ -49,13 +52,15 @@ export function drawPolyline(map: AMap, polyline: Polyline<unknown>) {
49
52
 
50
53
  aMapPolylineEditor = new LbsAMap.PolylineEditor(viewer, undefined, {
51
54
  createOptions: {
52
- strokeColor: polyline.stroke,
55
+ strokeColor: strokeColor,
56
+ strokeOpacity: strokeOpacity,
53
57
  strokeWeight: polyline.lineWidth,
54
58
  strokeStyle: polyline.dash ? "dashed" : "solid",
55
59
  strokeDasharray: [10, 10],
56
60
  },
57
61
  editOptions: {
58
- strokeColor: polyline.stroke,
62
+ strokeColor: strokeColor,
63
+ strokeOpacity: strokeOpacity,
59
64
  strokeWeight: polyline.lineWidth,
60
65
  strokeStyle: polyline.dash ? "dashed" : "solid",
61
66
  strokeDasharray: [10, 10],
@@ -73,11 +78,19 @@ export function drawPolyline(map: AMap, polyline: Polyline<unknown>) {
73
78
  status = 2;
74
79
  target = new LbsAMap.Polyline({
75
80
  path: polyline.coordinates,
76
- strokeColor: polyline.stroke,
81
+ strokeColor: strokeColor,
82
+ strokeOpacity: strokeOpacity,
77
83
  strokeWeight: polyline.lineWidth,
78
84
  strokeStyle: polyline.dash ? "dashed" : "solid",
79
85
  strokeDasharray: [10, 10],
80
86
  zIndex: polyline.coordinates[0]?.[2] ?? polyline.height,
87
+ bubble: true,
88
+ extData: {
89
+ userdata: polyline.userdata,
90
+ cursor: polyline.cursor,
91
+ silent: polyline.silent,
92
+ target: polyline,
93
+ },
81
94
  });
82
95
  viewer.add(target);
83
96
  bindEvent(target);
@@ -1,58 +1,58 @@
1
- const defaultVersion = "2.0";
2
- const defaultPlugins = ["AMap.Geocoder", "AMap.AutoComplete", "AMap.PolygonEditor", "AMap.PolylineEditor"];
3
-
4
- if (!window._AMapLoaderTemp) {
5
- window._AMapLoaderTemp = {};
6
- }
7
-
8
- window._AMapLoaderTemp.loading = false;
9
-
10
- function Loader(opt) {
11
- if (!window.AMap) {
12
- window._AMapSecurityConfig = {
13
- securityJsCode: opt.securityJsCode || window._AMapLoaderTemp.securityJsCode,
14
- };
15
- }
16
- const { key, version, plugins } = opt || {};
17
- return new Promise((resolve, reject) => {
18
- // 判断是否有进行中的加载器
19
- if (window._AMapLoaderTemp.loading && window._AMapLoaderTemp.promise) {
20
- window._AMapLoaderTemp.promise.then((AMap) => {
21
- resolve(window.AMap);
22
- });
23
- return;
24
- }
25
- // 判断是否存在 AMap,且入参 plugins 是否改变
26
- if (
27
- (window.AMap && !plugins) ||
28
- (window.AMap && plugins && JSON.stringify(window._AMapLoaderTemp.plugins) === JSON.stringify(plugins))
29
- ) {
30
- resolve(window.AMap);
31
- return;
32
- }
33
-
34
- window._AMapLoaderTemp.plugins = plugins ? [...defaultPlugins, ...(plugins || [])] : defaultPlugins;
35
-
36
- // 不用地图组件时可以不安装 "@amap/amap-jsapi-loader"
37
- const AMapLoader = require("@amap/amap-jsapi-loader");
38
-
39
- window._AMapLoaderTemp.loading = true;
40
- window._AMapLoaderTemp.promise = AMapLoader.load({
41
- key: key || window._AMapLoaderTemp.key, // 申请好的Web端开发者Key,首次调用 load 时必填
42
- version: version || defaultVersion, // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
43
- plugins: window._AMapLoaderTemp.plugins, // 需要使用的的插件列表,如比例尺'AMap.Scale'等
44
- })
45
- .then((AMap) => {
46
- window.AMap = AMap;
47
- resolve(window.AMap);
48
- window._AMapLoaderTemp.loading = false;
49
- return AMap;
50
- })
51
- .catch((e) => {
52
- reject(e);
53
- console.error("AMap loader: ", e);
54
- });
55
- });
56
- }
57
-
58
- export default Loader;
1
+ const defaultVersion = "2.0";
2
+ const defaultPlugins = ["AMap.Geocoder", "AMap.AutoComplete", "AMap.PolygonEditor", "AMap.PolylineEditor"];
3
+
4
+ if (!window._AMapLoaderTemp) {
5
+ window._AMapLoaderTemp = {};
6
+ }
7
+
8
+ window._AMapLoaderTemp.loading = false;
9
+
10
+ function Loader(opt) {
11
+ if (!window.AMap) {
12
+ window._AMapSecurityConfig = {
13
+ securityJsCode: opt.securityJsCode || window._AMapLoaderTemp.securityJsCode,
14
+ };
15
+ }
16
+ const { key, version, plugins } = opt || {};
17
+ return new Promise((resolve, reject) => {
18
+ // 判断是否有进行中的加载器
19
+ if (window._AMapLoaderTemp.loading && window._AMapLoaderTemp.promise) {
20
+ window._AMapLoaderTemp.promise.then((AMap) => {
21
+ resolve(window.AMap);
22
+ });
23
+ return;
24
+ }
25
+ // 判断是否存在 AMap,且入参 plugins 是否改变
26
+ if (
27
+ (window.AMap && !plugins) ||
28
+ (window.AMap && plugins && JSON.stringify(window._AMapLoaderTemp.plugins) === JSON.stringify(plugins))
29
+ ) {
30
+ resolve(window.AMap);
31
+ return;
32
+ }
33
+
34
+ window._AMapLoaderTemp.plugins = plugins ? [...defaultPlugins, ...(plugins || [])] : defaultPlugins;
35
+
36
+ // 不用地图组件时可以不安装 "@amap/amap-jsapi-loader"
37
+ const AMapLoader = require("@amap/amap-jsapi-loader");
38
+
39
+ window._AMapLoaderTemp.loading = true;
40
+ window._AMapLoaderTemp.promise = AMapLoader.load({
41
+ key: key || window._AMapLoaderTemp.key, // 申请好的Web端开发者Key,首次调用 load 时必填
42
+ version: version || defaultVersion, // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
43
+ plugins: window._AMapLoaderTemp.plugins, // 需要使用的的插件列表,如比例尺'AMap.Scale'等
44
+ })
45
+ .then((AMap) => {
46
+ window.AMap = AMap;
47
+ resolve(window.AMap);
48
+ window._AMapLoaderTemp.loading = false;
49
+ return AMap;
50
+ })
51
+ .catch((e) => {
52
+ reject(e);
53
+ console.error("AMap loader: ", e);
54
+ });
55
+ });
56
+ }
57
+
58
+ export default Loader;