@hzab/map-combine 0.3.0-beta → 0.3.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,42 +1,49 @@
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
- container.addEventListener("mousedown", (e) => {
20
- event.trigger("pointer-down");
21
- });
22
-
23
- container.addEventListener("mouseup", (e) => {
24
- event.trigger("pointer-up");
25
- });
26
-
27
- viewer.on("mousemove", () => {
28
- event.trigger("pointer-move");
29
- });
30
-
31
- viewer.on("mapmove", () => {
32
- event.trigger("view-change");
33
- });
34
-
35
- viewer.on("click", (e) => {
36
- event.trigger("left-click");
37
- });
38
-
39
- viewer.on("dblclick", (e) => {
40
- map.event.trigger("double-click");
41
- });
42
- }
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
+ container.addEventListener("mousedown", (e) => {
20
+ event.trigger("pointer-down");
21
+ });
22
+
23
+ container.addEventListener("mouseup", (e) => {
24
+ event.trigger("pointer-up");
25
+ });
26
+
27
+ // 解决 ReactPoint 点击事件无法触发的问题
28
+ container.addEventListener("click", (e) => {
29
+ event.trigger("left-click");
30
+ });
31
+
32
+ viewer.on("mousemove", (e) => {
33
+ event.trigger("pointer-move");
34
+ event.canvas = [e.pixel.x, e.pixel.y];
35
+ event.geography = [e.lnglat.lng, e.lnglat.lat];
36
+ });
37
+
38
+ viewer.on("mapmove", () => {
39
+ event.trigger("view-change");
40
+ });
41
+
42
+ viewer.on("click", (e) => {
43
+ event.trigger("left-click");
44
+ });
45
+
46
+ viewer.on("dblclick", (e) => {
47
+ map.event.trigger("double-click");
48
+ });
49
+ }
@@ -13,7 +13,6 @@ export function drawPolygon(map: AMap, polygon: Polygon<unknown>) {
13
13
  cursor: polygon.cursor,
14
14
  silent: polygon.silent,
15
15
  onPointerIn() {
16
- console.log("onPointerIn", status);
17
16
  status == 2 && polygon.event.trigger("pointer-in");
18
17
  },
19
18
  onPointerOut() {
@@ -13,7 +13,6 @@ export function drawPolyline(map: AMap, polyline: Polyline<unknown>) {
13
13
  cursor: polyline.cursor,
14
14
  silent: polyline.silent,
15
15
  onPointerIn() {
16
- console.log("onPointerIn", status);
17
16
  status == 2 && polyline.event.trigger("pointer-in");
18
17
  },
19
18
  onPointerOut() {
@@ -69,7 +68,7 @@ export function drawPolyline(map: AMap, polyline: Polyline<unknown>) {
69
68
  bindEvent(target);
70
69
  // polygon.event.trigger("data-loaded");
71
70
  });
72
-
71
+
73
72
  if (polyline.coordinates) {
74
73
  status = 2;
75
74
  target = new LbsAMap.Polyline({
@@ -1,92 +1,94 @@
1
- import { ContextMenu } from "./ContextMenu";
2
- import { MapElement } from "./MapElement";
3
- import { MapEvent } from "./MapEvent";
4
- import { Point, PointOption } from "./Point";
5
- import { Polygon, PolygonOption } from "./Polygon";
6
- import { Polyline, PolylineOption } from "./Polyline";
7
- import { ReactPoint, ReactPointOption, drawReactPoint } from "./ReactPoint";
8
- import { Tile3D, Tile3DOption } from "./Tile3D";
9
- import { type BasicBusiness, type BasicBusinessOption } from "./BasicBusiness";
10
-
11
- import { getBounds } from "../utils/points-viewer";
12
-
13
- export abstract class MapCombine {
14
- /* 用于挂载html元素的根节点 */
15
- readonly htmllayer = document.createElement("div");
16
- readonly elements = new Map<string, MapElement>();
17
- readonly event = new MapEvent();
18
- readonly menu: ContextMenu;
19
- abstract get cursor(): string;
20
- abstract set cursor(val: string);
21
-
22
- abstract get moveable(): boolean;
23
- abstract set moveable(val: boolean);
24
-
25
- abstract get center(): number[];
26
- abstract set center(val);
27
-
28
- abstract get zoom(): number;
29
- abstract set zoom(val);
30
-
31
- bussinesses = new Map<string, BasicBusiness<BasicBusinessOption>>();
32
-
33
- /** 地图是否存在 */
34
- isAlive = true;
35
- constructor() {
36
- const { htmllayer } = this;
37
- htmllayer.style.zIndex = "1000";
38
- htmllayer.style.position = "absolute";
39
- htmllayer.style.width = "0";
40
- htmllayer.style.height = "0";
41
- htmllayer.style.left = "0";
42
- htmllayer.style.top = "0";
43
- this.menu = new ContextMenu(this);
44
- (window as any).map = this;
45
- setTimeout(() => {
46
- this.bussinesses.forEach((e) => e.show && e.onMapLoaded?.());
47
- }, 100);
48
- }
49
-
50
- createReactPoint<K>(option?: Partial<ReactPointOption<K>>): ReactPoint<K> {
51
- const e = new ReactPoint(this, option);
52
- drawReactPoint(this, e);
53
- return e;
54
- }
55
-
56
- /**
57
- * 设置地图视图
58
- * @param option 视图参数
59
- * @param time 设置时间会动画形式调整视图
60
- */
61
- abstract createPoint<K>(option?: Partial<PointOption<K>>): Point<K>;
62
-
63
- abstract createPolyline<K>(option?: Partial<PolylineOption<K>>): Polyline<K>;
64
-
65
- abstract createPolygon<K>(option?: Partial<PolygonOption<K>>): Polygon<K>;
66
-
67
- abstract createTile3D(option?: Partial<Tile3DOption>): Tile3D;
68
-
69
- abstract canvasTgeography(p: number[]): number[];
70
-
71
- abstract geographyTcanvas(p: number[]): number[];
72
-
73
- /**
74
- * 所有点位移动至视口,调整位置及层级
75
- * @param points
76
- */
77
- abstract flyToViewer(points: number[][], opt?: Object): void;
78
-
79
- /**
80
- * 移动点位到中心点
81
- * @param points
82
- */
83
- abstract flyTo(point: number[], opt?: Object): void;
84
-
85
- getBounds = getBounds;
86
-
87
- destroy() {
88
- this.isAlive = false;
89
- this.htmllayer.remove();
90
- this.event.trigger("destroy");
91
- }
92
- }
1
+ import { ContextMenu } from "./ContextMenu";
2
+ import { MapElement } from "./MapElement";
3
+ import { MapEvent } from "./MapEvent";
4
+ import { Point, PointOption } from "./Point";
5
+ import { Polygon, PolygonOption } from "./Polygon";
6
+ import { Polyline, PolylineOption } from "./Polyline";
7
+ import { ReactPoint, ReactPointOption, drawReactPoint } from "./ReactPoint";
8
+ import { Tile3D, Tile3DOption } from "./Tile3D";
9
+ import { type BasicBusiness, type BasicBusinessOption } from "./BasicBusiness";
10
+
11
+ import { getBounds } from "../utils/points-viewer";
12
+
13
+ export abstract class MapCombine {
14
+ /* 用于挂载html元素的根节点 */
15
+ readonly htmllayer = document.createElement("div");
16
+ readonly elements = new Map<string, MapElement>();
17
+ readonly event = new MapEvent();
18
+ readonly menu: ContextMenu;
19
+ abstract get cursor(): string;
20
+ abstract set cursor(val: string);
21
+
22
+ abstract get moveable(): boolean;
23
+ abstract set moveable(val: boolean);
24
+
25
+ abstract get center(): number[];
26
+ abstract set center(val);
27
+
28
+ abstract get zoom(): number;
29
+ abstract set zoom(val);
30
+
31
+ loadPromise: Promise<this> = Promise.resolve(this);
32
+
33
+ bussinesses = new Map<string, BasicBusiness<BasicBusinessOption>>();
34
+
35
+ /** 地图是否存在 */
36
+ isAlive = true;
37
+ constructor() {
38
+ const { htmllayer } = this;
39
+ htmllayer.style.zIndex = "1000";
40
+ htmllayer.style.position = "absolute";
41
+ htmllayer.style.width = "0";
42
+ htmllayer.style.height = "0";
43
+ htmllayer.style.left = "0";
44
+ htmllayer.style.top = "0";
45
+ this.menu = new ContextMenu(this);
46
+ (window as any).map = this;
47
+ setTimeout(() => {
48
+ this.bussinesses.forEach((e) => e.show && e.onMapLoaded?.());
49
+ }, 100);
50
+ }
51
+
52
+ createReactPoint<K>(option?: Partial<ReactPointOption<K>>): ReactPoint<K> {
53
+ const e = new ReactPoint(this, option);
54
+ drawReactPoint(this, e);
55
+ return e;
56
+ }
57
+
58
+ /**
59
+ * 设置地图视图
60
+ * @param option 视图参数
61
+ * @param time 设置时间会动画形式调整视图
62
+ */
63
+ abstract createPoint<K>(option?: Partial<PointOption<K>>): Point<K>;
64
+
65
+ abstract createPolyline<K>(option?: Partial<PolylineOption<K>>): Polyline<K>;
66
+
67
+ abstract createPolygon<K>(option?: Partial<PolygonOption<K>>): Polygon<K>;
68
+
69
+ abstract createTile3D(option?: Partial<Tile3DOption>): Tile3D;
70
+
71
+ abstract canvasTgeography(p: number[]): number[];
72
+
73
+ abstract geographyTcanvas(p: number[]): number[];
74
+
75
+ /**
76
+ * 所有点位移动至视口,调整位置及层级
77
+ * @param points
78
+ */
79
+ abstract flyToViewer(points: number[][], opt?: Object): void;
80
+
81
+ /**
82
+ * 移动点位到中心点
83
+ * @param points
84
+ */
85
+ abstract flyTo(point: number[], opt?: Object): void;
86
+
87
+ getBounds = getBounds;
88
+
89
+ destroy() {
90
+ this.isAlive = false;
91
+ this.htmllayer.remove();
92
+ this.event.trigger("destroy");
93
+ }
94
+ }
@@ -169,6 +169,7 @@ export class ReactPoint<K = undefined> extends MapElement<ReactPointOption<K>> {
169
169
 
170
170
  export function drawReactPoint(map: MapCombine, point: ReactPoint<unknown>) {
171
171
  const { event, htmllayer } = map;
172
+ /** 当前点位的状态 0:初始态 1:编辑态 2:显示态 3:拖动态 */
172
173
  let status = 0;
173
174
  let skip = 0;
174
175
 
@@ -1,80 +1,84 @@
1
- import { CesiumMap } from "./CesiumMap";
2
-
3
- export function bindEvent(map: CesiumMap) {
4
- const { event, viewer, container } = map;
5
- viewer.camera.percentageChanged = 0.0001;
6
-
7
- viewer.scene.preRender.addEventListener(() => {
8
- event.trigger("view-preRender");
9
- });
10
-
11
- viewer.camera.changed.addEventListener(() => {
12
- event.trigger("view-change");
13
- });
14
- viewer.camera.moveEnd.addEventListener(() => {
15
- event.trigger("view-moveEnd");
16
- });
17
- const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
18
- let target: any;
19
- handler.setInputAction((e: any) => {
20
- event.canvas = [e.endPosition.x, e.endPosition.y];
21
- event.geography = map.canvasTgeography(event.canvas);
22
- let _target: any = undefined;
23
- const res = viewer.scene.pick(e.endPosition);
24
- const a = res ? (res.id ? res.id : res.primitive ? res.primitive : undefined) : undefined;
25
-
26
- if (a && !a.silent) {
27
- _target = a;
28
- }
29
- if (_target !== target) {
30
- target?.onPointerOut?.();
31
- _target?.onPointerIn?.();
32
- target = _target;
33
- }
34
-
35
- if (target) {
36
- map.cursor = target.cursor;
37
- } else {
38
- map.cursor = "";
39
- }
40
- event.trigger("pointer-move");
41
- }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
42
-
43
- handler.setInputAction(() => {
44
- if (target) {
45
- target.onPointerDown?.();
46
- }
47
- event.trigger("pointer-down");
48
- }, Cesium.ScreenSpaceEventType.LEFT_DOWN);
49
-
50
- container.addEventListener("pointerup", () => {
51
- if (target) {
52
- target.onPointerUp?.();
53
- }
54
- event.trigger("pointer-up");
55
- });
56
-
57
- handler.setInputAction((e) => {
58
- if (target) {
59
- target.onLClick?.();
60
- }
61
- event.trigger("left-click");
62
- }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
63
- handler.setInputAction(() => {
64
- if (target) {
65
- target.onRClick?.();
66
- }
67
- event.trigger("right-click");
68
- }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
69
-
70
- handler.setInputAction(() => {
71
- if (target) {
72
- target.onDbClick?.();
73
- }
74
- event.trigger("double-click");
75
- }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
76
-
77
- event.on("destroy", () => {
78
- viewer.destroy();
79
- });
80
- }
1
+ import { CesiumMap } from "./CesiumMap";
2
+
3
+ export function bindEvent(map: CesiumMap) {
4
+ const { event, viewer, container } = map;
5
+ viewer.camera.percentageChanged = 0.0001;
6
+
7
+ viewer.scene.preRender.addEventListener(() => {
8
+ event.trigger("view-preRender");
9
+ });
10
+
11
+ viewer.camera.changed.addEventListener(() => {
12
+ event.trigger("view-change");
13
+ });
14
+ viewer.camera.moveEnd.addEventListener(() => {
15
+ event.trigger("view-moveEnd");
16
+ });
17
+ const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
18
+ let target: any;
19
+ handler.setInputAction((e: any) => {
20
+ event.canvas = [e.endPosition.x, e.endPosition.y];
21
+ event.geography = map.canvasTgeography(event.canvas);
22
+ let _target: any = undefined;
23
+ const res = viewer.scene.pick(e.endPosition);
24
+ const a = res ? (res.id ? res.id : res.primitive ? res.primitive : undefined) : undefined;
25
+
26
+ if (a && !a.silent) {
27
+ _target = a;
28
+ }
29
+ if (_target !== target) {
30
+ target?.onPointerOut?.();
31
+ _target?.onPointerIn?.();
32
+ target = _target;
33
+ }
34
+
35
+ if (target) {
36
+ map.cursor = target.cursor;
37
+ } else {
38
+ map.cursor = "";
39
+ }
40
+ event.trigger("pointer-move");
41
+ }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
42
+
43
+ handler.setInputAction(() => {
44
+ if (target) {
45
+ target.onPointerDown?.();
46
+ }
47
+ event.trigger("pointer-down");
48
+ }, Cesium.ScreenSpaceEventType.LEFT_DOWN);
49
+
50
+ // 解决 ReactPoint 点击事件无法触发的问题
51
+ container.addEventListener("click", () => {
52
+ event.trigger("left-click");
53
+ });
54
+ container.addEventListener("pointerup", () => {
55
+ if (target) {
56
+ target.onPointerUp?.();
57
+ }
58
+ event.trigger("pointer-up");
59
+ });
60
+
61
+ handler.setInputAction((e) => {
62
+ if (target) {
63
+ target.onLClick?.();
64
+ }
65
+ event.trigger("left-click");
66
+ }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
67
+ handler.setInputAction(() => {
68
+ if (target) {
69
+ target.onRClick?.();
70
+ }
71
+ event.trigger("right-click");
72
+ }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
73
+
74
+ handler.setInputAction(() => {
75
+ if (target) {
76
+ target.onDbClick?.();
77
+ }
78
+ event.trigger("double-click");
79
+ }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
80
+
81
+ event.on("destroy", () => {
82
+ viewer.destroy();
83
+ });
84
+ }
@@ -166,7 +166,6 @@ export class CesiumMap extends MapCombine {
166
166
  private _createLayer() {
167
167
  const { url, subdomains, proj, minZoomLevel, maxZoomLevel } = this.option;
168
168
  let layer: any;
169
- console.log("url", url);
170
169
  let options = {
171
170
  ...this.option,
172
171
  };