<template> <div id="mapWapper" style="margin-top:-30px"> <div ref="map" class="baseMap" /> </div> </template> <script> import markerIcon from 'leaflet/dist/images/marker-icon.png' import markerIcon2x from 'leaflet/dist/images/marker-icon-2x.png' import markerShadow from 'leaflet/dist/images/marker-shadow.png' import L from 'leaflet' export default { name: 'TianDiTuMapRead', props: { longitude: { type: Number, default: 116.5937 }, latitude: { type: Number, default: 28.249 } }, data() { return { map: null, baselayer: [], markerPoi: null // 事件/部件的marker } }, mounted() { this.initMap() }, methods: { // 初始化地图 initMap() { const map = L.map(this.$refs.map, { minZoom: 3, maxZoom: 18, center: [27.75962, 116.06021], zoom: 15, zoomControl: false, attributionControl: false, crs: L.CRS.EPSG3857 }) this.map = map // data上需要挂载 window.map = map this.baselayer.push(L.tileLayer( 'https://t0.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=216ee92889e17ab1b083fae665d522b8', { subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'] } ).addTo(map)) this.baselayer.push(L.tileLayer( 'https://t0.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=216ee92889e17ab1b083fae665d522b8', { subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'] } ).addTo(map)) this.addCasePointOnMap(this.longitude, this.latitude) }, addCasePointOnMap: function(lng, lat) { if (lng > 0 && lat > 0) { // 添加marker const DefaultIcon = L.icon({ iconUrl: markerIcon, iconRetinaUrl: markerIcon2x, shadowUrl: markerShadow, iconSize: [25, 41], iconAnchor: [12, 41], popupAnchor: [1, -34], tooltipAnchor: [16, -28], shadowSize: [41, 41] }) L.Marker.prototype.options.icon = DefaultIcon this.markerPoi = L.marker([lat, lng]).addTo(this.map) this.map.setView([lat, lng], 16) } else { this.map.setView([27.75962, 116.06021], 12) } } } } </script> <style scoped> .baseMap { height:60vh; width: 100%; margin-top: 25px; border: 1px solid #DCDCDC; border-radius: 4px; } </style>