@hzab/map-combine 0.2.7 → 0.3.0-alpha.0
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 +55 -44
- package/README.md +83 -67
- package/package.json +14 -3
- package/src/amap/AMap.ts +254 -0
- package/src/amap/AMapEvent.ts +49 -0
- package/src/amap/AMapPoint.ts +143 -0
- package/src/amap/AMapPolygon.ts +195 -0
- package/src/amap/AMapPolyline.ts +185 -0
- package/src/amap/loader.ts +58 -0
- package/src/basic/MapCombine.ts +2 -0
- package/src/basic/Point.ts +173 -176
- package/src/basic/ReactPoint.tsx +8 -2
- package/src/cesium/CesiumEvent.ts +4 -0
- package/src/cesium/CesiumMap.ts +0 -1
- package/src/cesium/CesiumPolyline.ts +369 -369
- package/src/cesium/CesiumTile3D.ts +2 -6
- package/src/mine/MineEvent.ts +38 -25
- package/src/mine/MineMap.ts +119 -119
- package/src/openlayer/OpenlayerMap.ts +273 -273
- package/src/openlayer/OpenlayerPoint.ts +176 -176
- package/src/openlayer/OpenlayerPolygon.ts +298 -298
- package/src/openlayer/OpenlayerPolyline.ts +288 -288
|
@@ -55,7 +55,7 @@ export function drawTile3D(map: CesiumMap, tile3d: Tile3D) {
|
|
|
55
55
|
// (window as any).getCenter = () => {
|
|
56
56
|
// const center = tileset.boundingSphere.center
|
|
57
57
|
// const cartographic = Cesium.Cartographic.fromCartesian(center)
|
|
58
|
-
// console.
|
|
58
|
+
// console.info(Cesium.Math.toDegrees(cartographic.longitude), Cesium.Math.toDegrees(cartographic.latitude), cartographic.height);
|
|
59
59
|
// }
|
|
60
60
|
});
|
|
61
61
|
|
|
@@ -103,7 +103,6 @@ export function drawTile3D(map: CesiumMap, tile3d: Tile3D) {
|
|
|
103
103
|
tile3d.tileset = tileset;
|
|
104
104
|
tile3d.translate = function (x: number, y: number, z: number, _tileset) {
|
|
105
105
|
return tileset.readyPromise.then((argument) => {
|
|
106
|
-
console.log("debug translate tileset.readyPromise");
|
|
107
106
|
test();
|
|
108
107
|
translate(x, y, z, _tileset || tileset);
|
|
109
108
|
});
|
|
@@ -125,7 +124,7 @@ export function drawTile3D(map: CesiumMap, tile3d: Tile3D) {
|
|
|
125
124
|
}
|
|
126
125
|
|
|
127
126
|
function test() {
|
|
128
|
-
console.
|
|
127
|
+
console.info("debug test");
|
|
129
128
|
}
|
|
130
129
|
|
|
131
130
|
/** 基于本地的 ENU 坐标系的偏移,也就是垂直于地表向上为 Z,东为 X,北为 Y
|
|
@@ -135,9 +134,7 @@ function test() {
|
|
|
135
134
|
* @param tileset Cesium3DTileset
|
|
136
135
|
*/
|
|
137
136
|
function translate(dx: number, dy: number, dz: number, tileset) {
|
|
138
|
-
console.log("debug translate", dx, dy, dz);
|
|
139
137
|
if (dx === 0 && dy === 0 && dz === 0) return;
|
|
140
|
-
console.log("debug translate", dx, dy, dz);
|
|
141
138
|
|
|
142
139
|
try {
|
|
143
140
|
const { Cartesian3, Matrix4, Transforms } = Cesium;
|
|
@@ -169,7 +166,6 @@ function translate(dx: number, dy: number, dz: number, tileset) {
|
|
|
169
166
|
* @param tileset Cesium3DTileset
|
|
170
167
|
*/
|
|
171
168
|
function rotate(rx: number, ry: number, rz: number, tileset) {
|
|
172
|
-
console.log("debug rotate ", rx, ry, rz);
|
|
173
169
|
if (rx === 0 && ry === 0 && rz === 0) return;
|
|
174
170
|
const { Matrix3, Matrix4, Transforms, Math: CesiumMath } = Cesium;
|
|
175
171
|
// 获取中心点。
|
package/src/mine/MineEvent.ts
CHANGED
|
@@ -1,29 +1,42 @@
|
|
|
1
1
|
import { MineMap } from "./MineMap";
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
export function bindEvent(map: MineMap) {
|
|
5
|
-
const { event, viewer, container } = map
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
event.
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
event.trigger(
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
4
|
+
const { event, viewer, container } = map;
|
|
5
|
+
|
|
6
|
+
container.addEventListener("mousedown", (e) => {
|
|
7
|
+
event.trigger("pointer-down");
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
container.addEventListener("mouseup", (e) => {
|
|
11
|
+
event.trigger("pointer-up");
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
// 解决 ReactPoint 点击事件无法触发的问题
|
|
15
|
+
container.addEventListener("click", (e) => {
|
|
16
|
+
event.trigger("left-click");
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
viewer.on("mousemove", (e) => {
|
|
20
|
+
event.canvas = [e.point.x, e.point.y];
|
|
21
|
+
event.geography = [e.lngLat.lng, e.lngLat.lat, 0];
|
|
22
|
+
});
|
|
23
|
+
container.addEventListener("pointermove", (e) => {
|
|
24
|
+
event.trigger("pointer-move");
|
|
25
|
+
});
|
|
26
|
+
viewer.on("move", () => {
|
|
27
|
+
event.trigger("view-change");
|
|
28
|
+
});
|
|
29
|
+
viewer.on("mouseup", () => {
|
|
30
|
+
event.trigger("pointer-up");
|
|
31
|
+
});
|
|
32
|
+
viewer.on("mousedown", () => {
|
|
33
|
+
event.trigger("pointer-down");
|
|
34
|
+
});
|
|
35
|
+
viewer.on("click", () => {
|
|
36
|
+
event.trigger("left-click");
|
|
37
|
+
});
|
|
25
38
|
|
|
26
|
-
event.on(
|
|
27
|
-
|
|
28
|
-
})
|
|
29
|
-
}
|
|
39
|
+
event.on("destroy", () => {
|
|
40
|
+
viewer.remove();
|
|
41
|
+
});
|
|
42
|
+
}
|
package/src/mine/MineMap.ts
CHANGED
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
import { MapCombine } from "../basic/MapCombine";
|
|
2
|
-
import { PointOption, Point } from "../basic/Point";
|
|
3
|
-
import { PolygonOption, Polygon } from "../basic/Polygon";
|
|
4
|
-
import { PolylineOption, Polyline } from "../basic/Polyline";
|
|
5
|
-
import { Tile3DOption, Tile3D } from "../basic/Tile3D";
|
|
6
|
-
import { bindEvent } from "./MineEvent";
|
|
7
|
-
import { drawPoint } from "./MinePoint";
|
|
8
|
-
import { drawPolygon } from "./MinePolygon";
|
|
9
|
-
import { drawPolyline } from "./MinePolyline";
|
|
10
|
-
import { drawTile3D } from "./MineTile3D";
|
|
11
|
-
|
|
12
|
-
const MAX_ZOOM = 18;
|
|
13
|
-
|
|
14
|
-
export class MineMap extends MapCombine {
|
|
15
|
-
viewer: any;
|
|
16
|
-
container: HTMLDivElement;
|
|
17
|
-
|
|
18
|
-
get cursor(): string {
|
|
19
|
-
return this.viewer.getCursor();
|
|
20
|
-
}
|
|
21
|
-
set cursor(val: string) {
|
|
22
|
-
this.viewer.setCursor(val);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
get moveable(): boolean {
|
|
26
|
-
return this.viewer.dragPan.isEnabled();
|
|
27
|
-
}
|
|
28
|
-
set moveable(val: boolean) {
|
|
29
|
-
val ? this.viewer.dragPan.enable() : this.viewer.dragPan.disable();
|
|
30
|
-
}
|
|
31
|
-
get center(): number[] {
|
|
32
|
-
const p = this.viewer.getCenter();
|
|
33
|
-
return [p.lng, p.lat];
|
|
34
|
-
}
|
|
35
|
-
set center(val: number[]) {
|
|
36
|
-
this.viewer.setCenter(val);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
get zoom(): number {
|
|
40
|
-
return this.viewer.getZoom();
|
|
41
|
-
}
|
|
42
|
-
set zoom(val: number) {
|
|
43
|
-
this.viewer.setZoom(val);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
constructor(viewer: any) {
|
|
47
|
-
super();
|
|
48
|
-
this.viewer = viewer;
|
|
49
|
-
this.container = viewer.getContainer();
|
|
50
|
-
this.container.children.item(1).appendChild(this.htmllayer);
|
|
51
|
-
this.cursor = "default";
|
|
52
|
-
bindEvent(this);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
canvasTgeography(p: number[]): number[] {
|
|
56
|
-
const res = this.viewer.getTDSpaceCoord({ point: p, disableLayer: true });
|
|
57
|
-
return [res.lngLat.lng, res.lngLat.lat, 0];
|
|
58
|
-
}
|
|
59
|
-
geographyTcanvas(p: number[]): number[] {
|
|
60
|
-
const res = this.viewer.project([p[0], p[1]], p[2] ?? 0);
|
|
61
|
-
return [res.x, res.y];
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
createPoint<K>(option?: Partial<PointOption<K>>): Point<K> {
|
|
65
|
-
const e = new Point(this, option);
|
|
66
|
-
drawPoint(this, e);
|
|
67
|
-
return e;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
createPolyline<K>(option?: Partial<PolylineOption<K>>): Polyline<K> {
|
|
71
|
-
const e = new Polyline(this, option);
|
|
72
|
-
drawPolyline(this, e);
|
|
73
|
-
return e;
|
|
74
|
-
}
|
|
75
|
-
createPolygon<K>(option?: Partial<PolygonOption<K>>): Polygon<K> {
|
|
76
|
-
const e = new Polygon(this, option);
|
|
77
|
-
drawPolygon(this, e);
|
|
78
|
-
return e;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* 所有点位移动至视口,调整位置及层级
|
|
83
|
-
* @param points
|
|
84
|
-
* @param opt
|
|
85
|
-
* @param {Array<number> = [0,0,0,0]} opt.avoid 距离边框的内边距,顺序:上、下、左、右
|
|
86
|
-
*/
|
|
87
|
-
flyToViewer(points, opt = { avoid: [0, 0, 0, 0], maxZoom: MAX_ZOOM }) {
|
|
88
|
-
if (points?.length === 0) {
|
|
89
|
-
return this.flyTo(points[0], opt);
|
|
90
|
-
}
|
|
91
|
-
const rectangle = this.getBounds(points, { canvas: this.viewer.getCanvas(), ...opt });
|
|
92
|
-
|
|
93
|
-
// 设置地图视图,使用调整后的边界范围
|
|
94
|
-
this.viewer.fitBounds(
|
|
95
|
-
[
|
|
96
|
-
[rectangle[0], rectangle[1]],
|
|
97
|
-
[rectangle[2], rectangle[3]],
|
|
98
|
-
],
|
|
99
|
-
{
|
|
100
|
-
maxZoom: opt?.maxZoom ?? MAX_ZOOM,
|
|
101
|
-
},
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* 移动点位到中心点
|
|
107
|
-
* @param point
|
|
108
|
-
*/
|
|
109
|
-
flyTo(point, opt = {}) {
|
|
110
|
-
// 设置相机视角
|
|
111
|
-
this.viewer.flyTo({ center: point, ...opt });
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
createTile3D(option?: Partial<Tile3DOption>): Tile3D {
|
|
115
|
-
const e = new Tile3D(this, option);
|
|
116
|
-
drawTile3D(this, e);
|
|
117
|
-
return e;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
1
|
+
import { MapCombine } from "../basic/MapCombine";
|
|
2
|
+
import { PointOption, Point } from "../basic/Point";
|
|
3
|
+
import { PolygonOption, Polygon } from "../basic/Polygon";
|
|
4
|
+
import { PolylineOption, Polyline } from "../basic/Polyline";
|
|
5
|
+
import { Tile3DOption, Tile3D } from "../basic/Tile3D";
|
|
6
|
+
import { bindEvent } from "./MineEvent";
|
|
7
|
+
import { drawPoint } from "./MinePoint";
|
|
8
|
+
import { drawPolygon } from "./MinePolygon";
|
|
9
|
+
import { drawPolyline } from "./MinePolyline";
|
|
10
|
+
import { drawTile3D } from "./MineTile3D";
|
|
11
|
+
|
|
12
|
+
const MAX_ZOOM = 18;
|
|
13
|
+
|
|
14
|
+
export class MineMap extends MapCombine {
|
|
15
|
+
viewer: any;
|
|
16
|
+
container: HTMLDivElement;
|
|
17
|
+
|
|
18
|
+
get cursor(): string {
|
|
19
|
+
return this.viewer.getCursor();
|
|
20
|
+
}
|
|
21
|
+
set cursor(val: string) {
|
|
22
|
+
this.viewer.setCursor(val);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
get moveable(): boolean {
|
|
26
|
+
return this.viewer.dragPan.isEnabled();
|
|
27
|
+
}
|
|
28
|
+
set moveable(val: boolean) {
|
|
29
|
+
val ? this.viewer.dragPan.enable() : this.viewer.dragPan.disable();
|
|
30
|
+
}
|
|
31
|
+
get center(): number[] {
|
|
32
|
+
const p = this.viewer.getCenter();
|
|
33
|
+
return [p.lng, p.lat];
|
|
34
|
+
}
|
|
35
|
+
set center(val: number[]) {
|
|
36
|
+
this.viewer.setCenter(val);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
get zoom(): number {
|
|
40
|
+
return this.viewer.getZoom();
|
|
41
|
+
}
|
|
42
|
+
set zoom(val: number) {
|
|
43
|
+
this.viewer.setZoom(val);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
constructor(viewer: any) {
|
|
47
|
+
super();
|
|
48
|
+
this.viewer = viewer;
|
|
49
|
+
this.container = viewer.getContainer();
|
|
50
|
+
this.container.children.item(1).appendChild(this.htmllayer);
|
|
51
|
+
this.cursor = "default";
|
|
52
|
+
bindEvent(this);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
canvasTgeography(p: number[]): number[] {
|
|
56
|
+
const res = this.viewer.getTDSpaceCoord({ point: p, disableLayer: true });
|
|
57
|
+
return [res.lngLat.lng, res.lngLat.lat, 0];
|
|
58
|
+
}
|
|
59
|
+
geographyTcanvas(p: number[]): number[] {
|
|
60
|
+
const res = this.viewer.project([p[0], p[1]], p[2] ?? 0);
|
|
61
|
+
return [res.x, res.y];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
createPoint<K>(option?: Partial<PointOption<K>>): Point<K> {
|
|
65
|
+
const e = new Point(this, option);
|
|
66
|
+
drawPoint(this, e);
|
|
67
|
+
return e;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
createPolyline<K>(option?: Partial<PolylineOption<K>>): Polyline<K> {
|
|
71
|
+
const e = new Polyline(this, option);
|
|
72
|
+
drawPolyline(this, e);
|
|
73
|
+
return e;
|
|
74
|
+
}
|
|
75
|
+
createPolygon<K>(option?: Partial<PolygonOption<K>>): Polygon<K> {
|
|
76
|
+
const e = new Polygon(this, option);
|
|
77
|
+
drawPolygon(this, e);
|
|
78
|
+
return e;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* 所有点位移动至视口,调整位置及层级
|
|
83
|
+
* @param points
|
|
84
|
+
* @param opt
|
|
85
|
+
* @param {Array<number> = [0,0,0,0]} opt.avoid 距离边框的内边距,顺序:上、下、左、右
|
|
86
|
+
*/
|
|
87
|
+
flyToViewer(points, opt = { avoid: [0, 0, 0, 0], maxZoom: MAX_ZOOM }) {
|
|
88
|
+
if (points?.length === 0) {
|
|
89
|
+
return this.flyTo(points[0], opt);
|
|
90
|
+
}
|
|
91
|
+
const rectangle = this.getBounds(points, { canvas: this.viewer.getCanvas(), ...opt });
|
|
92
|
+
|
|
93
|
+
// 设置地图视图,使用调整后的边界范围
|
|
94
|
+
this.viewer.fitBounds(
|
|
95
|
+
[
|
|
96
|
+
[rectangle[0], rectangle[1]],
|
|
97
|
+
[rectangle[2], rectangle[3]],
|
|
98
|
+
],
|
|
99
|
+
{
|
|
100
|
+
maxZoom: opt?.maxZoom ?? MAX_ZOOM,
|
|
101
|
+
},
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* 移动点位到中心点
|
|
107
|
+
* @param point
|
|
108
|
+
*/
|
|
109
|
+
flyTo(point, opt = {}) {
|
|
110
|
+
// 设置相机视角
|
|
111
|
+
this.viewer.flyTo({ center: point, ...opt });
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
createTile3D(option?: Partial<Tile3DOption>): Tile3D {
|
|
115
|
+
const e = new Tile3D(this, option);
|
|
116
|
+
drawTile3D(this, e);
|
|
117
|
+
return e;
|
|
118
|
+
}
|
|
119
|
+
}
|