@hzab/map-combine 0.4.2-alpha.0 → 0.4.2-alpha.11

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.
Files changed (37) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/package.json +5 -5
  3. package/src/amap/AMap.ts +313 -306
  4. package/src/amap/AMapEvent.ts +110 -54
  5. package/src/amap/AMapPoint.ts +140 -143
  6. package/src/amap/AMapPolygon.ts +214 -195
  7. package/src/amap/AMapPolyline.ts +199 -185
  8. package/src/basic/BasicBusiness.ts +5 -5
  9. package/src/basic/BasicModel.ts +49 -0
  10. package/src/basic/MapCombine.ts +4 -0
  11. package/src/basic/MapElement.ts +2 -1
  12. package/src/basic/MapEvent.ts +5 -0
  13. package/src/basic/Point.ts +1 -0
  14. package/src/basic/PointAggregation.tsx +23 -11
  15. package/src/basic/ReactPopup.tsx +3 -0
  16. package/src/cesium/CesiumEvent.ts +97 -84
  17. package/src/cesium/CesiumMap.ts +355 -347
  18. package/src/cesium/CesiumModel.ts +64 -0
  19. package/src/cesium/CesiumPoint.ts +3 -0
  20. package/src/cesium/CesiumPolygon.ts +2 -0
  21. package/src/cesium/CesiumPolyline.ts +185 -47
  22. package/src/cesium/CesiumTile3D.ts +222 -225
  23. package/src/mine/MineEvent.ts +70 -46
  24. package/src/mine/MineMap.ts +52 -1
  25. package/src/mine/MinePoint.ts +7 -1
  26. package/src/mine/MinePolygon.ts +6 -1
  27. package/src/mine/MinePolyline.ts +6 -1
  28. package/src/openlayer/OpenlayerEvent.ts +109 -87
  29. package/src/openlayer/OpenlayerMap.ts +287 -287
  30. package/src/openlayer/OpenlayerPoint.ts +6 -1
  31. package/src/openlayer/OpenlayerPolygon.ts +34 -24
  32. package/src/openlayer/OpenlayerPolyline.ts +10 -3
  33. package/src/utils/color.ts +49 -0
  34. package/src/utils/index.ts +3 -0
  35. package/src/utils/points-viewer.ts +27 -1
  36. package/src/utils/turfjs-utils.ts +52 -0
  37. package/src/utils/types.d.ts +12 -0
@@ -28,10 +28,16 @@ export function drawPoint(map: MineMap, point: Point<unknown>) {
28
28
  };
29
29
 
30
30
  const marker = new minemap.Marker({
31
+ id: point.name,
31
32
  draggable: point.editable,
32
33
  rotation: 0,
33
34
  offset: [-size[0] * center[0], -size[1] * center[1]],
34
35
  element: img,
36
+ extData: {
37
+ name: point.name,
38
+ target: point,
39
+ userdata: point.userdata,
40
+ },
35
41
  });
36
42
 
