@operato/scene-openlayers 1.2.54

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +13 -0
  3. package/assets/favicon.ico +0 -0
  4. package/assets/images/spinner.png +0 -0
  5. package/db.sqlite +0 -0
  6. package/dist/editors/index.d.ts +0 -0
  7. package/dist/editors/index.js +2 -0
  8. package/dist/editors/index.js.map +1 -0
  9. package/dist/groups/geography.d.ts +6 -0
  10. package/dist/groups/geography.js +48 -0
  11. package/dist/groups/geography.js.map +1 -0
  12. package/dist/groups/index.d.ts +7 -0
  13. package/dist/groups/index.js +3 -0
  14. package/dist/groups/index.js.map +1 -0
  15. package/dist/index.d.ts +2 -0
  16. package/dist/index.js +3 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/ol-marker.d.ts +79 -0
  19. package/dist/ol-marker.js +247 -0
  20. package/dist/ol-marker.js.map +1 -0
  21. package/dist/openlayers.d.ts +37 -0
  22. package/dist/openlayers.js +211 -0
  23. package/dist/openlayers.js.map +1 -0
  24. package/dist/templates/index.d.ts +14 -0
  25. package/dist/templates/index.js +4 -0
  26. package/dist/templates/index.js.map +1 -0
  27. package/dist/templates/ol-marker copy.d.ts +14 -0
  28. package/dist/templates/ol-marker copy.js +16 -0
  29. package/dist/templates/ol-marker copy.js.map +1 -0
  30. package/dist/templates/ol-marker.d.ts +14 -0
  31. package/dist/templates/ol-marker.js +16 -0
  32. package/dist/templates/ol-marker.js.map +1 -0
  33. package/dist/templates/ol-path.d.ts +14 -0
  34. package/dist/templates/ol-path.js +16 -0
  35. package/dist/templates/ol-path.js.map +1 -0
  36. package/dist/templates/openlayers.d.ts +14 -0
  37. package/dist/templates/openlayers.js +16 -0
  38. package/dist/templates/openlayers.js.map +1 -0
  39. package/dist/tsconfig.tsbuildinfo +1 -0
  40. package/icons/ol-marker-template.png +0 -0
  41. package/icons/ol-path-template.png +0 -0
  42. package/icons/openlayers-template.png +0 -0
  43. package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +15 -0
  44. package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +15 -0
  45. package/logs/application-2023-09-02-17.log +15 -0
  46. package/logs/connections-2023-09-02-17.log +76 -0
  47. package/package.json +63 -0
  48. package/schema.gql +3702 -0
  49. package/src/editors/index.ts +0 -0
  50. package/src/groups/geography.ts +48 -0
  51. package/src/groups/index.ts +3 -0
  52. package/src/index.ts +2 -0
  53. package/src/ol-marker.ts +318 -0
  54. package/src/ol-path.ts_x +368 -0
  55. package/src/openlayers.ts +256 -0
  56. package/src/templates/index.ts +4 -0
  57. package/src/templates/ol-marker.ts +16 -0
  58. package/src/templates/ol-path.ts +16 -0
  59. package/src/templates/openlayers.ts +16 -0
  60. package/things-scene.config.js +7 -0
  61. package/translations/en.json +3 -0
  62. package/translations/ko.json +3 -0
  63. package/translations/ms.json +3 -0
  64. package/translations/zh.json +3 -0
  65. package/tsconfig.json +23 -0
  66. package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ ## [1.2.54](https://github.com/things-scene/operato-scene/compare/v1.2.53...v1.2.54) (2023-09-03)
