Newer
Older
dcms_front / src / components / Map / leafletMapRead.vue
<template>
  <div>
    <div v-loading="mapLoading" id="map" ref="mapDiv" class="baseMap" />
  </div>
</template>

<script>
import L from 'leaflet'
import 'leaflet/dist/leaflet.css'
import { mapGetters } from 'vuex'
const esri = require('esri-leaflet')
export default {
  name: 'LeafletMapRead',
  props: {
    longitude: {
      type: Number,
      default: 116.5937
    },
    latitude: {
      type: Number,
      default: 28.249
    }
  },
  data() {
    return {
      baseLayer: [],
      mapLoading: false,
      map: null
    }
  },
  computed: {
    ...mapGetters([
      'baseUrl',
      'partsUrl',
      'mapUrl',
      'gridUrl',
      'partsAllUrl'
    ])
  },
  mounted() {
    this.initMap()
    this.addMarker()
  },
  methods: {
    initMap() {
      this.mapLoading = true
      const map = L.map('map', {
        minZoom: 13,
        maxZoom: 24,
        center: this.baseConfig.center,
        zoom: this.baseConfig.zoom,
        zoomControl: false,
        attributionControl: false,
        crs: L.CRS.EPSG3857
      })
      map.doubleClickZoom.disable()
      this.map = map // data上需要挂载
      window.map = map

      // 加载天地图底图和标注
      this.baseLayer.push(L.tileLayer(this.baseConfig.mapUrl).addTo(map))
      this.baseLayer.push(L.tileLayer(this.baseConfig.labelUrl).addTo(map))

      esri.dynamicMapLayer({
        url: `${this.baseUrl}${this.mapUrl}`,
        opacity: 1,
        f: 'image'
      }).addTo(map)

      this.mapLoading = false
    },

    addMarker() {
      const icon = L.icon({
        iconUrl: require('@/assets/icons/icon-position.png'),
        iconSize: [32, 32],
        iconAnchor: [16, 32],
        popupAnchor: [0, -32]
      })
      const latlng = L.latLng([this.latitude, this.longitude])
      const feat = L.marker(latlng, { icon: icon })
      feat.addTo(this.map)
      this.map.setView({ lat: this.latitude, lng: this.longitude }, 18)
    }
  }
}

</script>

<style scoped>
  .baseMap {
    height:60vh;
    width: 100%;
    margin-top: 25px;
    border: 1px solid #DCDCDC;
    border-radius: 4px;
    margin-top: -10px;
  }
  .leaflet-container {
    background: #fff0;
  }
</style>