Open ghost opened 6 years ago
<template> <div> <v-container fluid grid-list-xl pt-0> <v-layout row wrap style="height: 100%"> <v-flex xs12 md12> <v-card> <v-map style="height: 100%" :zoom.sync="zoom" :options="mapOptions" :center="center" :bounds="bounds" :min-zoom="minZoom" :max-zoom="maxZoom" > <v-control-layers :position="layersPosition"></v-control-layers> <v-tile-layer v-for="tileProvider in tileProviders" layerType="base" :name="tileProvider.name" :visible="tileProvider.visible" :url="tileProvider.url" :attribution="tileProvider.attribution" :token="token"/> <v-control-zoom :position="zoomPosition" /> <v-control-scale :imperial="imperial" /> <v-marker v-for="marker in markers" :key="marker.id" :visible="marker.visible" :draggable="marker.draggable" :lat-lng="marker.position" @click="alert(marker)" :icon="marker.icon"> <v-popup :content="marker.tooltip" /> <v-tooltip :content="marker.tooltip" /> </v-marker> <v-layer-group :key="track.id" :visible="track.visible" > <v-layer-group :visible="track.markersVisible" > <v-marker v-for="marker in track.markers" :key="marker.id" :visible="marker.visible" :draggable="marker.draggable" :lat-lng="marker.position" @click="alert(marker)" /> </v-layer-group> <v-polyline :lat-lngs="track.polyline.points" :visible="track.polyline.visible" @click="alert(track.polyline)" /> <v-geo-json :geojson="geojson"></v-geo-json> </v-layer-group> </v-map> </v-card> </v-flex> </v-layout> </v-container> </div> </template> <script> import Vue from 'vue'; import Vue2Leaflet from "vue2-leaflet"; import omnivore from "@mapbox/leaflet-omnivore"; import L from "leaflet"; delete L.Icon.Default.prototype._getIconUrl; L.Icon.Default.mergeOptions({ iconRetinaUrl: require("leaflet/dist/images/marker-icon-2x.png"), iconUrl: require("leaflet/dist/images/marker-icon.png"), shadowUrl: require("leaflet/dist/images/marker-shadow.png") }); import Glyph from 'leaflet.icon.glyph'; var markers1 = [ { position: { lng:-1.219482, lat:47.413220}, visible: true, draggable: true}, { position: { lng:-1.571045, lat:47.457809}} ]; var poly1 = [ { lng:-1.219482, lat:47.413220}, { lng:-1.571045, lat:47.457809} ]; var customIcon = L.icon({ iconUrl: 'images/layers.png', shadowUrl: '' }); var layer = omnivore.gpx('/static/data/gpx/22718.gpx'); var convertedWithStyles = tj.kml(kml, { styles: true }); const tileProviders = [ { name: 'OpenStreetMap', visible: false, 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: true, 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: 'leaflet-maps', components: { vMap: Vue2Leaflet.LMap, vTileLayer: Vue2Leaflet.LTileLayer, vMarker: Vue2Leaflet.LMarker, vPolyline: Vue2Leaflet.LPolyline, vLayerGroup: Vue2Leaflet.LLayerGroup, vTooltip: Vue2Leaflet.LTooltip, vPopup: Vue2Leaflet.LPopup, vControlZoom: Vue2Leaflet.LControlZoom, vControlAttribution: Vue2Leaflet.LControlAttribution, vControlScale: Vue2Leaflet.LControlScale, vControlLayers: Vue2Leaflet.LControlLayers, vGeoJson: Vue2Leaflet.LGeoJson }, data () { return { center: [47.413220, -1.219482], opacity:0.6, token: 'TOKEN HERE', mapOptions: { zoomControl: false , attributionControl: true }, zoom:13, minZoom:1, maxZoom:20, zoomPosition: 'bottomright', attributionPosition: 'bottomright', layersPosition: 'topleft', 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, icon: L.icon.glyph({ prefix: '', glyph: 'A'}) }, { 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 } ], track: { id: "s1", markers: markers1, polyline: { points : poly1, visible: true}, visible: true, markersVisible: true}, bounds: L.latLngBounds(markers1.map((o) => o.position)), geojson: layer } }, methods: { alert(item) { alert('this is ' + JSON.stringify(item)); }, addMarker: function(event) { var newMarker = { position: {lat:50.5505, lng:-0.09}, draggable: true, visible: true}; this.markers.push(newMarker); }, removeMarker: function(index) { this.markers.splice(index, 1); }, centerTrack: function() { var bounds = L.latLngBounds(markers1.map((o) => o.position)); this.bounds = bounds; } } } </script>
This <v-geo-json :geojson="geojson"></v-geo-json> thing is not working. Any idea what I'm missing here ? Does anyone has experience integrating omnivore with vuejs?
<v-geo-json :geojson="geojson"></v-geo-json>
I need to load gpx to my map....
Thanks
This
<v-geo-json :geojson="geojson"></v-geo-json>
thing is not working. Any idea what I'm missing here ? Does anyone has experience integrating omnivore with vuejs?I need to load gpx to my map....
Thanks