37
43
  if (point.coordinates) {
@@ -69,7 +75,7 @@ export function drawPoint(map: MineMap, point: Point<unknown>) {
69
75
  break;
70
76
  case "coordinates":
71
77
  if (point.coordinates) {
72
- marker.setLngLat(point.coordinates).setAltitude(point.coordinates[2] ?? 0);
78
+ marker.setLngLat(point.coordinates).setAltitude(point.coordinates[2] ?? point.height);
73
79
  switch (status) {
74
80
  case 0:
75
81
  point.show && marker.addTo(map.viewer);
@@ -50,6 +50,7 @@ function getPolygonOption(polygon: Polygon<unknown>) {
50
50
  "fill-color": color,
51
51
  "fill-opacity": opacity,
52
52
  },
53
+ zIndex: polygon.coordinates[0]?.[2] ?? polygon.height,
53
54
  };
54
55
  }
55
56
 
@@ -148,11 +149,15 @@ function main(map: MineMap, polygon: Polygon<unknown>) {
148
149
  type: "Feature",
149
150
  geometry: {
150
151
  type: "Polygon",
151
- coordinates: [[...coordinates, coordinates[0]]],
152
+ coordinates: [[...coordinates, coordinates[0]].map((it) => [it[0], it[1], it[2] ?? polygon.height])],
152
153
  },
153
154
  properties: {
154
155
  id: polygon.name,
155
156
  },
157
+ extData: {
158
+ name: polygon.name,
159
+ userdata: polygon.userdata,
160
+ },
156
161
  };
157
162
  } else {
158
163
  data.features = [];
@@ -56,6 +56,7 @@ function getLayerOption(polyline: Polyline<unknown>) {
56
56
  "line-color": polyline.stroke,
57
57
  "line-width": polyline.lineWidth,
58
58
  },
59
+ zIndex: polyline.coordinates[0]?.[2] ?? polyline.height,
59
60
  };
60
61
  }
61
62
 
@@ -130,10 +131,14 @@ function main(map: MineMap, polyline: Polyline<unknown>) {
130
131
  type: "Feature",
131
132
  geometry: {
132
133
  type: "LineString",
133
- coordinates: coordinates,
134
+ coordinates: coordinates?.map((it) => [it[0], it[1], it[2] ?? polyline.height]),
134
135
  },
135
136
  properties: {
136
137
  id: polyline.name,
138
+ extData: {
139
+ name: polyline.name,
140
+ userdata: polyline.userdata,
141
+ },
137
142
  },
138
143
  };
