uni-app开发小程序中遇到的map地图的点聚合以及polygon划分区域问题

news2024/11/18 13:25:29

写一篇文章来记录以下我在开发小程序地图过程中遇到的两个小坑吧,一个是点聚合,用的是joinCluster这个指令,另一个是polygon在地图上划分多边形的问题:

1.首先说一下点聚合问题,由于之前没有做过小程序地图问题,所以浏览了很多资料,最终发现看的多了反而杂乱,而且这次要完成的不是地图单点定位或者地图导航,而是地图撒点,在地图上要显示很多定位点,那么点数过多且覆盖就成了一个要解决的问题,我上网搜了大量的资料,要么自己手写,要么引入很多其它组件方式看起来比较复杂,直接说最简单的结论,在撒的markers点内部直接加一个joinCluster: true即可,藏在官方文档marker介绍下的最下面:

 

然后最坑的来了,加了这个之后会发现微信开发者工具里面缩放地图并没有反应,无论缩放地图与否,都不会聚合,实际上这是开发者工具的问题,它是一个模拟器不能完全实现手机小程序上的所有功能,这时候如果打开真机调试或者二维码预览即可发现点聚合功能是可以实现的,下面给大家一段代码:

<template>
	<view class="base_body">
		<map :markers="markers" id="map1" style="width: 100%; height: 100vh;" :latitude="latitude"
			:longitude="longitude">
			<cover-view slot="callout">
				<block v-for="(item,index) in markers" :key="index">
					<cover-view class="customCallout" :marker-id="item.id">
						<cover-view class="content">
							{{item.title}}
						</cover-view>
					</cover-view>
				</block>
			</cover-view>
		</map>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				map: '',
				latitude: 39.890, // 地图默认显示的维度
				longitude: 116.39752, // 地图默认显示的纬度
				markers: [{ // 标记点
					id: 1,
					latitude: 39.890,
					longitude: 116.39752,
					title: "点击提示1",
					joinCluster: true,
				}, {
					id: 2,
					latitude: 39.891,
					longitude: 116.39752,
					title: "点击提示2",
					joinCluster: true,
				}, {
					id: 3,
					latitude: 39.892,
					longitude: 116.39752,
					title: "点击提示3",
					joinCluster: true,
				}, {
					id: 4,
					latitude: 39.893,
					longitude: 116.39752,
					title: "点击提示4",
					joinCluster: true,
				}, ],
			}
		},
		onLoad() {

		},
		onReady() {},
		methods: {

		}
	}
</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>

这一段代码不需要有任何修改,直接新建一个demo页面然后复制进去直接运行到微信小程序,之后启动真机调试即可发现点聚合功能是实现了的,更多细节大家可以自行了解。

2.第二个问题是划分多边形的问题,我查阅了微信官方文档上面说使用polygon即可:

 于是我使用了,但是无论我怎么填写数据都没用,一度怀疑自我,这时候发现还是要以uni-app官方文档为准,我死磕微信开发文档导致自己怀疑自我,两者有所区别,这是uni-app官方文档的介绍:

 没错,uni-app官方文档显示应该加一个s,用的是polygons,所以仅仅加一个s即可,非常搞心态,而且即使是uni-app官网下方对于这个的介绍也没加s:

下面也给大家一段代码是划了一个多边形,和上面一样,直接复制代码进去运行即可,不需要修改其它东西 :

<template>
	<view class="base_body">
		<map :polygons="polygon" id="map1" style="width: 100%; height: 100vh;" :latitude="latitude"
			:longitude="longitude">
			<cover-view slot="callout">
				<block v-for="(item,index) in markers" :key="index">
					<cover-view class="customCallout" :marker-id="item.id">
						<cover-view class="content">
							{{item.title}}
						</cover-view>
					</cover-view>
				</block>
			</cover-view>
		</map>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				map: '',
				latitude: 39.890, // 地图默认显示的维度
				longitude: 116.39752, // 地图默认显示的纬度
				polygon: [{
					points: [{
							latitude: 39.890,
							longitude: 116.39752
						},
						{
							latitude: 39.891,
							longitude: 116.39852
						},
						{
							latitude: 39.892,
							longitude: 116.39852
						},
						{
							latitude: 39.893,
							longitude: 116.39752
						},
					],
					strokeWidth: "2",
					strokeColor: "#2223FD",
					fillColor: "#9FA4F6"
				}, ],
			}
		},
	}
