# Features showcase
Zoom: level
position:
Center : [ 51.505, -0.09 ]
Bounds : { "_southWest": { "lat": 51.476483373501964, "lng": -0.14668464136775586 }, "_northEast": { "lat": 51.52948330894063, "lng": -0.019140238291583955 } }
Contol Layers position: Attribution position:
Center : [ 51.505, -0.09 ]
Bounds : { "_southWest": { "lat": 51.476483373501964, "lng": -0.14668464136775586 }, "_northEast": { "lat": 51.52948330894063, "lng": -0.019140238291583955 } }
Contol Layers position: Attribution position:
List of Markers
Marker | Latitude | Longitude | Tooltip | Is Draggable ? | Is Visible ? | Remove |
---|---|---|---|---|---|---|
Marker 1 | ||||||
Marker 2 | ||||||
Marker 3 | ||||||
Marker 4 |
Layer | Is Visible ? | Are Markers visible ? | Is Polyline visible ? |
---|---|---|---|
Layer 1 |
![](https://c.tile.openstreetmap.org/13/4094/2724.png)
![](https://b.tile.openstreetmap.org/13/4094/2723.png)
![](https://b.tile.openstreetmap.org/13/4093/2724.png)
![](https://a.tile.openstreetmap.org/13/4095/2724.png)
![](https://a.tile.openstreetmap.org/13/4094/2725.png)
![](https://a.tile.openstreetmap.org/13/4093/2723.png)
![](https://c.tile.openstreetmap.org/13/4095/2723.png)
![](https://c.tile.openstreetmap.org/13/4093/2725.png)
![](https://b.tile.openstreetmap.org/13/4095/2725.png)
![](https://a.tile.openstreetmap.org/13/4092/2724.png)
![](https://b.tile.openstreetmap.org/13/4096/2724.png)
![](https://c.tile.openstreetmap.org/13/4092/2723.png)
![](https://a.tile.openstreetmap.org/13/4096/2723.png)
![](https://b.tile.openstreetmap.org/13/4092/2725.png)
![](https://c.tile.openstreetmap.org/13/4096/2725.png)
show code
<template> <div> <div> Zoom: level <input v-model.number="zoom" type="number"> position: <select v-model="zoomPosition"> <option v-for="(position, index) in Positions" :key="index" :value="position" > {{ position }} </option> </select> <br> Center : <span> {{ center }} </span><br> Bounds : <span> {{ bounds }} </span><br> <button name="button" @click="fitPolyline" > Fit map to polyline </button><br><br> Contol Layers position: <select v-model="layersPosition"> <option v-for="(position, index) in Positions" :key="index" :value="position" > {{ position }} </option> </select> Attribution position: <select v-model="attributionPosition"> <option v-for="(position, index) in Positions" :key="index" :value="position" > {{ position }} </option> </select> <hr> <h3>List of Markers</h3> <button name="button" @click="addMarker" > Add a marker </button> <table> <tr> <th>Marker</th> <th>Latitude</th> <th>Longitude</th> <th>Tooltip</th> <th>Is Draggable ?</th> <th>Is Visible ?</th> <th>Remove</th> </tr> <tr v-for="(item, index) in markers" :key="index" > <td>{{ 'Marker ' + (index + 1) }}</td> <td> <input v-model.number="item.position.lat" type="number" > </td> <td> <input v-model.number="item.position.lng" type="number" > </td> <td> <input v-model="item.tooltip" type="text" > </td> <td style="text-align: center"> <input v-model="item.draggable" type="checkbox" > </td> <td style="text-align: center"> <input v-model="item.visible" type="checkbox" > </td> <td style="text-align: center"> <input type="button" value="X" @click="removeMarker(index)" > </td> </tr> </table> <hr> <table> <tr> <th>Layer</th> <th>Is Visible ?</th> <th>Are Markers visible ?</th> <th>Is Polyline visible ?</th> </tr> <tr v-for="(item, index) in stuff" :key="index" > <td>{{ 'Layer ' + (index + 1) }}</td> <td style="text-align: center"> <input v-model="item.visible" type="checkbox" > </td> <td style="text-align: center"> <input v-model="item.markersVisible" type="checkbox" > </td> <td style="text-align: center"> <input v-model="item.polyline.visible" type="checkbox" > </td> </tr> </table> </div> <l-map :zoom.sync="zoom" :options="mapOptions" :center="center" :bounds="bounds" :min-zoom="minZoom" :max-zoom="maxZoom" style="height: 500px; width: 100%" > <l-control-layers :position="layersPosition" :collapsed="false" :sort-layers="true" /> <l-tile-layer v-for="tileProvider in tileProviders" :key="tileProvider.name" :name="tileProvider.name" :visible="tileProvider.visible" :url="tileProvider.url" :attribution="tileProvider.attribution" :token="token" layer-type="base" /> <l-control-zoom :position="zoomPosition" /> <l-control-attribution :position="attributionPosition" :prefix="attributionPrefix" /> <l-control-scale :imperial="imperial" /> <l-marker v-for="marker in markers" :key="marker.id" :visible="marker.visible" :draggable="marker.draggable" :lat-lng.sync="marker.position" :icon="marker.icon" @click="alert(marker)" > <l-popup :content="marker.tooltip" /> <l-tooltip :content="marker.tooltip" /> </l-marker> <l-layer-group layer-type="overlay" name="Layer polyline" > <l-polyline v-for="item in polylines" :key="item.id" :lat-lngs="item.points" :visible="item.visible" @click="alert(item)" /> </l-layer-group> <l-layer-group v-for="item in stuff" :key="item.id" :visible.sync="item.visible" layer-type="overlay" name="Layer 1" > <l-layer-group :visible="item.markersVisible"> <l-marker v-for="marker in item.markers" :key="marker.id" :visible="marker.visible" :draggable="marker.draggable" :lat-lng="marker.position" @click="alert(marker)" /> </l-layer-group> <l-polyline :lat-lngs="item.polyline.points" :visible="item.polyline.visible" @click="alert(item.polyline)" /> </l-layer-group> </l-map> </div> </template> <script> import { latLngBounds } from 'leaflet'; import { LMap, LTileLayer, LMarker, LPolyline, LLayerGroup, LTooltip, LPopup, LControlZoom, LControlAttribution, LControlScale, LControlLayers } from 'vue2-leaflet'; const markers1 = [ { position: { lng: -1.219482, lat: 47.41322 }, visible: true, draggable: true, }, { position: { lng: -1.571045, lat: 47.457809 } }, { position: { lng: -1.560059, lat: 47.739323 } }, { position: { lng: -0.922852, lat: 47.886881 } }, { position: { lng: -0.769043, lat: 48.231991 } }, { position: { lng: 0.395508, lat: 48.268569 } }, { position: { lng: 0.604248, lat: 48.026672 } }, { position: { lng: 1.2854, lat: 47.982568 } }, { position: { lng: 1.318359, lat: 47.894248 } }, { position: { lng: 1.373291, lat: 47.879513 } }, { position: { lng: 1.384277, lat: 47.798397 } }, { position: { lng: 1.329346, lat: 47.754098 } }, { position: { lng: 1.329346, lat: 47.680183 } }, { position: { lng: 0.999756, lat: 47.635784 } }, { position: { lng: 0.86792, lat: 47.820532 } }, { position: { lng: 0.571289, lat: 47.820532 } }, { position: { lng: 0.439453, lat: 47.717154 } }, { position: { lng: 0.439453, lat: 47.61357 } }, { position: { lng: -0.571289, lat: 47.487513 } }, { position: { lng: -0.615234, lat: 47.680183 } }, { position: { lng: -0.812988, lat: 47.724545 } }, { position: { lng: -1.054688, lat: 47.680183 } }, { position: { lng: -1.219482, lat: 47.41322 } }, ]; const poly1 = [ { lng: -1.219482, lat: 47.41322 }, { lng: -1.571045, lat: 47.457809 }, { lng: -1.560059, lat: 47.739323 }, { lng: -0.922852, lat: 47.886881 }, { lng: -0.769043, lat: 48.231991 }, { lng: 0.395508, lat: 48.268569 }, { lng: 0.604248, lat: 48.026672 }, { lng: 1.2854, lat: 47.982568 }, { lng: 1.318359, lat: 47.894248 }, { lng: 1.373291, lat: 47.879513 }, { lng: 1.384277, lat: 47.798397 }, { lng: 1.329346, lat: 47.754098 }, { lng: 1.329346, lat: 47.680183 }, { lng: 0.999756, lat: 47.635784 }, { lng: 0.86792, lat: 47.820532 }, { lng: 0.571289, lat: 47.820532 }, { lng: 0.439453, lat: 47.717154 }, { lng: 0.439453, lat: 47.61357 }, { lng: -0.571289, lat: 47.487513 }, { lng: -0.615234, lat: 47.680183 }, { lng: -0.812988, lat: 47.724545 }, { lng: -1.054688, lat: 47.680183 }, { lng: -1.219482, lat: 47.41322 }, ]; const tileProviders = [ { name: 'OpenStreetMap', visible: true, attribution: '© <a target="_blank" href="http://osm.org/copyright">OpenStreetMap</a> contributors', url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', }, { name: 'OpenTopoMap', visible: false, url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', attribution: 'Map data: © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>, <a href="http://viewfinderpanoramas.org">SRTM</a> | Map style: © <a href="https://opentopomap.org">OpenTopoMap</a> (<a href="https://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA</a>)', }, ]; export default { name: 'Example', components: { LMap, LTileLayer, LMarker, LPolyline, LLayerGroup, LTooltip, LPopup, LControlZoom, LControlAttribution, LControlScale, LControlLayers, }, data() { return { center: [51.505, -0.09], opacity: 0.6, token: 'your token if using mapbox', mapOptions: { zoomControl: false, attributionControl: false, zoomSnap: true, }, zoom: 3, minZoom: 1, maxZoom: 20, zoomPosition: 'topleft', attributionPosition: 'bottomright', layersPosition: 'topright', attributionPrefix: 'Vue2Leaflet', imperial: false, Positions: ['topleft', 'topright', 'bottomleft', 'bottomright'], tileProviders: tileProviders, markers: [ { id: 'm1', position: { lat: 51.505, lng: -0.09 }, tooltip: 'tooltip for marker1', draggable: true, visible: true, }, { id: 'm2', position: { lat: 51.8905, lng: -0.09 }, tooltip: 'tooltip for marker2', draggable: true, visible: false, }, { id: 'm3', position: { lat: 51.005, lng: -0.09 }, tooltip: 'tooltip for marker3', draggable: true, visible: true, }, { id: 'm4', position: { lat: 50.7605, lng: -0.09 }, tooltip: 'tooltip for marker4', draggable: true, visible: false, }, ], polylines: [ { id: 'p1', points: [ { lat: 37.772, lng: -122.214 }, { lat: 21.291, lng: -157.821 }, { lat: -18.142, lng: -181.569 }, { lat: -27.467, lng: -206.973 }, ], visible: true, }, { id: 'p2', points: [ [-73.91, 40.78], [-87.62, 41.83], [-96.72, 32.76], ], visible: true, }, ], stuff: [ { id: 's1', markers: markers1, polyline: { points: poly1, visible: true }, visible: true, markersVisible: true, }, ], bounds: latLngBounds( { lat: 51.476483373501964, lng: -0.14668464136775586 }, { lat: 51.52948330894063, lng: -0.019140238291583955 } ), }; }, methods: { alert(item) { alert('this is ' + JSON.stringify(item)); }, addMarker: function() { const newMarker = { position: { lat: 50.5505, lng: -0.09 }, draggable: true, visible: true, }; this.markers.push(newMarker); }, removeMarker: function(index) { this.markers.splice(index, 1); }, fitPolyline: function() { const bounds = latLngBounds(markers1.map(o => o.position)); this.bounds = bounds; }, }, }; </script>
Copied!
← Feature group GeoJson →