uni-app map组件 简单的点聚合功能实现

uni-app 自带map组件(腾讯地图) 简单的聚合功能实现

在这里插入图片描述

<template>
  <view class="content">
    <map id="map" class="map" style="width: 100%;height: 100vh;" :show-location="true" :latitude="latitude" :longitude="longitude" @markertap="markertap"></map>
  </view>
</template>

<script>
  const img = '/static/map/location.png';
  export default {
    data() {
      return {
        latitude: 39.909,
      	longitude: 116.39742,
		_mapContext:null,
      }
    },
    onReady() {
      	this._mapContext = uni.createMapContext("map", this);
      	// 仅调用初始化,才会触发 on.("markerClusterCreate", (e) => {})
      	this._mapContext.initMarkerCluster({
      	  enableDefaultStyle: false,
      	  zoomOnClick: true,
      	  gridSize: 60,
      	  complete(res) {
      	    console.log('initMarkerCluster', res)
      	  }
      	});

      	this._mapContext.on("markerClusterCreate", (e) => {
      	 	const clusters = e.clusters
			let clusterMarkers = []
			// 聚合点
			clusters.forEach((cluster,index) => {
				const { center,clusterId,markerIds } = cluster
				//自定义 聚合信息和背景样式
				let clusterObj = { clusterId,...center,width:0,height:0,iconPath:'',label:{
					content:markerIds.length+'',
					fontSize:16,
					color:'#fff',
					width:50,height:50,
					bgColor:'#419afcD9',
					borderRadius:25,
					textAlign:'center',
					anchorX:-10,
					anchorY:-35
				}}
				clusterMarkers.push(clusterObj)
				//更新聚合信息
				this._mapContext.addMarkers({
					markers:clusterMarkers,
					clear:false
				})
			});
      	});
      	this.addMarkers();
    },
    methods: {
      	addMarkers() { //添加marker 
        	const positions = []
			for (let i = 0; i < 100; i++) {
      		  positions.push({
      		    id: i + 1,
      		    latitude: 39.9 + Math.random() * 0.2 - 0.1,
      		    longitude: 116.4 + Math.random() * 0.2 - 0.1,
      		  })
      		}
        	const markers = []

        	positions.forEach((p, i) => {
        	  	markers.push(
        	  	  Object.assign({},{
        	  	    id: i + 1,
        	  	    iconPath: img,
        	  	    width: 50,
        	  	    height: 50,
        	  	    joinCluster: true
        	  	  },p)
        	  	)
        	})
        	this._mapContext.addMarkers({ //将marker加入聚合中
        	    markers,
        	    clear: false,
        	    complete(res) {
        	      console.log('addMarkers', res)
        	    }
        	})
      	},
		markertap(e) {
			console.log(123131)
    	  	// console.log('点击了标记点', e.detail.markerId)
    	}
    }
  }
</script>

<style>
  .content {
    flex: 1;
  }

  .map {
    flex: 1;
  }
</style>


UniApp中集成腾讯地图,如果需要处理大量的marker实现聚合以及轨迹回放功能,你可以按照以下步骤操作: 1. **引入腾讯地图SDK**:首先,在项目中安装uni-app官方提供的腾讯地图插件,通过`npm install tencentmap`命令引入。 2. **初始化地图实例**:在页面生命周期中,初始化地图组件并设置必要的参数,如地理位置、地图样式等。 ```javascript import TMap from '@vant/tmap'; export default { onLaunch() { // 初始化地图 const map = new TMap.Map({ container: 'mapContainer', // 地图容器ID zoom: 8, // 初始缩放级别 latitude: 39.9042, // 经度 longitude: 116.4074, // 纬度 }); } } ``` 3. **添加标记聚合**:对于大量marker,可以使用循环或数组操作一次性添加,并利用TencentMap的`setMarkersCluster`方法对它们进行聚合,这样可以在地图上显示成一个图标,击后弹出详细信息。 ```javascript const markers = [ { lat: ..., lng: ... }, ... // 其他marker数据 ]; map.setMarkersCluster(markers); ``` 4. **轨迹回放**:可以使用`playPath`方法播放预设的路径。例如,如果你已经有了一个包含多个标记的路径数组,可以这样操作: ```javascript const path = [ { lat: ..., lng: ... }, { lat: ..., lng: ... }, // 路径中的每个 ]; map.playPath(path, { loop: true }); // 开启循环播放 ``` 5. **事件监听**:为地图实例添加事件监听器,比如`MarkerClick`事件,以便用户交互时触发相应的行为。 注意:确保在使用前获取到有效的腾讯地图API Key,并遵守其服务条款。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值