@hzab/map-combine 0.4.0-alpha.0 → 0.4.2-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.
@@ -1,54 +1,54 @@
1
- import { AMap } from "./AMap";
2
-
3
- /**
4
- * 高德地图事件
5
- * 高德地图 元素事件由各自元素处理
6
- * @param map
7
- */
8
- export function bindEvent(map: AMap) {
9
- const { event, viewer, container } = map;
10
-
11
- const frame = () => {
12
- if (map.isAlive) {
13
- requestAnimationFrame(frame);
14
- event.trigger("view-preRender");
15
- }
16
- };
17
- frame();
18
-
19
- viewer.on("moveend", (e) => {
20
- event.trigger("view-moveEnd");
21
- event.trigger("view-change");
22
- });
23
-
24
- container.addEventListener("mousedown", (e) => {
25
- event.trigger("pointer-down");
26
- });
27
-
28
- container.addEventListener("mouseup", (e) => {
29
- event.trigger("pointer-up");
30
- });
31
-
32
- // 解决 ReactPoint 点击事件无法触发的问题
33
- container.addEventListener("click", (e) => {
34
- event.trigger("left-click");
35
- });
36
-
37
- viewer.on("mousemove", (e) => {
38
- event.trigger("pointer-move");
39
- event.canvas = [e.pixel.x, e.pixel.y];
40
- event.geography = [e.lnglat.lng, e.lnglat.lat];
41
- });
42
-
43
- viewer.on("mapmove", () => {
44
- event.trigger("view-change");
45
- });
46
-
47
- viewer.on("click", (e) => {
48
- event.trigger("left-click");
49
- });
50
-
51
- viewer.on("dblclick", (e) => {
52
- map.event.trigger("double-click");
53
- });
54
- }
1
+ import { AMap } from "./AMap";
2
+
3
+ /**
4
+ * 高德地图事件
5
+ * 高德地图 元素事件由各自元素处理
6
+ * @param map
7
+ */
8
+ export function bindEvent(map: AMap) {
9
+ const { event, viewer, container } = map;
10
+
11
+ const frame = () => {
12
+ if (map.isAlive) {
13
+ requestAnimationFrame(frame);
14
+ event.trigger("view-preRender");
15
+ }
16
+ };
17
+ frame();
18
+
19
+ viewer.on("moveend", (e) => {
20
+ event.trigger("view-moveEnd");
21
+ event.trigger("view-change");
22
+ });
23
+
24
+ container.addEventListener("mousedown", (e) => {
25
+ event.trigger("pointer-down");
26
+ });
27
+
28
+ container.addEventListener("mouseup", (e) => {
29
+ event.trigger("pointer-up");
30
+ });
31
+
32
+ // 解决 ReactPoint 点击事件无法触发的问题
33
+ container.addEventListener("click", (e) => {
34
+ event.trigger("left-click");
35
+ });
36
+
37
+ viewer.on("mousemove", (e) => {
38
+ event.trigger("pointer-move");
39
+ event.canvas = [e.pixel.x, e.pixel.y];
40
+ event.geography = [e.lnglat.lng, e.lnglat.lat];
41
+ });
42
+
43
+ viewer.on("mapmove", () => {
44
+ event.trigger("view-change");
45
+ });
46
+
47
+ viewer.on("click", (e) => {
48
+ event.trigger("left-click");
49
+ });
50
+
51
+ viewer.on("dblclick", (e) => {
52
+ map.event.trigger("double-click");
53
+ });
54
+ }
@@ -1,35 +1,35 @@
1
1
  export interface BasicElementOption {
2
2
  /** 是否显示 */
3
- show: boolean
3
+ show: boolean;
4
4
  /** 鼠标样式 */
5
- cursor: string
5
+ cursor: string;
6
6
  /** 元素是否静默(不触发鼠标事件) */
7
- silent: boolean
7
+ silent: boolean;
8
8
  }
9
9
 
