@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 +77 -75
- package/README.md +83 -83
- package/package.json +3 -4
- package/src/amap/AMapEvent.ts +55 -0
- package/src/amap/AMapPoint.ts +3 -0
- package/src/amap/AMapPolygon.ts +29 -11
- package/src/amap/AMapPolyline.ts +16 -3
- package/src/amap/loader.ts +58 -58
- package/src/basic/MapCombine.ts +102 -102
- package/src/basic/ReactPoint.tsx +363 -363
- package/src/cesium/CesiumMap.ts +17 -0
- package/src/cesium/CesiumTile3D.ts +225 -225
- package/src/mine/MineEvent.ts +16 -1
- package/src/mine/MineMap.ts +125 -125
- package/src/mine/MinePoint.ts +6 -0
- package/src/mine/MinePolygon.ts +4 -0
- package/src/mine/MinePolyline.ts +4 -0
- package/src/utils/color.ts +49 -0
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
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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.
|
|
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
|
}
|
package/src/amap/AMapEvent.ts
CHANGED
|
@@ -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) => {
|
package/src/amap/AMapPoint.ts
CHANGED
|
@@ -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
|
});
|
package/src/amap/AMapPolygon.ts
CHANGED
|
@@ -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:
|
|
56
|
+
strokeColor: strokeColor,
|
|
57
|
+
strokeOpacity: strokeOpacity,
|
|
53
58
|
strokeWeight: polygon.lineWidth,
|
|
54
|
-
|
|
55
|
-
|
|
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:
|
|
65
|
+
strokeColor: strokeColor,
|
|
66
|
+
strokeOpacity: strokeOpacity,
|
|
61
67
|
strokeWeight: polygon.lineWidth,
|
|
62
|
-
|
|
63
|
-
|
|
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:
|
|
85
|
+
strokeColor: strokeColor,
|
|
86
|
+
strokeOpacity: strokeOpacity,
|
|
80
87
|
strokeWeight: polygon.lineWidth,
|
|
81
|
-
|
|
82
|
-
|
|
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:
|
|
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:
|
|
152
|
+
strokeColor: strokeColor,
|
|
153
|
+
strokeOpacity: strokeOpacity,
|
|
136
154
|
});
|
|
137
155
|
break;
|
|
138
156
|
case "dash":
|
package/src/amap/AMapPolyline.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
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:
|
|
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);
|
package/src/amap/loader.ts
CHANGED
|
@@ -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;
|