</script>

<style>
	.base_body {
		width: 100%;
		height: 100vh;
		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>

最终结果就是显示一块多边形:

先说这么多,后续遇到什么问题我会继续上传的,诸君共勉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/946635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LNMP架构之搭建Discuz论坛

LNMP 一、编译安装Nginx1&#xff09;前置准备2&#xff09;开始编译安装3&#xff09;添加到系统服务&#xff08;systemd启动&#xff09; 二、编译安装MySQL服务1&#xff09;前置准备2&#xff09;编译安装3&#xff09;编辑配置文件4&#xff09;更改mysql安装目录和配置文…

【流量分析】Godzilla分析

一、哥斯拉流量的特点&#xff1a; 1.User-Agent (弱特征) 哥斯拉客户端使用JAVA语言编写&#xff0c;在默认的情况下&#xff0c;如果不修改User-Agent&#xff0c;User-Agent会类似于Java/1.8.0_121&#xff08;具体什么版本取决于JDK环境版本&#xff09;。但是哥斯拉支持…

Pytest参数详解 — 基于命令行模式

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同&#xff0c;可以使用表达式来快速定位&#xff0c;例如&#xff1a; 命令行-k参数.png 3、-m 标记&#xff0…

K-Means(K-均值)聚类算法理论和实战

目录 K-Means 算法 K-Means 术语 K 值如何确定 K-Means 场景 美国总统大选摇争取摆选民 电商平台用户分层 给亚洲球队做聚类 ​编辑 其他场景 K-Means 工作流程 K-Means 开发流程 K-Means的底层代码实现 K-Means 的评价标准 K-Means 算法 对于 n 个样本点来说&am…

unity VS无法进行断点调试

有时候我们的VS无法进行断点调试&#xff0c;报错如下&#xff1a; 原因是&#xff1a;开启了多个项目&#xff0c;vs无法找到调式项目 解决&#xff1a;点击菜单栏--调试----附加unity调试程序 会弹出一个框&#xff0c;然后选择你要调试的项目 即可

长安链并行调度机制(1):交易调度与冲突检测流程

长安链采用高效的并行调度方式执行交易&#xff0c;了解长安链交易调度、冲突检测和DAG构建流程有助于开发者更好地理解长安链并行调度的运行机制&#xff0c;帮助开发者编写高质量、低冲突的智能合约&#xff0c;更好地构建区块链应用。 我们将用两篇文章说明长安链交易调度、…

Linux特殊指令

目录 1.dd命令 2.mkfs格式化 3.df命令 4.mount实现硬盘的挂载 5.unshare 1.dd命令 dd命令可以用来读取转换并输出数据。 示例一&#xff1a; if表示infile&#xff0c;of表示outfile。这里的/dev/zero是一个特殊文件&#xff0c;会不断产生空白数据。 bs表示复制一块的大…

ZLMediaKit 重建docker包

1.下载容器到本地服务器并运行 #此镜像为github持续集成自动编译推送&#xff0c;跟代码(master分支)保持最新状态 docker run -id -p 1935:1935 -p 8080:80 -p 8443:443 -p 8554:554 -p 10000:10000 -p 10000:10000/udp -p 8000:8000/udp -p 9000:9000/udp zlmediakit/zlmedi…

阿姆达尔定律(Amdahl‘s Law)通俗解释

阿姆达尔定律&#xff08;Amdahl’s Law&#xff09;&#xff0c;它描述了在对系统的某个部分进行加速时&#xff0c;该部分对整体系统性能的影响&#xff0c;取决于该部分的重要性和加速程度。 原书给的例子不太好懂&#xff0c;下面是一个更好懂的例子。 例子&#xff1a;汽车…

Python数据分析实战-修改 DataFrame 中的字段(列)名(附源码和实现效果)

实现功能 修改 DataFrame 中的字段&#xff08;列&#xff09;名 实现代码 import pandas as pd# 创建一个示例 DataFrame df pd.DataFrame({A: [1, 2, 3], B: [4, 5, 6], C: [7, 8, 9]})# 使用 rename 方法修改列名这,将返回一个新的 DataFrame&#xff0c;其中列名已更改…

构建产品帮助中心:SaaS产品帮助中心必备要素,需要规避的问题

帮助中心本来是为了帮助客户解决问题&#xff0c;了解产品价值&#xff0c;例如&#xff1a;产品使用手册、新手入门视频、核心功能的操作演示、常见问题FAQ都可以当作产品帮助中心的范畴。 以SaaS产品为例&#xff0c;开发帮助中心需要具备内容展示、搜索查询、文档理解等三大…

三分钟了解车规级芯片的特点

汽车已经不再只是一种交通工具&#xff0c;而是一个复杂的智能系统。现代汽车配备了许多电子设备和系统&#xff0c;如发动机控制单元&#xff08;ECU&#xff09;、安全气囊系统、防抱死刹车系统&#xff08;ABS&#xff09;、自动驾驶功能、娱乐系统等。这些系统需要可靠的电…

蒲公英路由器如何设置远程打印?

现如今&#xff0c;打印机已经是企业日常办公中必不可少的设备&#xff0c;无论何时何地&#xff0c;总有需要用到打印的地方&#xff0c;包括资料文件、统计报表等等。 但若人在外地或分公司&#xff0c;有文件急需通过总部的打印机进行打印时&#xff0c;由于不在同一物理网络…

MFC网络编程简单例程

目录 一、关于网络的部分概念1 URL(网址)及URL的解析2 URL的解析3 域名及域名解析3 IP及子网掩码4 什么是Web服务器5 HTTP的基本概念6 Socket库概念7 协议栈8 Socket库收发数据基本步骤 二、基于TCP的网络应用程序三、基于UDP的网络应用程序 一、关于网络的部分概念 1 URL(网址…

低代码的探索之路

Gartner发布报告指出&#xff0c;2023年全球低代码开发平台市场规模将达到345亿美元&#xff0c;比2022年增长20%。 目前&#xff0c;国内外已经有许多低代码平台&#xff0c;包括OutSystems、Mendix、Appian、Microsoft Power App等。这些平台提供了丰富的功能和工具&#xff…

故障演练实战

做了两年多的故障演练&#xff0c; 一直想聊聊自己对故障演练的理解&#xff0c;但是每次提起笔都不知道写一些什么。 什么是故障演练 为什么要做故障演练 在没做故障演练之前&#xff0c;我想很多人可能和我有一样的想法&#xff0c;我的系统跑了好多年&#xff0c;也没出什么…

Docker容器数据持久化

Docker容器数据持久化 Docker容器数据卷&#xff1a;volumes 1、什么是数据卷&#xff1f; 数据卷是经过特殊设计的目录&#xff0c;可以绕过联合文件系统&#xff0c;为一个或者多个容器提供访问&#xff0c;数据卷设计的目的&#xff0c;在于数据的永久存储&#xff0c;它完…

Java-day11(集合)

集合 1.集合框架 用于存储数量不等的多个对象&#xff0c;还可用于保存具有映射关系的关联数组 Java集合可分为Collection和Map两种体系 Collection接口 Set:元素无序&#xff0c;不可重复的集合----&#xff08;类似数学中的集合&#xff09; List:元素有序&#xff0c;可重…

linux内网yum源服务器搭建

1.nginx: location / {root /usr/local/Kylin-Server-V10-SP3-General-Release-2303-X86_64;autoindex on;autoindex_localtime on;autoindex_exact_size off; } 注:指定到镜像的包名 2.修改yum源地址 cd /etc/yum.repos.d/vim kylin_x86_64.repo 注: --enabled设置为1 3.重…

Android Studio 的github 工程克隆

上文介绍了Android Studio 里的"Git 建立和简单操作。本文介绍从github 上的工程fork 和clone到本地&#xff0c;然后学习和改进。 本文参考 https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 克隆clone Github 仓库&#xff1a; 先 Fork 你选择…