Skip to content

Commit f116ab2

Browse files
authored
Merge pull request #11 from bomshteyn/master
Multiple Fixes: Default height, ability to change zoom and vue2-leaflet upgrade Awesome - thanks again!
2 parents 399d844 + bc450db commit f116ab2

File tree

6 files changed

+1710
-25854
lines changed

6 files changed

+1710
-25854
lines changed

dist/js/field.js

Lines changed: 1 addition & 25317 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616
},
1717
"dependencies": {
1818
"vue": "^2.5.0",
19-
"vue2-leaflet": "^1.0.2"
19+
"vue2-leaflet": "^1.2.0"
2020
}
2121
}

resources/js/components/DetailField.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
</div>
1010
<div class="w-3/4 py-4">
1111
<div class="rounded flex flex-col" :style="'height: ' + field.height">
12-
<map-detail
13-
:type="field.spatialType"
12+
<map-detail
13+
:type="field.spatialType"
14+
:zoom="field.zoom"
1415
:value="field.value"
1516
:latitude_field="field.latitude_field"
1617
:longitude_field="field.longitude_field"

resources/js/components/MapDetail.vue

Lines changed: 104 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,127 +1,127 @@
11
<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"
99
>
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+
/>
1919

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>
2525

2626
</l-map>
2727
</template>
2828

2929
<script>
30-
import {LMap, LTileLayer, LGeoJson} from 'vue2-leaflet'
30+
import {LMap, LTileLayer, LGeoJson} from 'vue2-leaflet'
3131
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,
3746
},
38-
edit: {
39-
type: Boolean,
40-
default: false
47+
components: {
48+
LMap,
49+
LTileLayer,
50+
LGeoJson,
4151
},
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: '&copy; <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: '&copy; <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="
7676
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+
})
8282
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
99103
}
100-
}else if(this.type == "GeoJSON"){
101-
return JSON.parse(this.value)
102-
}else{
103-
return this.value
104104
}
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
110109
111-
this.geojsonLayer = this.$refs.geojsonLayer.mapObject
110+
this.geojsonLayer = this.$refs.geojsonLayer.mapObject
112111
113-
this.setCenter()
114-
})
112+
this.setCenter()
113+
114+
})
115115
116-
},
117-
methods: {
118-
setCenter(){
119-
if(this.geojson !== null){
120-
this.map.fitBounds(L.geoJSON(this.geojson).getBounds(),{maxZoom:12})
121-
}
122116
},
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+
}
123124
}
124-
}
125125
</script>
126126

127127
<style scoped>

src/Map.php

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,36 @@ class Map extends Field
1414

1515
public $showOnIndex = false;
1616

17-
public function height($height = '300px'){
18-
return $this->withMeta([
19-
'height' => $height
17+
public $height = '300px';
18+
19+
public $zoom = 8;
20+
21+
public function __construct($name, $attribute = null, $resolveCallback = null)
22+
{
23+
parent::__construct($name, $attribute, $resolveCallback);
24+
25+
$this->withMeta([
26+
'height' => $this->height,
27+
'zoom' => $this->zoom,
2028
]);
2129
}
2230

31+
public function height($height){
32+
if($height) {
33+
return $this->withMeta([
34+
'height' => $height
35+
]);
36+
}
37+
}
38+
39+
public function zoom($zoom){
40+
if($zoom) {
41+
return $this->withMeta([
42+
'zoom' => $zoom
43+
]);
44+
}
45+
}
46+
2347
public function spatialType($type){
2448
return $this->withMeta([
2549
'spatialType' => $type
@@ -36,7 +60,7 @@ public function latitude($latitude_field){
3660

3761
public function longitude($longitude_field){
3862
$this->attribute = null;
39-
63+
4064
return $this->withMeta([
4165
'longitude_field' => $longitude_field
4266
]);
@@ -57,7 +81,7 @@ public function resolveAttribute($resource, $attribute = null){
5781
'lat' => $resource->{$this->meta['latitude_field']},
5882
'lon' => $resource->{$this->meta['longitude_field']},
5983
];
60-
break;
84+
break;
6185
case 'LatLonField':
6286
$parts = collect(explode(',',$resource->{$attribute}))->map(function($item){
6387
return trim($item);
@@ -67,13 +91,13 @@ public function resolveAttribute($resource, $attribute = null){
6791
'lat' => $parts[0],
6892
'lon' => $parts[1],
6993
];
70-
break;
94+
break;
7195
case 'GeoJSON':
7296
return $resource->{$attribute};
73-
break;
97+
break;
7498
default:
7599
return $resource->{$attribute};
76-
break;
100+
break;
77101
}
78102
}
79103

0 commit comments

Comments
 (0)