vue-antv 地图(PointLayer)

捣鼓地图简直生无可恋,不mark下真对不起浪费的脑细胞~~~

牵涉到地图加载,打点,弹窗,PointLayer那里有点繁琐,应该可以优化,交给后续吧~先上图

<div id="userMap" style="height: 100%;"></div>
import {Scene, PointLayer, Popup, Marker, Zoom} from '@antv/l7'
onMounted(() => {
      initUserMap()
    })

//危险企业
    let dangerLayer = null
    let dangerData = ref([])
    //绿色企业
    let greenLayer = null
    let greenData = ref([])
    //普通企业
    let normalLayer = null
    let normalData = ref([])
    let pop = null

    const drawMarker = (scene) => {
      scene.addImage('00', require('../../assets/screen/icon_danger.png'));
      scene.addImage('01', require('../../assets/screen/icon_star.png'));

      ScreenService.getInstance().companyInfo().subscribe(res => {
        let markerEl = null

        dangerData.value = res.data.filter(dot => dot.latitude && dot.isDangerousGoodsPort);
        greenData.value = res.data.filter(dot => dot.latitude && dot.isGreenPort);
        normalData.value = res.data.filter(dot => dot.latitude && !dot.isGreenPort && !dot.isDangerousGoodsPort);
        console.log('normalData.value',normalData.value)
        console.log('greenData.value',greenData.value)

        normalLayer = new PointLayer({
          visible:true,
          zIndex:2,
          cursor:'pointer',
        })
            .source(normalData.value, {
              parser: {
                type: 'json',
                x: 'longitude',
                y: 'latitude'
              }
            })
            .shape('circle')
            .size(6)
            .color('#0f0')
            .active(true)
        normalLayer.on('click', (ev) => {
          sessionStorage.setItem('portId', ev.feature.id)
          window.open('#/case')
        })
        normalLayer.on('mousemove', (ev) => {
          pop = new Popup({
            offsets: [ 0, 0 ],
            closeButton: false,
          })
              .setLnglat({lng: ev.feature.longitude, lat: ev.feature.latitude})
              .setHTML(`<span>${ev.feature.companyName}</span>`);
          scene.addPopup(pop);
        })
        scene.addLayer(normalLayer);

        dangerLayer = new PointLayer({
          visible:true,
          zIndex:10,
          cursor:'pointer',
        })
            .source(dangerData.value, {
              parser: {
                type: 'json',
                x: 'longitude',
                y: 'latitude'
              }
            })
            .shape('companyName', [ '00' ])
            .size(15),

        dangerLayer.on('click', (ev) => {
          sessionStorage.setItem('portId', ev.feature.id)
          window.open('#/case')
        })
        dangerLayer.on('mousemove', (ev) => {
          pop = new Popup({
            offsets: [ 0, 0 ],
            closeButton: false,
          })
              .setLnglat({lng: ev.feature.longitude, lat: ev.feature.latitude})
              .setHTML(`<span>${ev.feature.companyName}</span>`);
          scene.addPopup(pop);
        })
        scene.addLayer(dangerLayer);

        greenLayer = new PointLayer({
          visible:true,
          zIndex:10,
          cursor:'pointer',
        })
            .source(greenData.value, {
              parser: {
                type: 'json',
                x: 'longitude',
                y: 'latitude'
              }
            })
            .shape('companyName', [ '01' ])
            .size(15)
        greenLayer.on('click', (ev) => {
          sessionStorage.setItem('portId', ev.feature.id)
          window.open('#/case')
        })
        greenLayer.on('mousemove', (ev) => {
          pop = new Popup({
            offsets: [ 0, 0 ],
            closeButton: false,
          })
              .setLnglat({lng: ev.feature.longitude, lat: ev.feature.latitude})
              .setHTML(`<span>${ev.feature.companyName}</span>`);
          scene.addPopup(pop);
        })
        scene.addLayer(greenLayer);
      })
    }


    let map = null;
    // 地图
    const initUserMap = () => {
      map = new GaodeMap({
        pitch: 0,
        style: 'dark',
        mapStyle: 'amap://styles/darkblue',
        center: [120.423730, 31.629810],
        zoom: 10,
        token: 'ced0d726cd96553ba8b5b3521671aaf4'
      })

      const scene = new Scene({
        id: 'userMap',
        map: map,
        logoVisible: false,
      });


      scene.on('loaded', () => {
        drawMarker(scene)
      });

    }
<style lang="scss" scoped>
:deep(.l7-popup) {
  border-radius: 5px;

  .l7-popup-tip {
    border-top-color: rgba(23, 103, 159,.6);
  }

  .l7-popup-content {
    padding:8px;
    color: #fff;
    background: rgba(23, 103, 159,.6) !important;
    border: 1px solid #0e2740 !important;

    .l7-popup-close-button {
      fill: #fff;
    }

    .l7-layer-popup__value {
      font-size: 16px;
      color: aqua;
    }
  }
}
</style>

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
vue-baidu-map 是一个基于百度地图的 Vue.js 组件库,用于在 Vue.js 的项目中集成百度地图。它提供了一系列的组件与指令,方便开发者在网页中使用百度地图的各种功能。 但是,vue-baidu-map 目前还无法直接实现离线地图功能。因为百度地图官方并没有提供针对 vue-baidu-map 的离线地图方案。百度地图的离线地图功能依赖于官方的 JavaScript API,并且需要下载离线地图数据包才能实现离线使用。 在 vue-baidu-map 中,可以使用 vue-baidu-map 的 Map 组件来显示地图,并且可以通过设置 center 和 zoom 属性来移动地图及调整缩放级别。但是,由于离线地图功能没有直接集成在 vue-baidu-map 中,所以在使用离线地图时,需要开发者自行处理地图数据的下载与加载。 要实现离线地图,可以按照以下步骤进行: 1. 下载百度地图的离线地图数据包。 2. 使用百度地图 JavaScript API 的离线地图加载方法,将地图数据加载到页面中。 3. 使用 vue-baidu-map 的 Map 组件,通过设置 center 和 zoom 属性来显示加载的离线地图。 需要注意的是,在使用离线地图时,需要合法地获取相应地图数据的使用权,遵守百度地图的使用规定。同时,由于离线地图数据包较大,需要提前下载并将其加载到项目中,因此需要对项目的资源和性能做出合理评估。 总之,虽然 vue-baidu-map 目前无法直接实现离线地图功能,但通过结合百度地图的离线地图功能及 vue-baidu-map 的组件和指令,开发者可以自行处理地图数据的下载与加载,实现离线地图显示的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值