10
10
  export abstract class BasicElement<T extends BasicElementOption> {
11
- option: T
11
+ option: T;
12
12
  constructor(option: T) {
13
- this.option = option
13
+ this.option = option;
14
14
  }
15
15
 
16
16
  update(option: Partial<T>) {
17
- Object.assign(this.option, option)
18
- this._onUpdate(option)
17
+ Object.assign(this.option, option);
18
+ this._onUpdate(option);
19
19
  }
20
20
 
21
- protected abstract _onUpdate(option: Partial<T>): void
21
+ protected abstract _onUpdate(option: Partial<T>): void;
22
22
 
23
23
  /** 鼠标进入回调 */
24
- onMouseIn?(): void
24
+ onMouseIn?(): void;
25
25
  /** 鼠标离开回调 */
26
- onMouseOut?(): void
26
+ onMouseOut?(): void;
27
27
  /** 鼠标移动回调 */
28
- onMouseMove?(): void
28
+ onMouseMove?(): void;
29
29
  /** 鼠标点击回调 */
30
- onClick?(): void
30
+ onClick?(): void;
31
31
  /** 鼠标右键点击回调 */
32
- onRClick?(): void
32
+ onRClick?(): void;
33
33
  /** 销毁元素 */
34
- abstract destroy(): void
34
+ abstract destroy(): void;
35
35
  }
@@ -1,45 +1,51 @@
1
- import { BasicElement, type BasicElementOption } from './BasicElement'
1
+ import { BasicElement, type BasicElementOption } from "./BasicElement";
2
2
 
3
3
  export interface BasicMarkerOption extends BasicElementOption {
4
4
  /** 经度 */
5
- lon: number
5
+ lon: number;
6
6
  /** 纬度 */
7
- lat: number
7
+ lat: number;
8
8
  /** 海拔 */
9
- alt: number
9
+ alt: number;
10
10
  /** 图标 */
11
- icon?: string
11
+ icon?: string;
12
12
  /** 宽度 */
13
- width: number
13
+ width: number;
14
14
  /** 高度 */
15
- height: number
15
+ height: number;
16
16
  /** 横向偏移 */
17
- x: number
17
+ x: number;
18
18
  /** 纵向偏移 */
19
- y: number
19
+ y: number;
20
20
  /** 旋转角度 */
21
- rotation: number
22
- img?: HTMLCanvasElement | HTMLImageElement
21
+ rotation: number;
22
+ img?: HTMLCanvasElement | HTMLImageElement;
23
23
  }
24
24
 
