Skip to content

Commit a9eb0ae

Browse files
authored
add WebGLTileLayer and update version of openlayers with performance (#68)
fixes
1 parent eb8f2e8 commit a9eb0ae

File tree

3 files changed

+91
-1
lines changed

3 files changed

+91
-1
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"core-js": "^3.6.5",
4141
"file-saver": "^2.0.5",
4242
"jspdf": "^2.3.1",
43-
"ol": "^6.6.1",
43+
"ol": "^6.12.0",
4444
"ol-contextmenu": "^4.1.0",
4545
"ol-ext": "^3.2.4",
4646
"proj4": "^2.7.5",
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<template lang="">
2+
<div>
3+
<slot></slot>
4+
</div>
5+
</template>
6+
7+
<script>
8+
import {
9+
inject,
10+
provide,
11+
onUnmounted,
12+
onMounted,
13+
watch,
14+
computed
15+
} from 'vue'
16+
17+
import TileLayer from 'ol/layer/WebGLTile';
18+
import usePropsAsObjectProperties from '@/composables/usePropsAsObjectProperties'
19+
import BaseLayer from "./BaseLayer"
20+
export default {
21+
extends: BaseLayer,
22+
name: 'ol-webgl-tile-layer',
23+
setup(props) {
24+
25+
const map = inject('map');
26+
const overViewMap = inject('overviewMap', null);
27+
28+
const {
29+
properties
30+
} = usePropsAsObjectProperties(props);
31+
32+
const tileLayer = computed(() => new TileLayer(properties));
33+
34+
const applyTileLayer = () => {
35+
36+
if (overViewMap != null) {
37+
overViewMap.value.getOverviewMap().addLayer(tileLayer.value);
38+
overViewMap.value.changed();
39+
} else {
40+
map.addLayer(tileLayer.value);
41+
}
42+
};
43+
44+
const removeTileLayer = () => {
45+
46+
if (overViewMap != null) {
47+
overViewMap.value.getOverviewMap().removeLayer(tileLayer.value);
48+
overViewMap.value.changed();
49+
} else {
50+
map.removeLayer(tileLayer.value);
51+
}
52+
};
53+
54+
if (overViewMap != null) {
55+
watch(overViewMap, () => {
56+
removeTileLayer();
57+
applyTileLayer();
58+
59+
});
60+
}
61+
62+
onMounted(() => {
63+
applyTileLayer();
64+
});
65+
66+
onUnmounted(() => {
67+
removeTileLayer();
68+
});
69+
70+
provide('tileLayer', tileLayer);
71+
72+
return {
73+
tileLayer
74+
}
75+
},
76+
props: {
77+
preload: {
78+
type: Number,
79+
default: 1
80+
},
81+
}
82+
}
83+
</script>
84+
85+
<style lang="">
86+
87+
</style>

src/components/layers/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import TileLayer from './TileLayer.vue'
2+
import WebGLTileLayer from './WebGLTileLayer.vue'
23
import ImageLayer from './ImageLayer.vue'
34
import VectorLayer from './VectorLayer.vue'
45
import AnimatedClusterLayer from './AnimatedClusterLayer'
@@ -13,6 +14,7 @@ function install(app) {
1314
install.installed = true
1415

1516
app.component(TileLayer.name, TileLayer)
17+
app.component(WebGLTileLayer.name, WebGLTileLayer)
1618
app.component(ImageLayer.name, ImageLayer)
1719
app.component(VectorLayer.name, VectorLayer)
1820
app.component(AnimatedClusterLayer.name, AnimatedClusterLayer)
@@ -24,6 +26,7 @@ export default install
2426
export {
2527
install,
2628
TileLayer,
29+
WebGLTileLayer,
2730
ImageLayer,
2831
VectorLayer,
2932
AnimatedClusterLayer,

0 commit comments

Comments
 (0)