Mercurial > gemma
annotate client/src/layers/LegendElement.vue @ 941:8a80ef09a62c
client: improve identify
* Remove trigger that unfolds the box when features are identified.
Rationale: This makes the user interface too "jumpy".
* Instead add a style change for the icon to indicate if data is available.
It will use the bootstrap `text-info` style class.
* Simplify code that detects if a bottleneck was identified.
author | Bernhard Reiter <bernhard@intevation.de> |
---|---|
date | Tue, 09 Oct 2018 17:00:49 +0200 |
parents | 27282bfd1ba7 |
children | ca628dce90dd |
rev | line source |
---|---|
799
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
1 <template> |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
2 <div :id="id" class="bg-light shadow-sm rounded legendelement"></div> |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
3 |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
4 </template> |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
5 |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
6 <script> |
804
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
7 import { mapGetters } from "vuex"; |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
8 |
799
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
9 import { Map, View } from "ol"; |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
10 import Feature from "ol/Feature"; |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
11 import { Vector as VectorLayer } from "ol/layer.js"; |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
12 import { Vector as VectorSource } from "ol/source.js"; |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
13 import LineString from "ol/geom/LineString.js"; |
804
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
14 import Point from "ol/geom/Point"; |
799
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
15 |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
16 export default { |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
17 name: "legendelement", |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
18 props: ["layername", "layerindex"], |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
19 data: function() { |
804
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
20 return { |
882
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
21 myMap: null, |
804
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
22 mapLayer: null |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
23 }; |
799
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
24 }, |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
25 computed: { |
804
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
26 ...mapGetters("mapstore", ["getLayerByName"]), |
799
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
27 id() { |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
28 return "legendelement" + this.layerindex; |
882
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
29 }, |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
30 mstyle() { |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
31 if (this.mapLayer && this.mapLayer.data.getStyle) { |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
32 return this.mapLayer.data.getStyle(); |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
33 } |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
34 } |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
35 }, |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
36 watch: { |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
37 mstyle(newStyle, oldStyle) { |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
38 // only recreate if there already was a style before |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
39 if (oldStyle) { |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
40 let vector = this.createVectorLayer(); |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
41 |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
42 this.myMap.removeLayer(this.myMap.getLayers()[0]); |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
43 this.myMap.addLayer(vector); |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
44 } |
799
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
45 } |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
46 }, |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
47 mounted() { |
804
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
48 this.mapLayer = this.getLayerByName(this.layername); |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
49 if (this.mapLayer.data.getType() == "VECTOR") { |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
50 this.initMap(); |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
51 } else { |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
52 // TODO other tiles |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
53 } |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
54 }, |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
55 methods: { |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
56 initMap() { |
882
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
57 let vector = this.createVectorLayer(); |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
58 |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
59 this.myMap = new Map({ |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
60 layers: [vector], |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
61 target: this.id, |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
62 controls: [], |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
63 interactions: [], |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
64 view: new View({ |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
65 center: [0, 0], |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
66 zoom: 3, |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
67 projection: "EPSG:4326" |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
68 }) |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
69 }); |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
70 }, |
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
71 createVectorLayer() { |
804
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
72 let mapStyle = this.mapLayer.data.getStyle(); |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
73 |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
74 let feature = new Feature({ |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
75 geometry: new LineString([[-1, 0.5], [0, 0], [0.7, 0], [1.3, -0.7]]) |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
76 }); |
799
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
77 |
804
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
78 // special case if we need to call the style function with a special |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
79 // parameter or to detect a point layer |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
80 if (this.mapLayer["forLegendStyle"]) { |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
81 if (this.mapLayer.forLegendStyle.point) { |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
82 feature.setGeometry(new Point([0, 0])); |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
83 } |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
84 mapStyle = this.mapLayer.data.getStyleFunction()( |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
85 feature, |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
86 this.mapLayer.forLegendStyle.resolution |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
87 ); |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
88 } |
799
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
89 |
805
12263aeb9c15
client: improve LegendElement code style
Bernhard Reiter <bernhard@intevation.de>
parents:
804
diff
changeset
|
90 // we could add extra properties here, if they are needed for |
12263aeb9c15
client: improve LegendElement code style
Bernhard Reiter <bernhard@intevation.de>
parents:
804
diff
changeset
|
91 // the styling function in the future. An idea is to extend the |
12263aeb9c15
client: improve LegendElement code style
Bernhard Reiter <bernhard@intevation.de>
parents:
804
diff
changeset
|
92 // this.mapLayer["forLegendStyle"] for it. |
12263aeb9c15
client: improve LegendElement code style
Bernhard Reiter <bernhard@intevation.de>
parents:
804
diff
changeset
|
93 // FIXME, this is a special case for the Fairway Dimensions style |
804
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
94 feature.set("level_of_service", ""); |
882
27282bfd1ba7
client: make LegendElement more dynamic
Bernhard Reiter <bernhard@intevation.de>
parents:
805
diff
changeset
|
95 return new VectorLayer({ |
804
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
96 source: new VectorSource({ |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
97 features: [feature], |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
98 wrapX: false |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
99 }), |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
100 style: mapStyle |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
101 }); |
21609ba97357
client: improve legendelements for layerselection
Bernhard Reiter <bernhard@intevation.de>
parents:
800
diff
changeset
|
102 } |
799
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
103 } |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
104 }; |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
105 </script> |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
106 |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
107 <style scoped> |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
108 .legendelement { |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
109 max-height: 1.5rem; |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
110 width: 2rem; |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
111 } |
959892ffd72c
client: add new LegendElement to layerselection box
Bernhard Reiter <bernhard@intevation.de>
parents:
diff
changeset
|
112 </style> |