|
1 | 1 | <template> |
2 | | - <l-map |
3 | | - class="w-full h-full rounded z-10" |
4 | | - ref="map" |
5 | | - :zoom="zoom" |
6 | | - :center="center" |
7 | | - :bounds="bounds" |
8 | | - :options="mapOptions" |
| 2 | + <l-map |
| 3 | + class="w-full h-full rounded z-10" |
| 4 | + ref="map" |
| 5 | + :zoom="zoom" |
| 6 | + :center="center" |
| 7 | + :bounds="bounds" |
| 8 | + :options="mapOptions" |
9 | 9 | > |
10 | | - <l-tile-layer |
11 | | - v-for="tileProvider in tileProviders" |
12 | | - layerType="base" |
13 | | - :name="tileProvider.name" |
14 | | - :visible="tileProvider.visible" |
15 | | - :url="tileProvider.url" |
16 | | - :attribution="tileProvider.attribution" |
17 | | - :key="tileProvider.name" |
18 | | - /> |
| 10 | + <l-tile-layer |
| 11 | + v-for="tileProvider in tileProviders" |
| 12 | + layerType="base" |
| 13 | + :name="tileProvider.name" |
| 14 | + :visible="tileProvider.visible" |
| 15 | + :url="tileProvider.url" |
| 16 | + :attribution="tileProvider.attribution" |
| 17 | + :key="tileProvider.name" |
| 18 | + /> |
19 | 19 |
|
20 | | - <l-geo-json |
21 | | - ref="geojsonLayer" |
22 | | - :geojson="geojson" |
23 | | - :options="options" |
24 | | - ></l-geo-json> |
| 20 | + <l-geo-json |
| 21 | + ref="geojsonLayer" |
| 22 | + :geojson="geojson" |
| 23 | + :options="options" |
| 24 | + ></l-geo-json> |
25 | 25 |
|
26 | 26 | </l-map> |
27 | 27 | </template> |
28 | 28 |
|
29 | 29 | <script> |
30 | | -import {LMap, LTileLayer, LGeoJson} from 'vue2-leaflet' |
| 30 | + import {LMap, LTileLayer, LGeoJson} from 'vue2-leaflet' |
31 | 31 |
|
32 | | -export default { |
33 | | - props: { |
34 | | - type: String, |
35 | | - value: { |
36 | | - default: null |
| 32 | + export default { |
| 33 | + props: { |
| 34 | + type: String, |
| 35 | + value: { |
| 36 | + default: null |
| 37 | + }, |
| 38 | + edit: { |
| 39 | + type: Boolean, |
| 40 | + default: false |
| 41 | + }, |
| 42 | + latitude_field: String, |
| 43 | + longitude_field: String, |
| 44 | + geojson_field: String, |
| 45 | + zoom: Number, |
37 | 46 | }, |
38 | | - edit: { |
39 | | - type: Boolean, |
40 | | - default: false |
| 47 | + components: { |
| 48 | + LMap, |
| 49 | + LTileLayer, |
| 50 | + LGeoJson, |
41 | 51 | }, |
42 | | - latitude_field: String, |
43 | | - longitude_field: String, |
44 | | - geojson_field: String, |
45 | | - }, |
46 | | - components: { |
47 | | - LMap, |
48 | | - LTileLayer, |
49 | | - LGeoJson, |
50 | | - }, |
51 | | - data() { |
52 | | - return { |
53 | | - map: null, |
54 | | - geojsonLayer: null, |
55 | | - center: [0, 0], |
56 | | - bounds: null, |
57 | | - zoom: 8, |
58 | | - tileProviders:[{ |
59 | | - name: 'OpenStreetMap', |
60 | | - visible: true, |
61 | | - attribution: '© <a target="_blank" href="http://osm.org/copyright">OpenStreetMap</a> contributors', |
62 | | - url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png' |
63 | | - }], |
64 | | - options: { |
65 | | - style: function () { |
66 | | - return { |
67 | | - weight: 2, |
68 | | - color: 'blue', |
69 | | - opacity: 0.8, |
70 | | - fillColor: 'blue', |
71 | | - fillOpacity: 0.3 |
72 | | - } |
73 | | - }, |
74 | | - pointToLayer: function (feature, latlng) { |
75 | | - let base64img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=" |
| 52 | + data() { |
| 53 | + return { |
| 54 | + map: null, |
| 55 | + geojsonLayer: null, |
| 56 | + center: [0, 0], |
| 57 | + bounds: null, |
| 58 | + tileProviders: [{ |
| 59 | + name: 'OpenStreetMap', |
| 60 | + visible: true, |
| 61 | + attribution: '© <a target="_blank" href="http://osm.org/copyright">OpenStreetMap</a> contributors', |
| 62 | + url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png' |
| 63 | + }], |
| 64 | + options: { |
| 65 | + style: function () { |
| 66 | + return { |
| 67 | + weight: 2, |
| 68 | + color: 'blue', |
| 69 | + opacity: 0.8, |
| 70 | + fillColor: 'blue', |
| 71 | + fillOpacity: 0.3 |
| 72 | + } |
| 73 | + }, |
| 74 | + pointToLayer: function (feature, latlng) { |
| 75 | + let base64img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=" |
76 | 76 |
|
77 | | - let icon = L.icon({ |
78 | | - iconUrl: base64img, |
79 | | - iconSize: [25, 41], |
80 | | - iconAnchor: [13, 40], |
81 | | - }) |
| 77 | + let icon = L.icon({ |
| 78 | + iconUrl: base64img, |
| 79 | + iconSize: [25, 41], |
| 80 | + iconAnchor: [13, 40], |
| 81 | + }) |
82 | 82 |
|
83 | | - return L.marker(latlng).setIcon(icon) |
84 | | - } |
85 | | - }, |
86 | | - mapOptions: { |
87 | | - }, |
88 | | - } |
89 | | - }, |
90 | | - computed: { |
91 | | - geojson(){ |
92 | | - if(this.type == "LatLon" || this.type == "LatLonField"){ |
93 | | - return { |
94 | | - type: 'Point', |
95 | | - coordinates: [ |
96 | | - this.value.lon, |
97 | | - this.value.lat, |
98 | | - ] |
| 83 | + return L.marker(latlng).setIcon(icon) |
| 84 | + } |
| 85 | + }, |
| 86 | + mapOptions: {}, |
| 87 | + } |
| 88 | + }, |
| 89 | + computed: { |
| 90 | + geojson() { |
| 91 | + if (this.type == "LatLon" || this.type == "LatLonField") { |
| 92 | + return { |
| 93 | + type: 'Point', |
| 94 | + coordinates: [ |
| 95 | + this.value.lon, |
| 96 | + this.value.lat, |
| 97 | + ] |
| 98 | + } |
| 99 | + } else if (this.type == "GeoJSON") { |
| 100 | + return JSON.parse(this.value) |
| 101 | + } else { |
| 102 | + return this.value |
99 | 103 | } |
100 | | - }else if(this.type == "GeoJSON"){ |
101 | | - return JSON.parse(this.value) |
102 | | - }else{ |
103 | | - return this.value |
104 | 104 | } |
105 | | - } |
106 | | - }, |
107 | | - mounted() { |
108 | | - this.$nextTick(() => { |
109 | | - this.map = this.$refs.map.mapObject |
| 105 | + }, |
| 106 | + mounted() { |
| 107 | + this.$nextTick(() => { |
| 108 | + this.map = this.$refs.map.mapObject |
110 | 109 |
|
111 | | - this.geojsonLayer = this.$refs.geojsonLayer.mapObject |
| 110 | + this.geojsonLayer = this.$refs.geojsonLayer.mapObject |
112 | 111 |
|
113 | | - this.setCenter() |
114 | | - }) |
| 112 | + this.setCenter() |
| 113 | +
|
| 114 | + }) |
115 | 115 |
|
116 | | - }, |
117 | | - methods: { |
118 | | - setCenter(){ |
119 | | - if(this.geojson !== null){ |
120 | | - this.map.fitBounds(L.geoJSON(this.geojson).getBounds(),{maxZoom:12}) |
121 | | - } |
122 | 116 | }, |
| 117 | + methods: { |
| 118 | + setCenter() { |
| 119 | + if (this.geojson !== null) { |
| 120 | + this.map.fitBounds(L.geoJSON(this.geojson).getBounds(), {maxZoom: 18}).setZoom(this.zoom) |
| 121 | + } |
| 122 | + }, |
| 123 | + } |
123 | 124 | } |
124 | | -} |
125 | 125 | </script> |
126 | 126 |
|
127 | 127 | <style scoped> |
|
0 commit comments