uniapp中map使用点聚合渲染marker覆盖物

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

效果如图:
uniapp中map使用点聚合渲染marker覆盖物,uni-app,uni-app
uniapp中map使用点聚合渲染marker覆盖物,uni-app,uni-app

一、什么是点聚合

当地图上需要展示的标记点 marker 过多时,可能会导致界面上 marker 出现压盖,展示不全,并导致整体性能变差。针对此类问题,推出点聚合能力。
点聚合官网教程
uniapp中map使用点聚合渲染marker覆盖物,uni-app,uni-app

二、基本用法

  • template
<map id="map" :latitude="latitude" :longitude="longitude" :style="{ width: '100%', height: windowHeight + 'px' }" :scale="10">
  • onReady
// 获取屏幕高度
		uni.getSystemInfo({
			success: (res) => {
				this.windowHeight = res.windowHeight;
			},
		});
		
		// 创建map对象
		this._mapContext = uni.createMapContext("map", this);
		this.cluster();
  • data
			_mapContext: null,
			windowHeight: 0,
			latitude: 23.099994,
			longitude: 113.324520,
  • methods
		// 点聚合
		cluster() {
			// 仅调用初始化,才会触发 on.("markerClusterCreate", (e) => {})
			this._mapContext.initMarkerCluster({
				enableDefaultStyle: false, // 是否使用默认样式
				zoomOnClick: true, // 点击聚合的点,是否改变地图的缩放级别
				gridSize: 60, // 聚合计算时网格的像素大小,默认60
				complete(res) {
					console.log('initMarkerCluster', res)
				}
			});

			this._mapContext.on("markerClusterCreate", (res) => {
				console.log("markerClusterCreate", res);
				const clusters = res.clusters
				const markers = clusters.map(cluster => {
					const {
						center,
						clusterId,
						markerIds
					} = cluster
					return {
						...center,
						width: 0,
						height: 0,
						clusterId, // 必须
						label: {
							content: markerIds.length + '',
							fontSize: 16,
							width: 50,
							height: 50,
							bgColor: '#00A3FA',
							borderRadius: 25,
							textAlign: 'center',
							anchorX: 0,
							anchorY: -20,
						}
					}
				})
				this._mapContext.addMarkers({
					markers,
					clear: false,
					complete(res) {
						console.log('clusterCreate addMarkers', res)
					}
				})
			});
			this._mapContext.on('markerClusterClick', (res) => {
				console.log('markerClusterClick', res)
			})
			this.addMarkers();
		},

		// 添加标记点
		addMarkers() {
			const positions = [
				{
					latitude: 23.099994,
					longitude: 113.324520,
				}, {
					latitude: 23.099994,
					longitude: 113.322520,
				}, {
					latitude: 23.099994,
					longitude: 113.326520,
				}, {
					latitude: 23.096994,
					longitude: 113.329520,
				}
			]

			const markers = []
			positions.forEach((p, i) => {
				markers.push(
					Object.assign({}, {
						id: i + 1,
						iconPath: "/static/images/map0.png",
						width: 28,
						height: 29,
						joinCluster: true, // 指定了该参数才会参与聚合
						callout:{
							bgColor: "#5AC2EB",
							color: "#fff",
							content: "客户名称",
							display: "ALWAYS",
							fontSize: "14",
							fontWeight: "bold",
							padding: 8,
							textAlign: "center"
						}
					}, p)
				)
			})
			console.log('markers', markers)
			this._mapContext.addMarkers({
				markers,
				clear: false,
				complete(res) {
					console.log('addMarkers', res)
				}
			})
		},

三、踩坑总结

1. 调用initMarkerCluster方法,否则不生效

			// 创建map对象
			this._mapContext = uni.createMapContext("map", this);
			// 仅调用初始化,才会触发 on.("markerClusterCreate", (e) => {})
			this._mapContext.initMarkerCluster({
				enableDefaultStyle: false, // 是否使用默认样式
				zoomOnClick: true, // 点击聚合的点,是否改变地图的缩放级别
				gridSize: 60, // 聚合计算时网格的像素大小,默认60
				complete(res) {
					console.log('initMarkerCluster', res)
				}
			});

2. joinCluster属性设为true,否则不生效

marker对象上必须有该属性
uniapp中map使用点聚合渲染marker覆盖物,uni-app,uni-app

3. 确保每个marker有唯一的id,否则可能会出问题

uniapp中map使用点聚合渲染marker覆盖物,uni-app,uni-app

4. 安卓和ios兼容问题

1. iconPath不要有中文,安卓和微信小程序可以使用中文,但苹果端使用中文要出异常,所以统一不要使用中文