25
25
  export abstract class BasicMarker extends BasicElement<BasicMarkerOption> {
26
26
  constructor(option: Partial<BasicMarkerOption> = {}) {
27
- super(Object.assign({
28
- show: true,
29
- cursor: 'pointer',
30
- silent: false,
31
- lon: 120,
32
- lat: 30,
33
- alt: 0,
34
- width: 64,
35
- height: 64,
36
- x: 0,
37
- y: -32,
38
- rotation: 0,
39
- icon: BasicMarker.defualtIcon,
40
- }, option))
27
+ super(
28
+ Object.assign(
29
+ {
30
+ show: true,
31
+ cursor: "pointer",
32
+ silent: false,
33
+ lon: 120,
34
+ lat: 30,
35
+ alt: 0,
36
+ width: 64,
37
+ height: 64,
38
+ x: 0,
39
+ y: -32,
40
+ rotation: 0,
41
+ icon: BasicMarker.defualtIcon,
42
+ },
43
+ option,
44
+ ),
45
+ );
41
46
  }
42
47
 
43
48
  /** 默认图标 */
44
- static defualtIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAA7NJREFUeF7lmwlu3DAMRZ2TtbmNbtHmFr5Nk5O1YCAHiobL5yK5wAwQZPEmPn5+0bLzcjz55+XJ4z+2AWit/TyOg75+DNDp9+vz3n/4oO/nef7ekZylAHrQv3rgkXgIysdKGEsAFATOwXpbAaIUwKLAZxilIMoAtNaoZknu3g/JfPQC9PgSEGkAjqxToG9XdOd5Xqb3FfBglPQ3BGYaQgpAH/AfI2UU9DsXsJXqAYgGIwUhDAAIPjWwEU4vL00VBPjVAsptzwD4K1zwU+qRjFsBGD4TAh4C0Foj2XPGFRqEFfikBrquVHbu67sBKFlwX9wT+LyvkoRXj/pcAP6X4AmG4kEuP/AC4KTvuiAjZ+r7H6ZERB0KBFgFMAAp++d5es5B9XtNaZyHuHt/YVxwUjyD51wfrntnpwift5cDp0zoHBCAbPYVw7KUDgUhlAKkggwAdHDRe4QLDlTPAmTzWBTAg/yR2jdkPy6A0CKJeEMEXovrD/IABHmh2ed8Q+wUFWCmnKNlYCpAGJQJIOobCgQzm1wZWOoJAbBOmnXmaD0L8FRwCICHKQYEMMvflPHletGyE44rB2AGEg1g6hLdAFcBqBqI6RsGAGqZVcVGwCMlUAXAVE62BLr3zONVwSMAZg+AAmmthXqHHgTXPJkKWqWAqAmG+3MO3nEcyDTIgSs3QUoSMhhp5UbMpLbCbNW/pBzrOKQEQi2m0gvQpm8rxcDqryl/of5N4zQBCCdGfUBbv7PuBK/taPAh30ABcPVsloFiaGjwZgaHmcNd/3QsCoDLJKSCBAT4/BmVQgCUeoZUYGSJU0PFeaHS8QBIqWDq8q6XH8aXJT6fG3oXSKN3ndd4YABVKoCLH9xRuHOEsg97gNGiwkYFxgTvFl2rGC/gUoCiApdhwREaO0Y7xhQAqeFAusOqwJVEwNIPeQDg5i73jgLJGl9aAXeWQvXzSbcHTNNZ6mlRRAFC3bulnyoBa1boL0iUv+goTHkpA04pwGhzS/0gs1yuKS0NYIcfVNd9iQnOVIXaTMnTUFi47lcBcK8AWSaovABREry7FQYGLD0JDg14laqWKABoklwQql6CspJWYoKMH6SUsCv48hKYmqTQu4S730FcooChHFwQVk53UiksBaD0CLTpmyfcEfzSEgDa5S8IdwW/BUBXgfZ8QPqHCdesYbn9bSUAKmEe35bgtynACWFb8NsBAOWwNfhbACgQtgd/GwCmT7gl+NsBXGrwPg2KOj533PJGqHKwK8719AD+Aby+uV/6QmnsAAAAAElFTkSuQmCC'
49
+ static defualtIcon =
50
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAA7NJREFUeF7lmwlu3DAMRZ2TtbmNbtHmFr5Nk5O1YCAHiobL5yK5wAwQZPEmPn5+0bLzcjz55+XJ4z+2AWit/TyOg75+DNDp9+vz3n/4oO/nef7ekZylAHrQv3rgkXgIysdKGEsAFATOwXpbAaIUwKLAZxilIMoAtNaoZknu3g/JfPQC9PgSEGkAjqxToG9XdOd5Xqb3FfBglPQ3BGYaQgpAH/AfI2UU9DsXsJXqAYgGIwUhDAAIPjWwEU4vL00VBPjVAsptzwD4K1zwU+qRjFsBGD4TAh4C0Foj2XPGFRqEFfikBrquVHbu67sBKFlwX9wT+LyvkoRXj/pcAP6X4AmG4kEuP/AC4KTvuiAjZ+r7H6ZERB0KBFgFMAAp++d5es5B9XtNaZyHuHt/YVxwUjyD51wfrntnpwift5cDp0zoHBCAbPYVw7KUDgUhlAKkggwAdHDRe4QLDlTPAmTzWBTAg/yR2jdkPy6A0CKJeEMEXovrD/IABHmh2ed8Q+wUFWCmnKNlYCpAGJQJIOobCgQzm1wZWOoJAbBOmnXmaD0L8FRwCICHKQYEMMvflPHletGyE44rB2AGEg1g6hLdAFcBqBqI6RsGAGqZVcVGwCMlUAXAVE62BLr3zONVwSMAZg+AAmmthXqHHgTXPJkKWqWAqAmG+3MO3nEcyDTIgSs3QUoSMhhp5UbMpLbCbNW/pBzrOKQEQi2m0gvQpm8rxcDqryl/of5N4zQBCCdGfUBbv7PuBK/taPAh30ABcPVsloFiaGjwZgaHmcNd/3QsCoDLJKSCBAT4/BmVQgCUeoZUYGSJU0PFeaHS8QBIqWDq8q6XH8aXJT6fG3oXSKN3ndd4YABVKoCLH9xRuHOEsg97gNGiwkYFxgTvFl2rGC/gUoCiApdhwREaO0Y7xhQAqeFAusOqwJVEwNIPeQDg5i73jgLJGl9aAXeWQvXzSbcHTNNZ6mlRRAFC3bulnyoBa1boL0iUv+goTHkpA04pwGhzS/0gs1yuKS0NYIcfVNd9iQnOVIXaTMnTUFi47lcBcK8AWSaovABREry7FQYGLD0JDg14laqWKABoklwQql6CspJWYoKMH6SUsCv48hKYmqTQu4S730FcooChHFwQVk53UiksBaD0CLTpmyfcEfzSEgDa5S8IdwW/BUBXgfZ8QPqHCdesYbn9bSUAKmEe35bgtynACWFb8NsBAOWwNfhbACgQtgd/GwCmT7gl+NsBXGrwPg2KOj533PJGqHKwK8719AD+Aby+uV/6QmnsAAAAAElFTkSuQmCC";
45
51
  }
