-
Notifications
You must be signed in to change notification settings - Fork 379
/
Copy pathLGeoJson.vue
69 lines (67 loc) · 1.57 KB
/
LGeoJson.vue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<script>
import propsBinder from '../utils/propsBinder.js';
import findRealParent from '../utils/findRealParent.js';
const props = {
geojson: {
type: [Object, Array],
custom: true,
default: () => ({}),
},
options: {
type: Object,
default: () => ({}),
},
visible: {
type: Boolean,
custom: true,
default: true,
}
}
export default {
name: 'LGeoJson',
props: props,
mounted() {
this.mapObject = L.geoJSON(this.geojson, this.options);
L.DomEvent.on(this.mapObject, this.$listeners);
propsBinder(this, this.mapObject, props);
this.parentContainer = findRealParent(this.$parent);
this.parentContainer.addLayer(this, !this.visible);
},
methods: {
setVisible(newVal, oldVal) {
if (newVal == oldVal) return;
if (this.mapObject) {
if (newVal) {
this.parentContainer.addLayer(this);
} else {
this.parentContainer.removeLayer(this);
}
}
},
setGeojson(newVal) {
this.mapObject.clearLayers();
this.mapObject.addData(newVal);
},
getGeoJSONData() {
return this.mapObject.toGeoJSON();
},
getBounds() {
return this.mapObject.getBounds();
},
setVisible(newVal, oldVal) {
if (newVal === oldVal) return;
if (newVal) {
this.mapObject.addTo(this.parentContainer.mapObject);
} else {
this.parentContainer.mapObject.removeLayer(this.mapObject);
}
},
},
beforeDestroy() {
this.parentContainer.mapObject.removeLayer(this.mapObject);
},
render() {
return null;
}
};
</script>