uniapp map 点聚合 聚合点样式修改

这篇具有很好参考价值的文章主要介绍了uniapp map 点聚合 聚合点样式修改。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

重点:此代码复制 可直接运行, 重要提示需要编译在小程序开发工具中使用“真机预览”才可展示如上图所示效果,一定“真机预览”哟!!!

项目需求聚合点的展示必须是图片的样式展示,不能使用默认样式。

图片展示(本来想弄视频太麻烦了):

uniapp map 点聚合 聚合点样式修改,uni-app,小程序uniapp map 点聚合 聚合点样式修改,uni-app,小程序

 点聚合的最重要的一个地方是在markers中添加 joinCluster = true 这个重要的属性,否则将无法开启点聚合功能,这个在uniapp的官方文档里体现的不是那么清楚,但是在小程序文档提示的就相当清楚。

代码:

<template>
	<view class="base_body">
		<map :markers="markers"  max-scale="11.9" :scale="scale" id="map" style="width: 100%; height: 100%;" :latitude="latitude"
			:longitude="longitude">
		</map>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				map: '',
				scale: '8', // 缩放级别,取值范围为3-20
				latitude: 39.890, // 地图默认显示的维度
				longitude: 116.39752, // 地图默认显示的纬度
				markerClickList: [],
				markers: [],  // 标记点组
			}
		},
		onShow() {
			// 创建地图对象
			this.mapCtx = uni.createMapContext('map', this);
			this.openAggator()  // 如果使用聚合点默认样式 就可以不执行这句代码。
		},
		methods: {
			openAggator() {
                // 这里的赋值 到时候是‘请求接口’得来的。
				setTimeout(() => {   // 模拟异步请求接口(一进入页面才能看见聚合点的样式是图片,不然就是默认样式)
					this.markers = [{ // 标记点
						id: 1,
						latitude: 40.8909,
						longitude: 116.39751,
						width: 50,
						height: 50,
						title: "点击提示1",
						iconPath: 'https://cdn.uviewui.com/uview/album/1.jpg',
						joinCluster: true, // 是否参与点聚合
						callout: {
							content: '***的位置1',
							display: 'ALWAYS',
							padding: 5,
							textAlign: 'center',
							color: '#C2874D',
							borderRadius: 4
						}
					}, {
						id: 2,
						latitude: 40.10111,
						longitude: 116.39752,
						title: "点击提示2",
						width: 50,
						height: 50,
						iconPath: 'https://cdn.uviewui.com/uview/album/1.jpg',
						joinCluster: true,
						callout: {
							content: '***的位置2',
							display: 'ALWAYS',
							padding: 5,
							textAlign: 'center',
							color: '#C2874D',
							borderRadius: 4
						}
					}, {
						id: 3,
						latitude: 39.892,
						longitude: 116.39752,
						title: "点击提示3",
						width: 50,
						height: 50,
						iconPath: 'https://cdn.uviewui.com/uview/album/1.jpg',
						joinCluster: true,
						callout: {
							content: '***的位置3',
							display: 'ALWAYS',
							padding: 5,
							textAlign: 'center',
							color: '#C2874D',
							borderRadius: 4
						}
					}, {
						id: 4,
						latitude: 39.893,
						longitude: 116.39752,
						width: 50,
						height: 50,
						title: "点击提示4",
						iconPath: 'https://cdn.uviewui.com/uview/album/1.jpg',
						joinCluster: true,
						callout: {
							content: '***的位置4',
							display: 'ALWAYS',
							padding: 5,
							textAlign: 'center',
							color: '#C2874D',
							borderRadius: 4
						}
					}, ]
				}, 3000)
				console.log('监听地图事件');
				this.mapCtx.initMarkerCluster({ // 初始化点聚合的配置
					enableDefaultStyle: false, // 是否使用默认样式
					zoomOnClick: true,
					gridSize: 60,
				})
				// 新的聚合簇产生时触发
				this.mapCtx.on('markerClusterCreate', res => {
					console.log(res, '新的聚合簇产生时触发');
					const clusters = res.clusters // 新产生的聚合簇
					const markers = clusters.map(cluster => {
						const {
							center, // 聚合点的经纬度数组
							clusterId, // 聚合簇id
							markerIds // 已经聚合了的标记点id数组
						} = cluster
						
						// 聚合点图片显示聚合数组中的第1个
						let list = this.markers.find(item => (markerIds[0] == item.id))
						return {
							...center,
							width: 50,
							height: 50,
							clusterId, // 必须
							iconPath: list.iconPath,
							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,
							}
						}
					})
					// 添加聚合簇
					this.mapCtx.addMarkers({
						markers,
						clear: false, //是否先清空地图上所有的marker
					})
				})
				// 聚合点点击事件
				this.mapCtx.on('markerClusterClick', res => {
					console.log(res, '聚合簇的点击事件');
					const clusters = new Array(res.cluster) // 新产生的聚合簇
					clusters.map(cluster => {
						const {
							center, // 聚合点的经纬度数组
							clusterId, // 聚合簇id
							markerIds // 已经聚合了的标记点id数组
						} = cluster

						let list = []
						markerIds.forEach(item => {
							let newObj = this.markers.find(item1 => (item1.id == item))
							list.push(newObj)
						})
						this.markerClickList = list
					})
					// 获取当前地图的缩放级别
					let _this = this
					_this.mapCtx.getScale({
						success(res) {
							console.log(res.scale, '获取当前地图的缩放级别');
							// 业务需求,不能看见详细位置,这里配置“max-scale="11.9"”做了限制。 
							if (res.scale >= 11.9) {  
								_this.markersList = _this.markerClickList
								_this.campListShow = true
								console.log(_this.markerClickList, '无法分裂聚合点数组数据');
							}
						}
					})
				})
			},
		}
	}
