Mapbox 添加标记点(一)

官方例子:https://docs.mapbox.com/mapbox-gl-js/example/cluster/

效果图:
在这里插入图片描述
实现:
map组件:

<template>
  <div style="height: 100%; width: 100%; text-align: left">
    <div ref="basicMapbox" :style="mapSize" class="mapClass"></div>
  </div>
</template>
<script>
import mapboxgl from 'mapbox-gl'

export default {
  props: {
    mapWidth: {
      type: String,
    },
    mapHeight: {
      type: String,
    },
    mapData: {
      type: Array,
      required: false,
    },
  },
  components: {},
  data() {
    return {
      mapInst: '',
      // 组件加载后隐藏
      showInfoWindow: false,
      popupTemp: null,
      lengeData: {
        lev1_show: true,
        lev2_show: true,
      },
      visible: false,
      mapDataCopy: JSON.parse(JSON.stringify(this.mapData)), // 标记点数据
      currentMarkers: [], //标记点集合
    }
  },
  mounted() {
    this.init()
  },
  methods: {
    // 初始化
    init() {
      // 官网注册 accessToken 
      mapboxgl.accessToken = 'pk.eyJ1IjoibWVpaW4xxxxxxxxxxxxxxxxxGt4MTJ4bjBxcjNmcng5NCJ9.GRpGEmZhxJ58EkNW6Ta_AQ'
      // 初始化地图
      this.mapInst = new mapboxgl.Map({
        container: this.$refs.basicMapbox,
        style: 'https://xxxxxxxx.cn/vector-styles/mapbox/mapbox-light.json',
        center: [113.34411, 23.141], // 地图初始化时的地理中心点
        zoom: 8,
      })
      // 加载标记点
      this.loadPoint()
    },
    // 加载标记点位
    loadPoint() {
      this.mapDataCopy.forEach((item) => {
        let coordinate = [Number(item.longitude), Number(item.latitude)]
        let el = document.createElement('div')
        el.id = 'markerId'
        if (item.status === 1) { //绿色标记点
          el.style.backgroundColor = '#3AB236'
          el.style.width = 14 + 'px'
          el.style.height = 14 + 'px'
          el.style.borderRadius = '50%'
        } else if (item.status === 2) { //红色标记点
          el.style.backgroundColor = '#EC4646'
          el.style.width = 14 + 'px'
          el.style.height = 14 + 'px'
          el.style.borderRadius = '50%'
        }

        let marker = new mapboxgl.Marker(el).setLngLat(coordinate).setOffset([0, -19]).addTo(this.mapInst) // 将标记添加到地图上
        this.currentMarkers.push(marker)
      })
    },
  },
  computed: {
    mapSize() {
      let styleObj = {
        width: this.mapWidth,
        height: this.mapHeight,
      }
      return styleObj
    },
  },
  watch: {
    mapData: function (val) {
      if (val) {
        this.mapDataCopy = JSON.parse(JSON.stringify(this.mapData))
        this.init()
      }
    },
  },
}
</script>

调用:

<template>
  <div>
    <Mapboxpoint :mapData="mapData" mapWidth="100%" :mapHeight="mapboxHeight" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      mapData: [], // 点位的经纬度数据
      mapboxHeight: '600px',
    }
  },
}
</script>

<style lang="scss" scoped>
</style>
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
要给每个标记添加不同的弹窗,可以使用Mapbox GL的Popup对象。在添加标记点时,可以为每个标记点创建一个Popup对象,并在需要时将其打开。 以下是一个示例,展示如何为每个标记添加不同的弹窗: ```javascript // 创建一个地图 mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN'; var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [-74.5, 40], zoom: 9 }); // 添加标记点和弹窗 var markers = [ { coordinates: [-74.5, 40], // 标记点的经纬度 name: 'New York City', // 标记点的名称 description: 'The largest city in the United States.' // 标记点的描述信息 }, { coordinates: [-77.0369, 38.9072], name: 'Washington D.C.', description: 'The capital city of the United States.' }, { coordinates: [-118.2437, 34.0522], name: 'Los Angeles', description: 'The second largest city in the United States.' } ]; markers.forEach(function(marker) { // 创建标记点 var el = document.createElement('div'); el.className = 'marker'; // 创建Popup对象 var popup = new mapboxgl.Popup({ offset: 25 }).setHTML('<h3>' + marker.name + '</h3><p>' + marker.description + '</p>'); // 将Popup对象与标记点关联 new mapboxgl.Marker(el) .setLngLat(marker.coordinates) .setPopup(popup) .addTo(map); }); ``` 在这个示例中,我们首先创建了一个包含每个标记点的数组。然后,我们使用forEach循环遍历每个标记点,并为每个标记点创建一个Popup对象。我们将Popup对象的HTML内容设置为标记点的名称和描述信息。最后,我们将Popup对象与标记点关联,并将标记添加到地图上。 这个示例只是一个简单的演示,你可以根据自己的需求来更改标记点的样式和Popup对象的内容。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Windyluna

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值