@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.
@@ -1,177 +1,177 @@
1
- import { Point } from "../basic/Point";
2
- import { OpenlayerMap } from "./OpenlayerMap";
3
- import Feature from 'ol/Feature.js'
4
- import OlPoint from 'ol/geom/Point.js'
5
- import { Icon, Style } from 'ol/style.js'
6
- import { fromLonLat } from "ol/proj";
7
- import VectorSource from "ol/source/Vector";
8
- import VectorLayer from "ol/layer/Vector";
9
- const RD = 0.017453292519943295
10
-
11
- export function drawPoint(map: OpenlayerMap, point: Point<unknown>) {
12
- const { viewer, event, getFromLonLat, isFromLonLat } = map
13
- let status = 0
14
-
15
- const source = new VectorSource();
16
- const layer = new VectorLayer({
17
- source,
18
- visible: point.show
19
- })
20
- viewer.addLayer(layer)
21
- const feature = new Feature()
22
- const geometry = new OlPoint([0, 0])
23
- const style = new Style({
24
- image: new Icon({
25
- width: point.size[0],
26
- height: point.size[1],
27
- src: point.src,
28
- rotation: point.rotation * RD,
29
- anchor: point.center,
30
- crossOrigin: 'anonymous'
31
- })
32
- });
33
-
34
- const _event = {
35
- cursor: point.cursor,
36
- silent: point.silent,
37
- onPointerIn() {
38
- point.event.trigger('pointer-in')
39
- },
40
- onPointerOut() {
41
- point.event.trigger('pointer-out')
42
- },
43
- onLClick() {
44
- point.event.trigger('left-click')
45
- },
46
- onRClick() {
47
- point.event.trigger('right-click')
48
- },
49
- onPointerDown() {
50
- if (point.editable && status == 2) {
51
- status = 3
52
- map.moveable = false
53
- }
54
- },
55
- onPointerUp() {
56
- if (point.editable && status == 3) {
57
- status = 2;
58
- map.moveable = true;
59
- point.coordinates = [event.geography[0], event.geography[1], point.height];
60
- point.event.trigger('data-update')
61
- }
62
- }
63
- }
64
-
65
- feature.setGeometry(geometry)
66
- feature.setStyle(style)
67
- feature.set('event', _event, true)
68
- if (point.coordinates) {
69
- status = 2
70
- geometry.setCoordinates(getFromLonLat(point.coordinates, isFromLonLat))
71
- layer.setZIndex(point.coordinates[2] ?? 1)
72
- point.event.trigger('data-loaded')
73
- source.addFeature(feature)
74
- }
75
-
76
-
77
- const onUpdate = (e: Set<string>) => {
78
- const keys = new Set()
79
- e.forEach(key => {
80
- switch (key) {
81
- case 'show':
82
- if (status) {
83
- layer.setVisible(point.show)
84
- }
85
- break;
86
- case 'editable':
87
- break;
88
- case 'coordinates':
89
- if (point.coordinates) {
90
- geometry.setCoordinates(getFromLonLat(point.coordinates, isFromLonLat))
91
- layer.setZIndex(point.coordinates[2])
92
- switch (status) {
93
- case 0:
94
- source.addFeature(feature)
95
- status = 2;
96
- break;
97
- case 1:
98
- status = 2;
99
- break;
100
- }
101
- } else {
102
- source.removeFeature(feature)
103
- status = 0
104
- }
105
- break;
106
- case 'src':
107
- keys.add('icon')
108
- break;
109
- case 'size':
110
- keys.add('icon')
111
- break;
112
- case 'center':
113
- keys.add('icon')
114
- break;
115
- case 'rotation':
116
- keys.add('icon')
117
- break;
118
- default:
119
- throw new Error(`${key} 还不支持修改`)
120
- }
121
- })
122
-
123
- keys.forEach(e => {
124
- switch (e) {
125
- case 'icon':
126
- style.setImage(new Icon({
127
- width: point.size[0],
128
- height: point.size[1],
129
- src: point.src,
130
- rotation: point.rotation * RD,
131
- anchor: point.center,
132
- crossOrigin: 'anonymous'
133
- }))
134
- break;
135
- }
136
- })
137
- feature.changed()
138
- }
139
-
140
- const onMouseMove = () => {
141
- const coordinates = [event.geography[0], event.geography[1], point.height];
142
- switch (status) {
143
- case 0:
144
- status = 1
145
- geometry.setCoordinates(getFromLonLat(coordinates, isFromLonLat))
146
- source.addFeature(feature)
147
- break;
148
- case 1:
149
- case 3:
150
- geometry.setCoordinates(getFromLonLat(coordinates, isFromLonLat))
151
- break
152
- }
153
- }
154
-
155
- const onClick = () => {
156
- if (status == 1) {
157
- status = 2
158
- point.coordinates = [event.geography[0], event.geography[1], point.height];
159
- point.event.trigger('pointer-in')
160
- }
161
- }
162
-
163
-
164
- const onDestroy = () => {
165
- source.removeFeature(feature)
166
- event.off('pointer-move', onMouseMove)
167
- event.off('left-click', onClick)
168
- point.event.off('update', onUpdate)
169
- point.event.off('destroy', onDestroy)
170
-
171
- }
172
-
173
- event.on('pointer-move', onMouseMove)
174
- event.on('left-click', onClick)
175
- point.event.on('update', onUpdate)
176
- point.event.on('destroy', onDestroy)
1
+ import { Point } from "../basic/Point";
2
+ import { OpenlayerMap } from "./OpenlayerMap";
3
+ import Feature from 'ol/Feature.js'
4
+ import OlPoint from 'ol/geom/Point.js'
5
+ import { Icon, Style } from 'ol/style.js'
6
+ import { fromLonLat } from "ol/proj";
7
+ import VectorSource from "ol/source/Vector";
8
+ import VectorLayer from "ol/layer/Vector";
9
+ const RD = 0.017453292519943295
10
+
11
+ export function drawPoint(map: OpenlayerMap, point: Point<unknown>) {
12
+ const { viewer, event, getFromLonLat, isFromLonLat } = map
13
+ let status = 0
14
+
15
+ const source = new VectorSource();
16
+ const layer = new VectorLayer({
17
+ source,
18
+ visible: point.show
19
+ })
20
+ viewer.addLayer(layer)
21
+ const feature = new Feature()
22
+ const geometry = new OlPoint([0, 0])
23
+ const style = new Style({
24
+ image: new Icon({
25
+ width: point.size[0],
26
+ height: point.size[1],
27
+ src: point.src,
28
+ rotation: point.rotation * RD,
29
+ anchor: point.center,
30
+ crossOrigin: 'anonymous'
31
+ })
32
+ });
33
+
34
+ const _event = {
35
+ cursor: point.cursor,
36
+ silent: point.silent,
37
+ onPointerIn() {
38
+ point.event.trigger('pointer-in')
39
+ },
40
+ onPointerOut() {
41
+ point.event.trigger('pointer-out')
42
+ },
43
+ onLClick() {
44
+ point.event.trigger('left-click')
45
+ },
46
+ onRClick() {
47
+ point.event.trigger('right-click')
48
+ },
49
+ onPointerDown() {
50
+ if (point.editable && status == 2) {
51
+ status = 3
52
+ map.moveable = false
53
+ }
54
+ },
55
+ onPointerUp() {
56
+ if (point.editable && status == 3) {
57
+ status = 2;
58
+ map.moveable = true;
59
+ point.coordinates = [event.geography[0], event.geography[1], point.height];
60
+ point.event.trigger('data-update')
61
+ }
62
+ }
63
+ }
64
+
65
+ feature.setGeometry(geometry)
66
+ feature.setStyle(style)
67
+ feature.set('event', _event, true)
68
+ if (point.coordinates) {
69
+ status = 2
70
+ geometry.setCoordinates(getFromLonLat(point.coordinates, isFromLonLat))
71
+ layer.setZIndex(point.coordinates[2] ?? 1)
72
+ point.event.trigger('data-loaded')
73
+ source.addFeature(feature)
74
+ }
75
+
76
+
77
+ const onUpdate = (e: Set<string>) => {
78
+ const keys = new Set()
79
+ e.forEach(key => {
80
+ switch (key) {
81
+ case 'show':
82
+ if (status) {
83
+ layer.setVisible(point.show)
84
+ }
85
+ break;
86
+ case 'editable':
87
+ break;
88
+ case 'coordinates':
89
+ if (point.coordinates) {
90
+ geometry.setCoordinates(getFromLonLat(point.coordinates, isFromLonLat))
91
+ layer.setZIndex(point.coordinates[2])
92
+ switch (status) {
93
+ case 0:
94
+ source.addFeature(feature)
95
+ status = 2;
96
+ break;
97
+ case 1:
98
+ status = 2;
99
+ break;
100
+ }
101
+ } else {
102
+ source.removeFeature(feature)
103
+ status = 0
104
+ }
105
+ break;
106
+ case 'src':
107
+ keys.add('icon')
108
+ break;
109
+ case 'size':
110
+ keys.add('icon')
111
+ break;
112
+ case 'center':
113
+ keys.add('icon')
114
+ break;
115
+ case 'rotation':
116
+ keys.add('icon')
117
+ break;
118
+ default:
119
+ throw new Error(`${key} 还不支持修改`)
120
+ }
121
+ })
122
+
123
+ keys.forEach(e => {
124
+ switch (e) {
125
+ case 'icon':
126
+ style.setImage(new Icon({
127
+ width: point.size[0],
128
+ height: point.size[1],
129
+ src: point.src,
130
+ rotation: point.rotation * RD,
131
+ anchor: point.center,
132
+ crossOrigin: 'anonymous'
133
+ }))
134
+ break;
135
+ }
136
+ })
137
+ feature.changed()
138
+ }
139
+
140
+ const onMouseMove = () => {
141
+ const coordinates = [event.geography[0], event.geography[1], point.height];
142
+ switch (status) {
143
+ case 0:
144
+ status = 1
145
+ geometry.setCoordinates(getFromLonLat(coordinates, isFromLonLat))
146
+ source.addFeature(feature)
147
+ break;
148
+ case 1:
149
+ case 3:
150
+ geometry.setCoordinates(getFromLonLat(coordinates, isFromLonLat))
151
+ break
152
+ }
153
+ }
154
+
155
+ const onClick = () => {
156
+ if (status == 1) {
157
+ status = 2
158
+ point.coordinates = [event.geography[0], event.geography[1], point.height];
159
+ point.event.trigger('pointer-in')
160
+ }
161
+ }
162
+
163
+
164
+ const onDestroy = () => {
165
+ source.removeFeature(feature)
166
+ event.off('pointer-move', onMouseMove)
167
+ event.off('left-click', onClick)
168
+ point.event.off('update', onUpdate)
169
+ point.event.off('destroy', onDestroy)
170
+
171
+ }
172
+
173
+ event.on('pointer-move', onMouseMove)
174
+ event.on('left-click', onClick)
175
+ point.event.on('update', onUpdate)
176
+ point.event.on('destroy', onDestroy)
177
177
  }