</script>

<style>
	.base_body {
		width: 100%;
		height: 100%;
		position: absolute;
	}

	/* 水平,垂直居中 */
	.base_all_center {
		justify-content: center;
		align-items: center;
	}

	/* 垂直居中 */
	.base_center_vertical {
		display: flex;
		align-items: center;
	}

	/* 水平居中 */
	.base_center_horizontal {
		display: flex;
		justify-content: center;
	}

	/* 垂直布局 */
	.base_column {
		display: flex;
		flex-direction: column;
	}

	/* 横向布局 */
	.base_row {
		display: flex;
		flex-direction: row;
	}

	/* 基础dialog */
	.base_dialog {
		width: 100%;
		height: 100%;
		position: absolute;
		top: 0px;
		background: rgba(0, 0, 0, 0.5);
	}

	/* *************************************** */
	.customCallout {
		box-sizing: border-box;
		background-color: #fff;
		border: 1px solid #ccc;
		border-radius: 30px;
		width: 150px;
		height: 40px;
		display: inline-flex;
		padding: 5px 20px;
		justify-content: center;
		align-items: center;
	}

	.content {
		flex: 0 1 auto;
		margin: 0 10px;
		font-size: 14px;
	}
</style>

 如果你们有问题,可以发评论提问,我看见一定回复

完结撒花~~~文章来源地址https://www.toymoban.com/news/detail-606312.html