139
144
  } else {
@@ -1,87 +1,109 @@
1
- import { OpenlayerMap } from "./OpenlayerMap";
2
-
3
- export function bindEvent(map: OpenlayerMap) {
4
- const { event, viewer, container } = map;
5
- let target: any;
6
- let moving = false;
7
-
8
- const frame = () => {
9
- if (map.isAlive) {
10
- requestAnimationFrame(frame);
11
- event.trigger("view-preRender");
12
- }
13
- };
14
- frame();
15
-
16
- viewer.on("moveend", (e) => {
17
- event.trigger("view-moveEnd");
18
- });
19
-
20
- viewer.on("pointermove", (e) => {
21
- event.canvas = e.pixel;
22
- event.geography = map.canvasTgeography(event.canvas);
23
- let _target: any;
24
- if (moving) {
25
- event.trigger("pointer-move");
26
- return;
27
- }
28
- const res = viewer.getFeaturesAtPixel(event.canvas)[0];
29
- _target = res ? res.get("event") : undefined;
30
- if (_target?.silent) {
31
- _target = undefined;
32
- }
33
- if (_target !== target) {
34
- target?.onPointerOut?.();
35
- _target?.onPointerIn?.();
36
- target = _target;
37
- }
38
- event.trigger("pointer-move");
39
- });
40
-
41
- container.addEventListener("mousedown", () => {
42
- if (target) {
43
- moving = true;
44
- target.onPointerDown?.();
45
- }
46
- event.trigger("pointer-down");
47
- });
48
-
49
- container.addEventListener("mouseup", () => {
50
- if (target) {
51
- moving = false;
52
- target.onPointerUp?.();
53
- }
54
- event.trigger("pointer-up");
55
- });
56
-
57
- container.addEventListener("contextmenu", (e) => {
58
- e.preventDefault();
59
- if (target) {
60
- target.onRClick?.();
61
- }
62
- });
63
-
64
- viewer.on("click", () => {
65
- if (target) {
66
- target.onLClick?.();
67
- }
68
- event.trigger("left-click");
69
- });
70
-
71
- viewer.on("dblclick", () => {
72
- if (target) {
73
- target.onDbClick?.();
74
- }
75
- map.event.trigger("double-click");
76
- });
77
-
78
- let key = 0;
79
-
80
- viewer.on("precompose", () => {
81
- const _key = map.center.reduce((a, b) => a + b, map.zoom);
82
- if (key != _key) {
83
- key = _key;
84
- event.trigger("view-change");
85
- }
86
- });
87
- }
1
+ import { OpenlayerMap } from "./OpenlayerMap";
2
+
3
+ export function bindEvent(map: OpenlayerMap) {
4
+ const { event, viewer, container } = map;
5
+ let target: any;
6
+ let moving = false;
7
+
8
+ const frame = () => {
9
+ if (map.isAlive) {
10
+ requestAnimationFrame(frame);
11
+ event.trigger("view-preRender");
12
+ map.bussinesses.forEach((e) => e.show && e.onFrame?.());
13
+ }
14
+ };
15
+ frame();
16
+
17
+ viewer.on("moveend", (e) => {
18
+ event.trigger("view-moveEnd");
19
+ });
20
+
21
+ viewer.on("pointermove", (e) => {
22
+ event.canvas = e.pixel;
23
+ event.geography = map.canvasTgeography(event.canvas);
24
+ let _target: any;
25
+ if (moving) {
26
+ event.trigger("pointer-move");
27
+ return;
28
+ }
29
+ const res = viewer.getFeaturesAtPixel(event.canvas)[0];
30
+ _target = res ? res.get("event") : undefined;
31
+ if (_target?.silent) {
32
+ _target = undefined;
33
+ }
34
+ if (_target !== target) {
35
+ target?.onPointerOut?.();
36
+ _target?.onPointerIn?.();
37
+ target = _target;
38
+ }
39
+ event.trigger("pointer-move");
40
+ });
41
+
42
+ container.addEventListener("mousedown", () => {
43
+ if (target) {
44
+ moving = true;
45
+ target.onPointerDown?.();
46
+ }
47
+ event.trigger("pointer-down");
48
+ });
49
+
50
+ container.addEventListener("mouseup", () => {
51
+ if (target) {
52
+ moving = false;
53
+ target.onPointerUp?.();
54
+ }
55
+ event.trigger("pointer-up");
56
+ });
57
+
58
+ container.addEventListener("contextmenu", (e) => {
59
+ e.preventDefault();
60
+ if (target) {
61
+ target.onRClick?.();
62
+ }
63
+ });
64
+
65
+ viewer.on("click", () => {
66
+ if (target) {
67
+ target.onLClick?.();
68
+ }
69
+ event.trigger("left-click");
70
+ });
71
+
72
+ // 监听地图的单击事件
73
+ viewer.on("singleclick", function (e) {
74
+ // 使用 forEachFeatureAtPixel 查询该像素位置下的所有要素
75
+ const pickedObjects = [];
76
+ viewer.forEachFeatureAtPixel(e.pixel, function (feature, layer) {
77
+ // 这个回调函数会为每一个被点击到的要素执行
78
+ pickedObjects.push(feature);
79
+ // 返回 true 可以提前终止遍历
80
+ // return true;
81
+ });
82
+
83
+ if (pickedObjects.length > 0) {
84
+ event.trigger("drill-pick", {
85
+ event: e,
86
+ pickedTargets: pickedObjects.map((it) => it?.values_?.userData?.target),
87
+ sourceObjects: pickedObjects,
88
+ position: map.canvasTgeography(e.pixel),
89
+ });
90
+ }
91
+ });
92
+
93
+ viewer.on("dblclick", () => {
94
+ if (target) {
95
+ target.onDbClick?.();
96
+ }
97
+ map.event.trigger("double-click");
98
+ });
99
+
100
+ let key = 0;
101
+
102
+ viewer.on("precompose", () => {
103
+ const _key = map.center.reduce((a, b) => a + b, map.zoom);
104
+ if (key != _key) {
105
+ key = _key;
106
+ event.trigger("view-change");
107
+ }
108
+ });
109
+ }