@operato/scene-openlayers 1.2.54
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +11 -0
- package/README.md +13 -0
- package/assets/favicon.ico +0 -0
- package/assets/images/spinner.png +0 -0
- package/db.sqlite +0 -0
- package/dist/editors/index.d.ts +0 -0
- package/dist/editors/index.js +2 -0
- package/dist/editors/index.js.map +1 -0
- package/dist/groups/geography.d.ts +6 -0
- package/dist/groups/geography.js +48 -0
- package/dist/groups/geography.js.map +1 -0
- package/dist/groups/index.d.ts +7 -0
- package/dist/groups/index.js +3 -0
- package/dist/groups/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/ol-marker.d.ts +79 -0
- package/dist/ol-marker.js +247 -0
- package/dist/ol-marker.js.map +1 -0
- package/dist/openlayers.d.ts +37 -0
- package/dist/openlayers.js +211 -0
- package/dist/openlayers.js.map +1 -0
- package/dist/templates/index.d.ts +14 -0
- package/dist/templates/index.js +4 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/ol-marker copy.d.ts +14 -0
- package/dist/templates/ol-marker copy.js +16 -0
- package/dist/templates/ol-marker copy.js.map +1 -0
- package/dist/templates/ol-marker.d.ts +14 -0
- package/dist/templates/ol-marker.js +16 -0
- package/dist/templates/ol-marker.js.map +1 -0
- package/dist/templates/ol-path.d.ts +14 -0
- package/dist/templates/ol-path.js +16 -0
- package/dist/templates/ol-path.js.map +1 -0
- package/dist/templates/openlayers.d.ts +14 -0
- package/dist/templates/openlayers.js +16 -0
- package/dist/templates/openlayers.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/icons/ol-marker-template.png +0 -0
- package/icons/ol-path-template.png +0 -0
- package/icons/openlayers-template.png +0 -0
- package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +15 -0
- package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +15 -0
- package/logs/application-2023-09-02-17.log +15 -0
- package/logs/connections-2023-09-02-17.log +76 -0
- package/package.json +63 -0
- package/schema.gql +3702 -0
- package/src/editors/index.ts +0 -0
- package/src/groups/geography.ts +48 -0
- package/src/groups/index.ts +3 -0
- package/src/index.ts +2 -0
- package/src/ol-marker.ts +318 -0
- package/src/ol-path.ts_x +368 -0
- package/src/openlayers.ts +256 -0
- package/src/templates/index.ts +4 -0
- package/src/templates/ol-marker.ts +16 -0
- package/src/templates/ol-path.ts +16 -0
- package/src/templates/openlayers.ts +16 -0
- package/things-scene.config.js +7 -0
- package/translations/en.json +3 -0
- package/translations/ko.json +3 -0
- package/translations/ms.json +3 -0
- package/translations/zh.json +3 -0
- package/tsconfig.json +23 -0
- 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 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editors/index.ts"],"names":[],"mappings":"","sourcesContent":[""]}
|
@@ -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 @@
|
|
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"]}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
@@ -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
|
+
}
|