到了这里,关于uniapp map 点聚合 聚合点样式修改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app - 文本展开 / 收起折叠功能,支持自定义样式(当文本内容超出规定行数后,展开收起折叠的功能)兼容 H5 / App / 小程序且易用更容易修改的插件组件源码,超详细的示例代码及注释

    网上的组件和教程代码都太乱了,根本无法按照自己的需求修改,而且基本上都有兼容性和功能性 BUG。 本文实现了 多行文本展开与折叠组件,灵活性非常高,只完成了核心功能,可随意自定义样式满足您的需求, 您只需要一键复制组件源码,按照详细的代码示例,几分钟快

    2024年02月07日
    浏览(50)
  • uni-app小程序自定义checkbox,改样式改形状

    选中时的样式 未选择时的样式 颜色可以随意更改,形状原为方块,可以更改为圆形,以下是代码: #ec6330 为CheckBox颜色,可以自行更改。 元素使用的时候就是使用 round 和 red。例如: checkbox … class=“round red” html: JavaScript:

    2024年02月11日
    浏览(48)
  • 基于uni-app的微信小程序Map事件穿透处理

    业务需要在微信小程序中使用地图组件,上面需要有点位及点位的交互,同时地图上也会有一些悬浮的按钮、弹窗之类的。在微信小程序2.8.x的版本之后,地图这种原生组件是支持同层渲染的,也就是可以通过样式控制层级。在开发者工具中表现正常,但是上了真机后会发现点

    2024年02月11日
    浏览(40)
  • uni-app编译成钉钉小程序,uViewUI组件样式失效,自定义组件样式失效

    公司项目需要把原本用 uinapp 开发的微信小程序想要在钉钉上也能使用,然后就打算用uniapp编译成钉钉小程序,看看是否有坑,不试不知道,一试吓一跳,官方没有提供钉钉的编译方式,按照网上文章的配置编译成钉钉小程序后,初步发现, uView-ui的icon没啦 ,然后样式和布局

    2024年02月11日
    浏览(42)
  • uni-app框架 微信小程序页面显示正常,但安卓页面样式显示异常

    今天在继续复习uni-app项目时,使用模拟器运行时,突然发现封装的search组件样式无法正常显示,但是小程序页面又是正常的,打包后真机也是一样的结果。在uni-app的控制台报如下错误: [Vue warn]: Error in render: “TypeError: Cannot read property ‘children’ of undefined” TypeError: Cannot rea

    2024年04月11日
    浏览(48)
  • [uni-app] 微信小程序 如何修改替换头像

     如下图所示,微信小程序中涉及到修改头像的交互 技术: 前端应用框架为uni-app UI框架为uView  思考: 1. 头像点击事件 click 2.从本地相册选择图片或使用相机拍照 uni.chooseImage(OBJECT) ,方法执行成功后根据success中返回的图片的本地文件路径列表 tempFilePaths,做操作 3.上传图片

    2024年02月11日
    浏览(44)
  • 使用uni-app开发微信小程序时u-view样式不生效问题

    1.组件自定义样式不生效 需要在前面添加 在存在shadow-root的dom情况下,需要额外在后面添加 view 才能正常修改 2.输入框下面的错误信息提示文字跟输入框不对齐,向右偏一些 定位到对应的元素后,并找到其父节点 给他的父界面下的子节点添加样式修改信息

    2024年02月15日
    浏览(40)
  • 基于微信小程序的点餐系统源码/基于uni-app点餐系统app【有多种UI样式】

    目录 一、整体目录(示范): 文档含项目技术介绍、E-R图、数据字典、项目功能介绍与截图等 二、运行截图 三、代码部分(示范): 四、数据库表(示范): 数据库表有注释,可以导出数据字典及更新数据库时间,欢迎交流学习 五、主要技术介绍: 六、项目调试学习(点击

    2024年02月10日
    浏览(29)
  • uni-app小程序实现音频播放,uniapp播放录音,uniapp简单实现播放录音

    复制到.vue文件即可预览效果 问题 :开发者工具中.onTimeUpdate方法可能会失效! 官方参考:https://uniapp.dcloud.net.cn/api/media/audio-context.html# 其他博客参考:https://blog.csdn.net/weixin_45328705/article/details/114091301 录音实现参考 :https://blog.csdn.net/weixin_43992507/article/details/129857780

    2024年02月12日
    浏览(39)
  • uni-app开发微信小程序,checkbox、radio等原生组件样式设置问题解决方案

    它们是 原生 的组件,修改样式只能在 app.vue 里面修改,目前只知道这一种解决办法。如果你的UI给的图比较特殊,用css写比较困难,推荐使用图片代替,请看下面示例。 正确设置✔:在App.vue文件里设置 test.vue文件(这里假设你使用checkbox或者radio的组件): App.vue文件(这里

    2024年02月19日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包