7
+
8
+
9
+ ### :bug: Bug Fix
10
+
11
+ * add openlayers module ([2e3aec2](https://github.com/things-scene/operato-scene/commit/2e3aec223d9b82afa18ad0953d1121c5e9ff9787))
package/README.md ADDED
@@ -0,0 +1,13 @@
1
+ ## build
2
+
3
+ `$ yarn build`
4
+
5
+ | type | filename | for | tested |
6
+ | ---- | ------------------------------------------ | -------------- | ------ |
7
+ | UMD | things-scene-scene-openlayers.js | modern browser | O |
8
+ | UMD | things-scene-scene-openlayers-ie.js | ie 11 | O |
9
+ | ESM | things-scene-scene-openlayers.mjs | modern browser | O |
10
+
11
+ ## publish
12
+
13
+ `$ yarn publish`
Binary file
Binary file
package/db.sqlite ADDED
Binary file
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editors/index.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -0,0 +1,6 @@
1
+ export declare const geography: {
2
+ name: string;
3
+ description: string;
4
+ icon: string;
5
+ templates: never[];
6
+ };
@@ -0,0 +1,48 @@
1
+ const icon = `
2
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
3
+ viewBox="0 0 35 35" style="enable-background:new 0 0 35 35;" xml:space="preserve">
4
+ <style type="text/css">
5
+ .st0{fill:{{strokeColor}};}
6
+ </style>
7
+ <g>
8
+ <g>
9
+ <path class="st0" d="M33.2,15.2v4.6h-4.6v-4.6H33.2 M34,14.4h-6.1v6.1H34V14.4L34,14.4z"/>
10
+ </g>
11
+ <g>
12
+ <g>
13
+ <path class="st0" d="M17.5,15.3l2.2,2.2l-2.2,2.2l-2.2-2.2L17.5,15.3 M17.5,14.2l-3.3,3.3l3.3,3.3l3.3-3.3L17.5,14.2L17.5,14.2z"
14
+ />
15
+ </g>
16
+ <g>
17
+ <path class="st0" d="M19.8,7.2v4.6h-4.6V7.2H19.8 M20.6,6.5h-6.1v6.1h6.1V6.5L20.6,6.5z"/>
18
+ </g>
19
+ <g>
20
+ <path class="st0" d="M19.8,23.1v4.6h-4.6v-4.6H19.8 M20.6,22.4h-6.1v6.1h6.1V22.4L20.6,22.4z"/>
21
+ </g>
22
+ </g>
23
+ <g>
24
+ <g>
25
+ <polygon class="st0" points="13.3,17.4 10.6,19.6 10.6,15.2 13.3,17.4 "/>
26
+ </g>
27
+ <rect x="8.2" y="16.9" class="st0" width="3.4" height="0.9"/>
28
+ </g>
29
+ <g>
30
+ <g>
31
+ <polygon class="st0" points="26.8,17.4 24,19.6 24,15.2 26.8,17.4 "/>
32
+ </g>
33
+ <rect x="21.7" y="16.9" class="st0" width="3.4" height="0.9"/>
34
+ </g>
35
+ <g>
36
+ <path class="st0" d="M4.1,15.2c1.3,0,2.3,1,2.3,2.3s-1,2.3-2.3,2.3s-2.3-1-2.3-2.3S2.8,15.2,4.1,15.2 M4.1,14.4
37
+ c-1.7,0-3.1,1.4-3.1,3.1c0,1.7,1.4,3.1,3.1,3.1s3.1-1.4,3.1-3.1C7.1,15.8,5.8,14.4,4.1,14.4L4.1,14.4z"/>
38
+ </g>
39
+ </g>
40
+ </svg>
41
+ `;
42
+ export const geography = {
43
+ name: 'geography',
44
+ description: 'a group of Geographic Components',
45
+ icon,
46
+ templates: []
47
+ };
48
+ //# sourceMappingURL=geography.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geography.js","sourceRoot":"","sources":["../../src/groups/geography.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCZ,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,kCAAkC;IAC/C,IAAI;IACJ,SAAS,EAAE,EAAE;CACd,CAAA","sourcesContent":["const icon = `\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t viewBox=\"0 0 35 35\" style=\"enable-background:new 0 0 35 35;\" xml:space=\"preserve\">\n <style type=\"text/css\">\n .st0{fill:{{strokeColor}};}\n </style>\n <g>\n <g>\n <path class=\"st0\" d=\"M33.2,15.2v4.6h-4.6v-4.6H33.2 M34,14.4h-6.1v6.1H34V14.4L34,14.4z\"/>\n </g>\n <g>\n <g>\n <path class=\"st0\" d=\"M17.5,15.3l2.2,2.2l-2.2,2.2l-2.2-2.2L17.5,15.3 M17.5,14.2l-3.3,3.3l3.3,3.3l3.3-3.3L17.5,14.2L17.5,14.2z\"\n />\n </g>\n <g>\n <path class=\"st0\" d=\"M19.8,7.2v4.6h-4.6V7.2H19.8 M20.6,6.5h-6.1v6.1h6.1V6.5L20.6,6.5z\"/>\n </g>\n <g>\n <path class=\"st0\" d=\"M19.8,23.1v4.6h-4.6v-4.6H19.8 M20.6,22.4h-6.1v6.1h6.1V22.4L20.6,22.4z\"/>\n </g>\n </g>\n <g>\n <g>\n <polygon class=\"st0\" points=\"13.3,17.4 10.6,19.6 10.6,15.2 13.3,17.4 \t\t\t\"/>\n </g>\n <rect x=\"8.2\" y=\"16.9\" class=\"st0\" width=\"3.4\" height=\"0.9\"/>\n </g>\n <g>\n <g>\n <polygon class=\"st0\" points=\"26.8,17.4 24,19.6 24,15.2 26.8,17.4 \t\t\t\"/>\n </g>\n <rect x=\"21.7\" y=\"16.9\" class=\"st0\" width=\"3.4\" height=\"0.9\"/>\n </g>\n <g>\n <path class=\"st0\" d=\"M4.1,15.2c1.3,0,2.3,1,2.3,2.3s-1,2.3-2.3,2.3s-2.3-1-2.3-2.3S2.8,15.2,4.1,15.2 M4.1,14.4\n c-1.7,0-3.1,1.4-3.1,3.1c0,1.7,1.4,3.1,3.1,3.1s3.1-1.4,3.1-3.1C7.1,15.8,5.8,14.4,4.1,14.4L4.1,14.4z\"/>\n </g>\n </g>\n</svg>\n`\n\nexport const geography = {\n name: 'geography',\n description: 'a group of Geographic Components',\n icon,\n templates: []\n}\n"]}
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ name: string;
3
+ description: string;
4
+ icon: string;
5
+ templates: never[];
6
+ }[];
7
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { geography } from './geography';
2
+ export default [geography];
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/groups/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,eAAe,CAAC,SAAS,CAAC,CAAA","sourcesContent":["import { geography } from './geography'\n\nexport default [geography]\n"]}
@@ -0,0 +1,2 @@
1
+ export { default as Openlayers } from './openlayers';
2
+ export { default as OpenLayersMarker } from './ol-marker';
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { default as Openlayers } from './openlayers';
2
+ export { default as OpenLayersMarker } from './ol-marker';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAA","sourcesContent":["export { default as Openlayers } from './openlayers'\nexport { default as OpenLayersMarker } from './ol-marker'\n"]}
@@ -0,0 +1,79 @@
1
+ import { Component, InfoWindow as SceneInfoWindow, Properties, Shape } from '@hatiolab/things-scene';
2
+ import Openlayers from './openlayers';
3
+ import 'ol/ol.css';
4
+ import { Map, MapBrowserEvent } from 'ol';
5
+ import { Style } from 'ol/style';
6
+ declare const OpenLayersMarker_base: typeof Shape;
7
+ export default class OpenLayersMarker extends OpenLayersMarker_base {
8
+ _infoWindow: any;
9
+ _marker: any;
10
+ _map: Map | null;
11
+ static markerStyle: Style;
12
+ dispose(): void;
13
+ ready(): void;
14
+ get map(): Map | null;
15
+ get infoWindow(): any;
16
+ findInfoWindow(type: string): Component | undefined;
17
+ setInfoContent(sceneInfoWindow: SceneInfoWindow): void;
18
+ openInfoWindow(iw: SceneInfoWindow): void;
19
+ onmarkerclick(e: MapBrowserEvent<UIEvent>): void;
20
+ onmarkermouseover(e: MapBrowserEvent<UIEvent>): void;
21
+ onmarkermouseout(e: MapBrowserEvent<UIEvent>): void;
22
+ set marker(marker: any);
23
+ get marker(): any;
24
+ render(context: CanvasRenderingContext2D): void;
25
+ detachFromOldOpenlayers(map: Openlayers): void;
26
+ attachToNewOpenlayers(map: Openlayers): void;
27
+ onchangeTargetMap(after: string, before: string): void;
28
+ get targetMap(): Openlayers;
29
+ onchange(after: Properties, before: Properties): void;
30
+ get latlng(): {
31
+ lat: any;
32
+ lng: any;
33
+ };
34
+ set latlng(latlng: {
35
+ lat: any;
36
+ lng: any;
37
+ });
38
+ get nature(): {
39
+ mutable: boolean;
40
+ resizable: boolean;
41
+ rotatable: boolean;
42
+ properties: ({
43
+ type: string;
44
+ label: string;
45
+ name: string;
46
+ property: {
47
+ component: string;
48
+ step?: undefined;
49
+ max?: undefined;
50
+ min?: undefined;
51
+ options?: undefined;
52
+ };
53
+ } | {
54
+ type: string;
55
+ label: string;
56
+ name: string;
57
+ property: {
58
+ step: number;
59
+ max: number;
60
+ min: number;
61
+ component?: undefined;
62
+ options?: undefined;
63
+ };
64
+ } | {
65
+ type: string;
66
+ label: string;
67
+ name: string;
68
+ property: {
69
+ options: string[];
70
+ component?: undefined;
71
+ step?: undefined;
72
+ max?: undefined;
73
+ min?: undefined;
74
+ };
75
+ })[];
76
+ 'value-property': string;
77
+ };
78
+ }
79
+ export {};
@@ -0,0 +1,247 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { Component, RectPath, Shape } from '@hatiolab/things-scene';
5
+ import 'ol/ol.css';
6
+ import { Overlay } from 'ol';
7
+ import { fromLonLat } from 'ol/proj';
8
+ import { Icon, Style } from 'ol/style';
9
+ import { Feature } from 'ol';
10
+ import Point from 'ol/geom/Point';
11
+ const NATURE = {
12
+ mutable: false,
13
+ resizable: true,
14
+ rotatable: true,
15
+ properties: [
16
+ {
17
+ type: 'id-input',
18
+ label: 'target-map',
19
+ name: 'targetMap',
20
+ property: {
21
+ component: 'openlayers'
22
+ }
23
+ },
24
+ {
25
+ type: 'number',
26
+ label: 'latitude',
27
+ name: 'lat',
28
+ property: {
29
+ step: 0.000001,
30
+ max: 90,
31
+ min: -90
32
+ }
33
+ },
34
+ {
35
+ type: 'number',
36
+ label: 'longitude',
37
+ name: 'lng',
38
+ property: {
39
+ step: 0.000001,
40
+ max: 180,
41
+ min: -180
42
+ }
43
+ },
44
+ {
45
+ type: 'select',
46
+ label: 'style',
47
+ name: 'style',
48
+ property: {
49
+ options: ['circle', 'marker']
50
+ }
51
+ }
52
+ ],
53
+ 'value-property': 'latlng'
54
+ // help: 'scene/component/gmap-marker'
55
+ };
56
+ const MARKER_PATH = 'M10 0 C14.42 0 18 3.58 18 8 C18 12.42 14.42 16 10 16 C5.58 16 2 12.42 2 8 C2 3.58 5.58 0 10 0 Z';
57
+ export default class OpenLayersMarker extends RectPath(Shape) {
58
+ constructor() {
59
+ super(...arguments);
60
+ this._map = null;
61
+ }
62
+ dispose() {
63
+ this.detachFromOldOpenlayers(this.targetMap);
64
+ this.marker = null;
65
+ delete this._infoWindow;
66
+ super.dispose();
67
+ }
68
+ ready() {
69
+ super.ready();
70
+ if (this.isTemplate()) {
71
+ return;
72
+ }
73
+ this.attachToNewOpenlayers(this.targetMap);
74
+ }
75
+ get map() {
76
+ return this._map;
77
+ }
78
+ get infoWindow() {
79
+ if (!this._infoWindow) {
80
+ // this._infoWindow = new google.maps.InfoWindow()
81
+ // 인포윈도우 생성
82
+ this._infoWindow = new Overlay({
83
+ element: document.getElementById('info'),
84
+ positioning: 'bottom-center',
85
+ stopEvent: false
86
+ });
87
+ // // 마커 클릭 이벤트 리스너 추가
88
+ // marker.on('click', event => {
89
+ // const coordinate = event.coordinate
90
+ // const content = '<div>Hello, This is InfoWindow!</div>'
91
+ // infoWindow.setPosition(coordinate)
92
+ // infoWindow.getElement().innerHTML = content
93
+ // map.addOverlay(infoWindow)
94
+ // })
95
+ // // 지도에 레이어 추가
96
+ // map.addLayer(markerLayer)
97
+ // // 인포윈도우를 닫는 함수
98
+ // const closeInfoWindow = () => {
99
+ // infoWindow.setPosition(undefined)
100
+ // infoWindow.getElement().innerHTML = ''
101
+ // }
102
+ }
103
+ return this._infoWindow;
104
+ }
105
+ findInfoWindow(type) {
106
+ var eventSetting = (this.state.event && this.state.event[type]) || {};
107
+ var infoWindow =
108
+ /* event spec v1.0 */ eventSetting.infoWindow ||
109
+ /* event spec v1.1 */ (eventSetting.action == 'infoWindow' && eventSetting.target);
110
+ if (infoWindow) {
111
+ return this.root.findById(infoWindow);
112
+ }
113
+ }
114
+ setInfoContent(sceneInfoWindow) {
115
+ var tpl = Component.template(sceneInfoWindow.model.frontSideTemplate);
116
+ var content = `<style>${sceneInfoWindow.model.style}</style>` + tpl(this);
117
+ this.infoWindow.setContent(content);
118
+ }
119
+ openInfoWindow(iw) {
120
+ this.setInfoContent(iw);
121
+ if (!this.map)
122
+ return;
123
+ this.infoWindow.open(this.map, this.marker);
124
+ }
125
+ onmarkerclick(e) {
126
+ var iw = this.findInfoWindow('tap');
127
+ iw && this.openInfoWindow(iw);
128
+ // this.trigger('click', e.ya) ??????
129
+ }
130
+ onmarkermouseover(e) {
131
+ var iw = this.findInfoWindow('hover');
132
+ iw && this.openInfoWindow(iw);
133
+ }
134
+ onmarkermouseout(e) {
135
+ var iw = this.findInfoWindow('hover');
136
+ iw && this.infoWindow.close();
137
+ }
138
+ set marker(marker) {
139
+ this._marker = marker;
140
+ }
141
+ get marker() {
142
+ return this._marker;
143
+ }
144
+ render(context) {
145
+ var { top, left, width, height } = this.state;
146
+ context.translate(left, top);
147
+ // 마커 모양 그리기
148
+ context.beginPath();
149
+ context.moveTo(width / 2, height * 0.9);
150
+ context.bezierCurveTo(width / 2.3, height * 0.6, 0, height / 2, 0, height / 4);
151
+ context.ellipse(width / 2, height / 4, width / 2, height / 4, 0, Math.PI * 1, Math.PI * 0);
152
+ context.bezierCurveTo(width, height / 2, width / 1.7, height * 0.6, width / 2, height * 0.9);
153
+ context.closePath();
154
+ context.translate(-left, -top);
155
+ }
156
+ detachFromOldOpenlayers(map) {
157
+ var _a;
158
+ if (this._marker && map) {
159
+ (_a = map.vectorSource) === null || _a === void 0 ? void 0 : _a.removeFeature(this._marker);
160
+ this._marker = null;
161
+ }
162
+ }
163
+ attachToNewOpenlayers(map) {
164
+ var _a;
165
+ if (!this._marker && map) {
166
+ let { lat, lng, style = 'circle', fillStyle: fillColor, alpha: fillOpacity = 1, strokeStyle: strokeColor, lineWidth: strokeWeight } = this.state;
167
+ const marker = new Feature({
168
+ type: style,
169
+ geometry: new Point(fromLonLat([lng || 0, lat || 0]))
170
+ });
171
+ (_a = map.vectorSource) === null || _a === void 0 ? void 0 : _a.addFeatures([marker]);
172
+ if (marker) {
173
+ //@ts-ignore
174
+ marker.on('click', this.onmarkerclick.bind(this));
175
+ //@ts-ignore
176
+ marker.on('mouseover', this.onmarkermouseover.bind(this));
177
+ //@ts-ignore
178
+ marker.on('mouseout', this.onmarkermouseout.bind(this));
179
+ }
180
+ this._marker = marker;
181
+ }
182
+ }
183
+ onchangeTargetMap(after, before) {
184
+ const oldMap = this.root.findById(before);
185
+ const newMap = this.root.findById(after);
186
+ this.detachFromOldOpenlayers(oldMap);
187
+ this.attachToNewOpenlayers(newMap);
188
+ }
189
+ get targetMap() {
190
+ const { targetMap } = this.state;
191
+ return this.root.findById(targetMap);
192
+ }
193
+ onchange(after, before) {
194
+ if ('targetMap' in after) {
195
+ this.onchangeTargetMap(after.targetMap, before.targetMap);
196
+ }
197
+ if ('lat' in after || 'lng' in after) {
198
+ var { lat, lng } = this.state;
199
+ this.latlng = {
200
+ lat,
201
+ lng
202
+ };
203
+ }
204
+ if (('fillStyle' in after || 'strokeStyle' in after || 'lineWidth' in after) && this.marker) {
205
+ let { fillStyle: fillColor, alpha: fillOpacity = 1, strokeStyle: strokeColor, lineWidth: strokeWeight } = this.state;
206
+ this.marker.setIcon({
207
+ path: MARKER_PATH,
208
+ fillColor,
209
+ fillOpacity,
210
+ strokeColor,
211
+ strokeWeight
212
+ });
213
+ }
214
+ if ('style' in after) {
215
+ const { targetMap } = this.state;
216
+ this.onchangeTargetMap(targetMap, targetMap);
217
+ }
218
+ super.onchange && super.onchange(after, before);
219
+ }
220
+ get latlng() {
221
+ return {
222
+ lat: this.getState('lat'),
223
+ lng: this.getState('lng')
224
+ };
225
+ }
226
+ set latlng(latlng) {
227
+ var _a;
228
+ var { lat, lng } = latlng;
229
+ (_a = this.marker) === null || _a === void 0 ? void 0 : _a.getGeometry().setCoordinates(fromLonLat([lng, lat]));
230
+ this.setState({
231
+ lat,
232
+ lng
233
+ });
234
+ }
235
+ get nature() {
236
+ return NATURE;
237
+ }
238
+ }
239
+ OpenLayersMarker.markerStyle = new Style({
240
+ image: new Icon({
241
+ anchor: [0.5, 1],
242
+ src: 'data:image/svg+xml;charset=utf-8,' +
243
+ encodeURIComponent('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">' + MARKER_PATH + '</svg>')
244
+ })
245
+ });
246
+ Component.register('ol-marker', OpenLayersMarker);
247
+ //# sourceMappingURL=ol-marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ol-marker.js","sourceRoot":"","sources":["../src/ol-marker.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, InfoWindow as SceneInfoWindow, Properties, RectPath, Shape } from '@hatiolab/things-scene'\nimport Openlayers from './openlayers'\n\nimport 'ol/ol.css'\nimport { Map, MapBrowserEvent, Overlay, View } from 'ol'\nimport { fromLonLat } from 'ol/proj'\nimport { Tile as TileLayer, Vector as VectorLayer } from 'ol/layer'\nimport { OSM, Vector as VectorSource } from 'ol/source'\nimport { Icon, Style } from 'ol/style'\nimport { Feature } from 'ol'\nimport Point from 'ol/geom/Point'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'id-input',\n label: 'target-map',\n name: 'targetMap',\n property: {\n component: 'openlayers'\n }\n },\n {\n type: 'number',\n label: 'latitude',\n name: 'lat',\n property: {\n step: 0.000001,\n max: 90,\n min: -90\n }\n },\n {\n type: 'number',\n label: 'longitude',\n name: 'lng',\n property: {\n step: 0.000001,\n max: 180,\n min: -180\n }\n },\n {\n type: 'select',\n label: 'style',\n name: 'style',\n property: {\n options: ['circle', 'marker']\n }\n }\n ],\n 'value-property': 'latlng'\n // help: 'scene/component/gmap-marker'\n}\n\nconst MARKER_PATH = 'M10 0 C14.42 0 18 3.58 18 8 C18 12.42 14.42 16 10 16 C5.58 16 2 12.42 2 8 C2 3.58 5.58 0 10 0 Z'\n\nexport default class OpenLayersMarker extends RectPath(Shape) {\n _infoWindow: any\n _marker: any\n _map: Map | null = null\n\n static markerStyle: Style = new Style({\n image: new Icon({\n anchor: [0.5, 1], // 이미지 중심 아래쪽을 지도 위치에 맞춤\n src:\n 'data:image/svg+xml;charset=utf-8,' +\n encodeURIComponent('<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">' + MARKER_PATH + '</svg>')\n })\n })\n\n dispose() {\n this.detachFromOldOpenlayers(this.targetMap)\n\n this.marker = null\n delete this._infoWindow\n\n super.dispose()\n }\n\n ready() {\n super.ready()\n\n if (this.isTemplate()) {\n return\n }\n\n this.attachToNewOpenlayers(this.targetMap)\n }\n\n get map() {\n return this._map\n }\n\n get infoWindow() {\n if (!this._infoWindow) {\n // this._infoWindow = new google.maps.InfoWindow()\n\n // 인포윈도우 생성\n this._infoWindow = new Overlay({\n element: document.getElementById('info')!,\n positioning: 'bottom-center',\n stopEvent: false\n })\n\n // // 마커 클릭 이벤트 리스너 추가\n // marker.on('click', event => {\n // const coordinate = event.coordinate\n // const content = '<div>Hello, This is InfoWindow!</div>'\n // infoWindow.setPosition(coordinate)\n // infoWindow.getElement().innerHTML = content\n // map.addOverlay(infoWindow)\n // })\n\n // // 지도에 레이어 추가\n // map.addLayer(markerLayer)\n\n // // 인포윈도우를 닫는 함수\n // const closeInfoWindow = () => {\n // infoWindow.setPosition(undefined)\n // infoWindow.getElement().innerHTML = ''\n // }\n }\n\n return this._infoWindow\n }\n\n findInfoWindow(type: string) {\n var eventSetting = (this.state.event && this.state.event[type]) || {}\n\n var infoWindow =\n /* event spec v1.0 */ eventSetting.infoWindow ||\n /* event spec v1.1 */ (eventSetting.action == 'infoWindow' && eventSetting.target)\n\n if (infoWindow) {\n return this.root.findById(infoWindow)\n }\n }\n\n setInfoContent(sceneInfoWindow: SceneInfoWindow) {\n var tpl = Component.template(sceneInfoWindow.model.frontSideTemplate)\n var content = `<style>${sceneInfoWindow.model.style}</style>` + tpl(this)\n\n this.infoWindow.setContent(content)\n }\n\n openInfoWindow(iw: SceneInfoWindow) {\n this.setInfoContent(iw)\n\n if (!this.map) return\n\n this.infoWindow.open(this.map, this.marker)\n }\n\n onmarkerclick(e: MapBrowserEvent<UIEvent>) {\n var iw = this.findInfoWindow('tap')\n iw && this.openInfoWindow(iw)\n\n // this.trigger('click', e.ya) ??????\n }\n\n onmarkermouseover(e: MapBrowserEvent<UIEvent>) {\n var iw = this.findInfoWindow('hover')\n iw && this.openInfoWindow(iw)\n }\n\n onmarkermouseout(e: MapBrowserEvent<UIEvent>) {\n var iw = this.findInfoWindow('hover')\n iw && this.infoWindow.close()\n }\n\n set marker(marker) {\n this._marker = marker\n }\n\n get marker() {\n return this._marker\n }\n\n render(context: CanvasRenderingContext2D) {\n var { top, left, width, height } = this.state\n\n context.translate(left, top)\n\n // 마커 모양 그리기\n context.beginPath()\n\n context.moveTo(width / 2, height * 0.9)\n context.bezierCurveTo(width / 2.3, height * 0.6, 0, height / 2, 0, height / 4)\n\n context.ellipse(width / 2, height / 4, width / 2, height / 4, 0, Math.PI * 1, Math.PI * 0)\n\n context.bezierCurveTo(width, height / 2, width / 1.7, height * 0.6, width / 2, height * 0.9)\n context.closePath()\n\n context.translate(-left, -top)\n }\n\n detachFromOldOpenlayers(map: Openlayers) {\n if (this._marker && map) {\n map.vectorSource?.removeFeature(this._marker)\n this._marker = null\n }\n }\n\n attachToNewOpenlayers(map: Openlayers) {\n if (!this._marker && map) {\n let {\n lat,\n lng,\n style = 'circle',\n fillStyle: fillColor,\n alpha: fillOpacity = 1,\n strokeStyle: strokeColor,\n lineWidth: strokeWeight\n } = this.state\n\n const marker = new Feature({\n type: style,\n geometry: new Point(fromLonLat([lng || 0, lat || 0]))\n })\n\n map.vectorSource?.addFeatures([marker])\n\n if (marker) {\n //@ts-ignore\n marker.on('click', this.onmarkerclick.bind(this))\n //@ts-ignore\n marker.on('mouseover', this.onmarkermouseover.bind(this))\n //@ts-ignore\n marker.on('mouseout', this.onmarkermouseout.bind(this))\n }\n\n this._marker = marker\n }\n }\n\n onchangeTargetMap(after: string, before: string) {\n const oldMap = this.root.findById(before) as Openlayers\n const newMap = this.root.findById(after) as Openlayers\n\n this.detachFromOldOpenlayers(oldMap)\n this.attachToNewOpenlayers(newMap)\n }\n\n get targetMap() {\n const { targetMap } = this.state\n return this.root.findById(targetMap) as Openlayers\n }\n\n onchange(after: Properties, before: Properties) {\n if ('targetMap' in after) {\n this.onchangeTargetMap(after.targetMap, before.targetMap)\n }\n\n if ('lat' in after || 'lng' in after) {\n var { lat, lng } = this.state\n this.latlng = {\n lat,\n lng\n }\n }\n\n if (('fillStyle' in after || 'strokeStyle' in after || 'lineWidth' in after) && this.marker) {\n let {\n fillStyle: fillColor,\n alpha: fillOpacity = 1,\n strokeStyle: strokeColor,\n lineWidth: strokeWeight\n } = this.state\n\n this.marker.setIcon({\n path: MARKER_PATH,\n fillColor,\n fillOpacity,\n strokeColor,\n strokeWeight\n })\n }\n\n if ('style' in after) {\n const { targetMap } = this.state\n this.onchangeTargetMap(targetMap, targetMap)\n }\n\n super.onchange && super.onchange(after, before)\n }\n\n get latlng() {\n return {\n lat: this.getState('lat'),\n lng: this.getState('lng')\n }\n }\n\n set latlng(latlng) {\n var { lat, lng } = latlng\n this.marker?.getGeometry().setCoordinates(fromLonLat([lng, lat]))\n\n this.setState({\n lat,\n lng\n })\n }\n\n get nature() {\n return NATURE\n }\n}\n\nComponent.register('ol-marker', OpenLayersMarker)\n"]}
@@ -0,0 +1,37 @@
1
+ import { Map } from 'ol';
2
+ import { Style } from 'ol/style.js';
3
+ import { Vector as VectorSource } from 'ol/source';
4
+ import { Geometry } from 'ol/geom';
5
+ import { Component, HTMLOverlayContainer, Properties, ComponentNature } from '@hatiolab/things-scene';
6
+ export default class Openlayers extends HTMLOverlayContainer {
7
+ static markerStyle: Style;
8
+ _anchor?: HTMLDivElement;
9
+ _map: Map | null;
10
+ _listenTo?: Component;
11
+ _listener?: Function;
12
+ _vectorSource?: VectorSource<Geometry>;
13
+ get eventMap(): {
14
+ 'model-layer': {
15
+ '(self)': {
16
+ change: (after: any) => void;
17
+ };
18
+ };
19
+ };
20
+ rescale(): void;
21
+ createElement(): void;
22
+ get tagName(): string;
23
+ get map(): Map | null;
24
+ dispose(): void;
25
+ setElementProperties(div: HTMLDivElement): void;
26
+ onchange(after: Properties, before: Properties): void;
27
+ get latlng(): {
28
+ lat: any;
29
+ lng: any;
30
+ };
31
+ set latlng(latlng: {
32
+ lat: any;
33
+ lng: any;
34
+ });
35
+ get vectorSource(): VectorSource<Geometry> | undefined;
36
+ get nature(): ComponentNature;
37
+ }