2.小程序–安卓端直接传入marker数组无法使用点聚合的效果. 小程序–苹果端通过调用addMarkers无法使用点聚合的效果. 因此,此处必须写兼容代码分别处理

  • 安卓
		this._mapContext.addMarkers({
				markers,
				clear: false,
				complete(res) {
					console.log('addMarkers', res)
				}
			})
  • ios
<map id="map" :latitude="latitude" :longitude="longitude" :style="{ width: '100%', height: windowHeight + 'px' }" :scale="10" markers="markerList">

uniapp中map使用点聚合渲染marker覆盖物,uni-app,uni-app文章来源地址https://www.toymoban.com/news/detail-656168.html

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

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

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

相关文章

  • uniapp小程序map(点击地图增加maker,聚合、自定义聚合样式)

    功能背景 小程序端开发地图组件,点击地图上任何一个位置,增加一个maker,点击maker触发另外的事件。缩放地图进行聚合显示,自定义聚合样式 效果图 正常样式 聚合效果 注意:微信开发者工具是不支持聚合效果的,需要真机调试才能看到效果 代码实现

    2024年02月12日
    浏览(95)
  • 【uniapp】 微信小程序使用腾讯API地图、路线轨迹、marker标记点

    引入js import amap from \\\'@/common/qqmap-wx-jssdk.js\\\'; var qqmapsdk; qqmapsdk = new amap({ key: \\\'腾讯地图API key\\\' // 必填 }); 小程序配置合法域名 :https://apis.map.qq.com 下载地址 :请前往【小程序地图、腾讯API、商业圈、路线轨迹、地图选点】 示例图 请前往小程序查询

    2024年02月16日
    浏览(73)
  • uniapp的manifest.json配置后,支付宝小程序include不生效,map高级渲染

                    支付宝小程序在使用map组件时,使用高级渲染需要使用xml组件,在                  manifest.json下配置include字段,编译完没有该字段,不生效。                                                          这里是支付宝文档:支付宝官

    2024年02月07日
    浏览(43)
  • uniapp 小程序 地图<map> 渲染标注点 且自定义气泡内容(slot写到页面中/样式自定义)

    效果图: (气泡可随意定义样式) 页面内容:  (slot为自定义标注气泡) 获取经纬度方法: 数据整理方法: (整理各坐标点经纬度和信息到maekers中) css内容:

    2024年02月13日
    浏览(35)
  • Vue Baidu Map--自定义点图标bm-marker

    自定义点图标 将准备好的图标放到项目中 使用import引入, 并在data中进行声明 在 bm-marker 中加入参数icon,填入声明的图标和图标大小 实现效果: 完整代码:

    2024年02月13日
    浏览(36)
  • 微信小程序 <map>: marker id should be a number

    已经按照小程序官方文档的要求做了可是还会报错   查看官方文档发现id并不是必填,但是随便填一个数字型number就可以解决问题   按照文档中所写添加一个id 类型为number   然后就不会有报错了。 在使用小程序地图相关的APi组件时,一定要先去 小程序平台去申请权限 哦,

    2024年02月09日
    浏览(35)
  • Rust中的迭代器的使用:map转换、filter过滤、fold聚合、chain链接

    Rust中的迭代器是一种强大的工具,它提供了一种灵活、通用的方法来遍历序列。迭代器是实现了Iterator trait的类型,并需要至少实现一个next函数,用于让迭代器指向下一个迭代对象,并返回一个Option用于指示对象是否存在。 迭代器相比于for循环有一些优势。首先,迭代器提

    2023年04月12日
    浏览(39)
  • uniapp实现轨迹polyline和标记点markers最终实现效果

    uniapp 使用map组件,实现自定义标记点markers图标及内容文字 最终实现效果:   

    2024年02月07日
    浏览(35)
  • 【FAQ】关于JavaScript版本的华为地图服务Map的点击事件与Marker的点击事件存在冲突的解决方案

    创建地图对象,并添加marker标记,对map和marker均添加了点击事件; body script function initMap() { // 创建地图对象 const map = new HWMapJsSDK.HWMap(document.getElementById(\\\'map\\\'), { center: { lat: 39.36322, lng: 116.3214 }, zoom: 8, }); map.on(\\\'click\\\', handleMapClick); ``` 经下方的Gif图可看出,在点击marker标记时不会

    2023年04月26日
    浏览(55)
  • 【uniapp】 video视频层级、遮挡其他弹窗或顶部导航 使用nvue覆盖

    uniapp 顶部导航和弹窗被video遮挡解决办法 全部代码 请前往dcloud 视频播放器 解决video视频遮挡顶部导航、 遮挡分享弹窗 组件层级 下载 话不多说 直接来干货 示例图片: 第一步:配置 subNVues 第二步:分别在index文件夹下建立三个文件分别为:index.vue 、drawer.nvue、subnvue.nvue文件

    2024年02月12日
    浏览(63)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包