uniapp实现地图点聚合

点聚合的最重要的一个地方是在 markers 中添加 joinCluster = true 这个重要的属性,否则将无法开启点聚合功能。
其实在uniapp的官方文档里体现的不是那么清楚,但是在小程序文档提示的就相当清楚。
实现效果如下:
重点:需要编译在小程序开发工具中使用 “ 真机预览 ” 才可展示如图所示效果
在这里插入图片描述
1、使用地图组件

<template>
	<map id="alarm_map" :markers="allMarkers" :show-location="true" :latitude="latitude" scale="18"></map>
</template>

2、页面中逻辑

import { getApi } from "@/utils/common.js"
export default {
	data() {
		return {
			latitude: 29.519418, // 纬度
			longitude: 106.687094, // 经度
			allMarkers: [] // 标记点
		}
	},
	onReady() {
		// 1.页面准备好后,获取到map组件的执行上下文。注意:这里是取的map的id属性
		this.mapContext = uni.createMapContext("alarm_map", this);
		// 2.请求数据
		this.getallStations()
	},
	methods: {
		getallStations() {
			uni.showLoading()
			let obj = {
				id: id,
				stationQuery: query
			}
			getApi(obj).then(res => {
				uni.hideLoading();
				if (res.code == 0) {
					if (!Array.isArray(res.data) || res.data.length <= 0) return
					// 拿到请求数据后,把数据传给点聚合功能;
					this.setMarkersAndCluster(res.data) // 3、调用聚合功能 
				}
			})
		},
		// 聚合功能
		setMarkersAndCluster(markerList) {
			// 1.组装数据之后,并赋值给地图上的marker
			this.allMarkers = Array.from(markerList).map((item, i) => {
				return {
				...item,
				width: 41,
				height: 41,
				iconPath: 'https://cdn.uviewui.com/uview/album/1.jpg',
				joinCluster: true, // 这个属性很重要,必须要
				callout: { // 自定义标记点上方的气泡窗口
					content: '***聚合1',
					display: 'ALWAYS', // 'BYCLICK':点击显示; 'ALWAYS':常显
					padding: 5,
					textAlign: 'center',
					color: '#C2874D',
					borderRadius: 4
				},
				label: { // 为标记点旁边增加标签
					content: '你好,marker',
					borderColor: '#ff0000',
					bgColor: '#ffffff'## 标题
				},
			}
		});
    
		// 2.初始化点聚合的配置,未调用时采用默认配置
		this.mapContext.initMarkerCluster({
			enableDefaultStyle: false, // 是否启用默认的聚合样式(是否用自定义图标)
			zoomOnClick: true,
			gridSize: 60,
			complete(res) {
				console.log('initMarkerCluster', res)
			}
		});
    
		// 3.发生聚合时,给聚合点设置marker标签
		this.mapContext.on('markerClusterCreate', res => {
			const clusters = res.clusters // 新产生的聚合簇
			const zhou = clusters.map(item=> {
				const {
				center, // 聚合点的经纬度数组
				clusterId, // 聚合簇id
				markerIds // 已经聚合了的标记点id数组
				} = item
				
				return {
					...center,
					width: 50,
					height: 50,
					clusterId, // 必须有
					iconPath: 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/marker_blue.png',
					borderRadius: 8,
					joinCluster: true,
					label: { // 定制聚合点样式
						content: markerIds.length + '',
						fontSize: 14,
						width: 18,
						height: 18,
						color: '#ffffff',
						bgColor: '#C2874D',
						borderRadius: 6,
						textAlign: 'center',
						anchorX: 25,
						anchorY: -60,
					}
				}
		})
		
      	// 4. 添加聚合簇标签
		this.mapContext.addMarkers({
			markers: zhou,
			clear: false, //是否先清空地图上所有的marker
		})
    })
  }
}
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
uniapp是一款跨平台的移动应用开发框架,而高德地图是一款广泛使用的地图服务平台。在uniapp中内置了高德地图,使得开发者可以方便地在应用中使用地图功能。 聚合是高德地图提供的一种功能,它可以将地图上的大量标注聚合起来,以提升地图的可视化效果和交互体验。在开发应用时,我们可以通过uniapp内置的高德地图组件,结合聚合功能,实现地图上大量标注的高效展示。 要使用聚合功能,我们首先需要在应用中引入高德地图组件,并设置地图的初始化参数,如地图的中心坐标、缩放级别等。然后,我们可以通过调用高德地图的Marker对象来添加各个标注,并设置每个标注的经纬度、图标等属性。 当我们需要使用聚合功能时,可以通过高德地图的Cluster对象来实现。我们可以将所有的标注传递给Cluster对象,并设置聚合的样式、击事件等。Cluster对象会根据一定的规则将附近的标注聚合在一起,形成一个聚合。当用户聚合时,可以通过击事件获取到该聚合下的所有标注,以便进一步操作或展示。 通过在uniapp中使用内置的高德地图组件和聚合功能,我们可以轻松实现地图的展示和标注聚合,为用户提供更好的地图浏览体验。利用这些功能,我们可以开发一些基于地图的应用,如地检索、附近的人等功能,丰富用户的使用场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值