Newer
Older
CallCenterFront / src / components / fMap / components / fMap.vue
StephanieGitHub on 19 Jan 2021 5 KB MOD: 修复第一阶段测试问题
<!--
 * @Description: 航天精一地图
 * @Author: 王晓颖
 * @Date: 2020-08-14 15:15:56
 -->
<template>
  <div style="width: 100%;height:100%">
    <div id="fmap" ref="fmap" class="mapDiv"/>
    <slot/>
  </div>
</template>

<script>
import request from '@/utils/request'
export default {
  name: 'FMap',
  props: {
    id: {
      type: String,
      default: 'fmap'
    },
    type: { // 地图类型
      type: String,
      default: 'vector' // vector,blackVector,satellite
    },
    center: { // 地图中心
      type: Array,
      default: function() {
        return [114.87439648145697, 25.771181100791622, 14]
      }
    },
    zoom: { // 缩放层级
      type: Number,
      default: 13
    },
    minZoom: { // 最小缩放层级
      type: Number,
      default: 9
    },
    maxZoom: { // 最大缩放层级
      type: Number,
      default: 21
    },
    autoResize: { // 自动重绘
      type: Boolean,
      default: true
    },
    layers: {
      type: Object,
      default: () => {
        return {
          default: { name: 'default', desc: '默认图层', symbol: '' },
          case: { name: 'case', desc: '事件地图选点', symbol: 'case-handle', bubbleable: false, selectable: false, editable: false },
          poi: { name: 'poi', title: '兴趣点', symbol: 'point-of-interest', editable: false, bubble: 'bubbleId' }
        }
      }
    },
    interactions: {
      type: Array,
      default: () => {
        return ['keyboardpan', 'boxzoom']
      }
    },
    symbols: {
      type: Array,
      default: () => {
        return [
          { code: 'case-handle', size: [34, 40] },
          { code: 'point-of-interest', size: [20, 20] }
        ]
      }
    },
    poiServices: {
      type: Array,
      default: () => {
        return [
          { name: 'B-XXD-07', desc: '单位', key: '6629U607Z3' },
          { name: 'B-XXD-10', desc: '地名', key: '45F6S2H013' },
          { name: 'B-XXD-03', desc: '场所', key: '5W27676C4D' },
          { name: 'B-XXD-09', desc: '基础设施', key: '738I0T03S8' },
          { name: 'B-XXD-04', desc: '道路交通', key: '1874XP0U62' }
        ]
      }
    },
    poiBaseUrl: {
      type: String,
      default: 'http://11.100.6.5:8084/services/resource/singleSearch/'
    }
  },
  data() {
    return {
      longitude: '0', // 事件经度
      latitude: '0', // 事件纬度
      fmap: null, // fMap
      mapUrls: {
        vectorMap: 'http://11.100.6.5:8084/services/images/GetImage.do?F-Auth-Key=01N2EJWF4L&method=showImageRedisBytable&table=MAP_PGISSL_GZ_V1&version=v1&l={z}&x={y}&y={x}'
      }, // 底图urls
      bgLayers: {
        vectorLayer: null // 矢量
      } // 地图layers
    }
  },
  watch: {
    minZoom(val) {
      this.fmap.setMinZoom(val)
    },
    maxZoom(val) {
      this.fmap.setMaxZoom(val)
    },
    zoom(val) {
      this.fmap.setZoom(val)
    }
  },
  methods: {
    // 初始化底图
    initMap(detail, data) {
      // 注册所有图标
      FUtil.registSymbolDefaultSetting({
        sourcePath: 'static/fMap/img/symbol',
        size: [32, 46]
      })
      FUtil.registSymbols(this.symbols)
      // 声明地图图源
      this.bgLayers.vectorLayer = FUtil.FTDM({ name: '矢量地图',
        icon: 'static/fMap/img/mapVector.png',
        url: this.mapUrls.vectorMap,
        standard: 'Spec_TDTMapV01'
      })

      // 创建地图实例
      const bgLayer = this.bgLayers.vectorLayer
      if (this.fmap == null) {
        this.fmap = new FMap({
          element: this.id,
          bglayer: bgLayer,
          center: this.center,
          controls: ['zoompan'],
          interactions: this.interactions,
          layers: this.layers
        })
        this.$emit('ready', { fmap: this.fmap })
      } else {
        this.fmap.setBgLayer(bgLayer)
      }
      debugger
      // 非查看事件位置点详情
      if (detail) {
        // 查看位置点详情
        if (data && data.lng !== '' && data.lat !== '') {
          this.fmap.addFeatures([data], { xField: 'lng', yField: 'lat', layer: 'case' })
          this.fmap.navigate2Center([data.lng, data.lat])
        }
      }
    },
    queryPoi(keyword) {
      // 清除之前的查询结果
      this.fmap.clearLayer('poi')

      // 分步查询信息点的数据:单位、地名、场所、基础设施、道路交通
      const that = this
      for (const poi of this.poiServices) {
        request({
          url: this.poiBaseUrl + poi.name,
          method: 'post',
          data: {
            keyword: keyword
          },
          headers: {
            'F-Auth-Key': poi.key,
            'Content-Type': 'application/json;charset=UTF-8'
          }
        }).then(response => {
          // console.log(response)
          if (response.code === '1' && response.data.total > 0) {
            const resultList = response.data.data[0].data
            console.log(resultList)
            that.fmap.addFeatures(resultList, { xField: 'x', yField: 'y', layer: 'poi' })
          }
        })
      }
    },
    // 清空地图
    clearMap() {
      this.fmap.clearMap()
    }
  }

}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
.mapDiv{
  width:100%;
  height:100%;
}
</style>