@@ -1,8 +1,8 @@
1
- export abstract class BasicMouseHandler{
1
+ export abstract class BasicMouseHandler {
2
2
  /** 鼠标在屏幕上的坐标 */
3
- position = [0, 0]
3
+ position = [0, 0];
4
4
  /** 鼠标在地图上的坐标 */
5
- location = [0, 0, 0]
5
+ location = [0, 0, 0];
6
6
  /** 忽略要素,使要素不会拦截鼠标事件 */
7
- ignoreElement = false
7
+ ignoreElement = false;
8
8
  }
@@ -1,98 +1,98 @@
1
- import { ContextMenu } from "./ContextMenu";
2
- import { MapElement } from "./MapElement";
3
- import { MapEvent } from "./MapEvent";
4
- import { Point, PointOption } from "./Point";
5
- import { PointAggregation, PointAggregationOption } from "./PointAggregation";
6
- import { Polygon, PolygonOption } from "./Polygon";
7
- import { Polyline, PolylineOption } from "./Polyline";
8
- import { ReactPoint, ReactPointOption, drawReactPoint } from "./ReactPoint";
9
- import { Tile3D, Tile3DOption } from "./Tile3D";
10
- import { type BasicBusiness, type BasicBusinessOption } from "./BasicBusiness";
11
-
12
- import { getBounds } from "../utils/points-viewer";
13
-
14
- export abstract class MapCombine {
15
- /* 用于挂载html元素的根节点 */
16
- readonly htmllayer = document.createElement("div");
17
- readonly elements = new Map<string, MapElement>();
18
- readonly event = new MapEvent();
19
- readonly menu: ContextMenu;
20
- abstract get cursor(): string;
21
- abstract set cursor(val: string);
22
-
23
- abstract get moveable(): boolean;
24
- abstract set moveable(val: boolean);
25
-
26
- abstract get center(): number[];
27
- abstract set center(val);
28
-
29
- abstract get zoom(): number;
30
- abstract set zoom(val);
31
-
32
- loadPromise: Promise<this> = Promise.resolve(this);
33
-
34
- bussinesses = new Map<string, BasicBusiness<BasicBusinessOption>>();
35
-
36
- /** 地图是否存在 */
37
- isAlive = true;
38
- constructor() {
39
- const { htmllayer } = this;
40
- htmllayer.style.zIndex = "1000";
41
- htmllayer.style.position = "absolute";
42
- htmllayer.style.width = "0";
43
- htmllayer.style.height = "0";
44
- htmllayer.style.left = "0";
45
- htmllayer.style.top = "0";
46
- this.menu = new ContextMenu(this);
47
- (window as any).map = this;
48
- setTimeout(() => {
49
- this.bussinesses.forEach((e) => e.show && e.onMapLoaded?.());
50
- }, 100);
51
- }
52
-
53
- createReactPoint<K>(option?: Partial<ReactPointOption<K>>): ReactPoint<K> {
54
- const e = new ReactPoint(this, option);
55
- drawReactPoint(this, e);
56
- return e;
57
- }
58
-
59
- /**
60
- * 设置地图视图
61
- * @param option 视图参数
62
- * @param time 设置时间会动画形式调整视图
63
- */
64
- abstract createPoint<K>(option?: Partial<PointOption<K>>): Point<K>;
65
-
66
- /** 聚合点 */
67
- abstract createPointAggregation(option?: PointAggregationOption): PointAggregation;
68
-
69
- abstract createPolyline<K>(option?: Partial<PolylineOption<K>>): Polyline<K>;
70
-
71
- abstract createPolygon<K>(option?: Partial<PolygonOption<K>>): Polygon<K>;
72
-
73
- abstract createTile3D(option?: Partial<Tile3DOption>): Tile3D;
74
-
75
- abstract canvasTgeography(p: number[]): number[];
76
-
77
- abstract geographyTcanvas(p: number[]): number[];
78
-
79
- /**
80
- * 所有点位移动至视口,调整位置及层级
81
- * @param points
82
- */
83
- abstract flyToViewer(points: number[][], opt?: Object): void;
84
-
85
- /**
86
- * 移动点位到中心点
87
- * @param points
88
- */
89
- abstract flyTo(point: number[], opt?: Object): void;
90
-
91
- getBounds = getBounds;
92
-
93
- destroy() {
94
- this.isAlive = false;
95
- this.htmllayer.remove();
96
- this.event.trigger("destroy");
97
- }
98
- }
1
+ import { ContextMenu } from "./ContextMenu";
2
+ import { MapElement } from "./MapElement";
3
+ import { MapEvent } from "./MapEvent";
4
+ import { Point, PointOption } from "./Point";
5
+ import { PointAggregation, PointAggregationOption } from "./PointAggregation";
6
+ import { Polygon, PolygonOption } from "./Polygon";
7
+ import { Polyline, PolylineOption } from "./Polyline";
8
+ import { ReactPoint, ReactPointOption, drawReactPoint } from "./ReactPoint";
9
+ import { Tile3D, Tile3DOption } from "./Tile3D";
10
+ import { type BasicBusiness, type BasicBusinessOption } from "./BasicBusiness";
11
+
12
+ import { getBounds } from "../utils/points-viewer";
13
+
14
+ export abstract class MapCombine {
15
+ /* 用于挂载html元素的根节点 */
16
+ readonly htmllayer = document.createElement("div");
17
+ readonly elements = new Map<string, MapElement>();
18
+ readonly event = new MapEvent();
19
+ readonly menu: ContextMenu;
20
+ abstract get cursor(): string;
21
+ abstract set cursor(val: string);
22
+
23
+ abstract get moveable(): boolean;
24
+ abstract set moveable(val: boolean);
25
+
26
+ abstract get center(): number[];
27
+ abstract set center(val);
28
+
29
+ abstract get zoom(): number;
30
+ abstract set zoom(val);
31
+
32
+ loadPromise: Promise<this> = Promise.resolve(this);
33
+
34
+ bussinesses = new Map<string, BasicBusiness<BasicBusinessOption>>();
35
+
36
+ /** 地图是否存在 */
37
+ isAlive = true;
38
+ constructor() {
39
+ const { htmllayer } = this;
40
+ htmllayer.style.zIndex = "1000";
41
+ htmllayer.style.position = "absolute";
42
+ htmllayer.style.width = "0";
43
+ htmllayer.style.height = "0";
44
+ htmllayer.style.left = "0";
45
+ htmllayer.style.top = "0";
46
+ this.menu = new ContextMenu(this);
47
+ (window as any).map = this;
48
+ setTimeout(() => {
49
+ this.bussinesses.forEach((e) => e.show && e.onMapLoaded?.());
50
+ }, 100);
51
+ }
52
+
53
+ createReactPoint<K>(option?: Partial<ReactPointOption<K>>): ReactPoint<K> {
54
+ const e = new ReactPoint(this, option);
55
+ drawReactPoint(this, e);
56
+ return e;
57
+ }
58
+
59
+ /**
60
+ * 设置地图视图
61
+ * @param option 视图参数
62
+ * @param time 设置时间会动画形式调整视图
63
+ */
64
+ abstract createPoint<K>(option?: Partial<PointOption<K>>): Point<K>;
65
+
66
+ /** 聚合点 */
67
+ abstract createPointAggregation(option?: PointAggregationOption): PointAggregation;
68
+
69
+ abstract createPolyline<K>(option?: Partial<PolylineOption<K>>): Polyline<K>;
70
+
71
+ abstract createPolygon<K>(option?: Partial<PolygonOption<K>>): Polygon<K>;
72
+
73
+ abstract createTile3D(option?: Partial<Tile3DOption>): Tile3D;
74
+
75
+ abstract canvasTgeography(p: number[]): number[];
76
+
77
+ abstract geographyTcanvas(p: number[]): number[];
78
+
79
+ /**
80
+ * 所有点位移动至视口,调整位置及层级
81
+ * @param points
82
+ */
83
+ abstract flyToViewer(points: number[][], opt?: Object): void;
84
+
85
+ /**
86
+ * 移动点位到中心点
87
+ * @param points
88
+ */
89
+ abstract flyTo(point: number[], opt?: Object): void;
90
+
91
+ getBounds = getBounds;
92
+
93
+ destroy() {
94
+ this.isAlive = false;
95
+ this.htmllayer.remove();
96
+ this.event.trigger("destroy");
97
+ }
98
+ }