实现uniapp天地图边界范围覆盖

前言:

在uniapp中,难免会遇到使用地图展示的功能,但是百度谷歌这些收费的显然对于大部分开源节流的开发者是不愿意接受的,所以天地图则是最佳选择。 此篇文章,详细的实现地图展示功能,并且可以自定义容器宽高,还可以定向的进行行政区边界颜色划分。你可以根据代码运行并进一步稍微改下行政区编码即可实现自己想要的效果。

代码效果如下图所示:

申请天地图key:

首先申请天地图key,它是免费的,但需要你申请。

 申请地址: 天地图API

然后根据页面提示,自行完成【创建新应用】。即可以获取到自己需要的key,注意uniapp申请浏览器端。

然后就是编写代码,如下:

你可以放在 uni-app 项目根目录->hybrid->html 文件夹下或者直接放在 static 目录下。本文章默认放在static下,文件名skymap.html

示例代码:

<!DOCTYPE html>
<html lang="en">
	<head>
		<script src="http://api.tianditu.gov.cn/api?v=4.0&tk=天地图的key"></script>
		<style>
			body {
				margin: 0;
				padding: 0;
				overflow: hidden;
				height: 100vh;
				font-family: "Microsoft YaHei";
			}

			#viewDiv {
				width: 100%;
				height: 100%;
				position: absolute;
				top: 0;
				left: 0;
			}
		</style>
	</head>
	<body>
		<div id="viewDiv"></div>
		<script>
			function load() {
				// 初始化地图对象
				const map = new T.Map("viewDiv");
				map.centerAndZoom(new T.LngLat(116.40969, 39.89945), 12);
				map.enableScrollWheelZoom();

				// 添加地图类型控件
				const ctrl = new T.Control.MapType();
				map.addControl(ctrl);
				map.setMapType(window.TMAP_NORMAL_MAP);

				// 添加鹰眼控件
				const miniMap = new T.Control.OverviewMap({
					isOpen: false,
					size: new T.Point(150, 150)
				});
				map.addControl(miniMap);

				// 添加比例尺控件
				const scale = new T.Control.Scale();
				map.addControl(scale);

				addGeoBoundary(map);
			}

			function addGeoBoundary(map) {
				fetch('https://geo.datav.aliyun.com/areas_v3/bound/geojson?code=520322')
					.then(response => response.json())
					.then(data => {
						const coordinates = data.features[0].geometry.coordinates;
						const centroid = data.features[0].properties.centroid;

						// 设置地图中心为该行政区域的质心
						map.centerAndZoom(new T.LngLat(centroid[0], centroid[1]), 8);

						coordinates.forEach(polygon => {
							polygon.forEach(boundary => {
								const boundaryPolygon = new T.Polygon(boundary.map(coord => new T.LngLat(
									coord[0], coord[1])), {
									color: "#7C7BF6",
									weight: 1,
									opacity: 0.7,
									fillColor: "#ABAAF3",
									fillOpacity: 0.1
								});

								boundaryPolygon.addEventListener("mouseover", () => {
									boundaryPolygon.setFillColor("#ABAAF3");
									boundaryPolygon.setFillOpacity(0.6);
								});

								boundaryPolygon.addEventListener("mouseout", () => {
									boundaryPolygon.setFillColor("#DCDBF0");
									boundaryPolygon.setFillOpacity(0.6);
								});

								map.addOverLay(boundaryPolygon);
							});
						});
					})
					.catch(error => console.error('Error fetching GeoJSON:', error));
			}

			load();
		</script>
	</body>
</html>

然后再你需要展示展示地图的页面引入以下代码:

<uni-section title="地区分布" class="item map-container" type="line">
			<iframe src="/static/skymap.html" class="map-frame"></iframe>
		</uni-section>
		</uni-section>

样式代码:

你也可以自定义实现自己想要的效果:

<style>
	.map-container {
		position: relative;
	}

	.map-frame {
		width: 100%;
		height: 500rpx;
		border: none;
	}
</style>

至此地图即可以正确展示了。如果感觉还不错,点个关注收藏吧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python画笔案例-086 turtle 多线程绘画

1、turtle 多线程绘画 通过 python 的turtle 库 多线程绘画,如下图: 2、实现代码 turtle 库 多线程绘画,以下为实现代码: """多线程绘画.py """ from random import random,randint from turtle import Turtle,Screen from threading

SpringDataRedis快速入门

SpringDataRedis 什么是SpringDataRedis SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis SpringDataRedis中提供了RedsiTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类…

redis基础—主从同步原理与配置以及哨兵模式

一&#xff1a;redis的主从同步原理 1.slave节点发送同步请求到master节点 2.slave节点通过master节点的认证开始进行同步 3.认证结束后&#xff0c;master节点开启bgsave进程 4.master节点会开启bgsave进程发送内存快照rbd到slave节点&#xff0c;在此过程中是异步操作&…

【原创】java+springboot+mysql在线文件管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Docker学习笔记(2)- Docker的安装

1. Docker的基本组成 镜像&#xff08;image&#xff09;&#xff1a;Docker镜像就像是一个模板&#xff0c;可以通过这个模板来创建容器服务。通过一个镜像可以创建多个容器。最终服务运行或者项目运行就是在容器中。容器&#xff08;container&#xff09;&#xff1a;Docker…

Spring6梳理14——依赖注入之P命名空间

以上笔记来源&#xff1a; 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09;https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 ①搭建模块 ②引入配置文件 ③创建bean-dip.xml文件 ④创建课程类文件 ⑤创建学生…

基于SpringBoot+Vue+uniapp微信小程序的校园反诈骗微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

day-69 使二进制数组全部等于 1 的最少操作次数 II

思路 与3191. 使二进制数组全部等于 1 的最少操作次数 I思路类似&#xff0c;区别在于该题每次将下标i开始一直到数组末尾所有元素反转&#xff0c;所以我们用一个变量可以统计翻转次数 解题过程 从左向右遍历数组的过程中&#xff0c;有两种情况需要进行翻转&#xff1a;1.当…

【Linux】内存文件系统的I/O、重定向

文章目录 1. 系统中的文件2. 回顾C中的文件接口3. 文件类的系统调用3.1 open3.2 文件描述符 4. IO的基本过程5.重定向5.1 引入重定向5.2 系统中的重定向接口 6. 缓冲区问题7. 简单版shell的实现 1. 系统中的文件 在学习完Linux权限后&#xff0c;我们清楚的知道&#xff1a;文…

【JVM】内存模型

文章目录 内存模型的基本概念案例 程序计数器栈Java虚拟机栈局部变量表栈帧中局部变量表的实际状态栈帧中存放的数据有哪些 操作数栈帧数据 本地方法栈 堆堆空间是如何进行管理的? 方法区静态变量存储 直接内存直接内存的作用 内存模型的基本概念 在前面的学习中,我们知道了字…

论文笔记:Pre-training to Match for Unified Low-shot Relation Extraction

论文来源&#xff1a;ACL 2022 论文地址&#xff1a;https://aclanthology.org/2022.acl-long.397.pdf 论文代码&#xff1a;https://github.com/fc-liu/MCMN &#xff08;笔记不易&#xff0c;请勿恶意转载抄袭&#xff01;&#xff01;&#xff01;&#xff09; 目录 A…

从头预训练一只迷你 LLaMA 3_llama3 预训练预处理

我将向你展示如何使用 LLama 3.1&#xff08;一个本地运行的模型&#xff09;来执行GraphRAG操作&#xff0c;总共就50号代码。。。 首先&#xff0c;什么是GraphRAG&#xff1f;GraphRAG是一种通过考虑实体和文档之间的关系来执行检索增强生成的方式&#xff0c;关键概念是节…

Elasticsearch学习笔记(七)安装并配置Metricbeat

Metricbeat 是一个轻量级的开源数据采集器&#xff0c;专门用于收集操作系统和服务的指标&#xff08;metrics&#xff09;。它是 Elastic Stack&#xff08;即 ELK Stack&#xff09;的一部分&#xff0c;通常用于监控系统性能、收集应用程序和服务器的性能指标&#xff0c;并…

【大模型】AI视频课程制作工具开发

1. 需求信息 1.1 需求背景 讲师们在制作视频的过程中&#xff0c;发现录制课程比较麻烦&#xff0c;要保证环境安静&#xff0c;保证录制过程不出错&#xff0c;很容易反复重复录制&#xff0c;为了解决重复录制的工作量&#xff0c;想通过 ai 课程制作工具&#xff0c;来解决…

字节跳动青训营——入营考核解答(持续更新中~~~)

考核内容&#xff1a; 在指定的题库中自主选择不少于 15 道算法题并完成解题&#xff0c;其中题目难度分配如下&#xff1a; 简单题不少于 10 道中等题不少于 4 道困难题不少于 1 道 解答代码 5.简单四则运算 &#xff08;中&#xff09; 代码实现&#xff1a; import ja…

TON(六)——fift算法,注释的改写

系列文章目录 TON&#xff08;五&#xff09; TON&#xff08;四&#xff09; TON&#xff08;三&#xff09; TON&#xff08;二&#xff09; TON&#xff08;一&#xff09; 前言 fift是一门十分强大的栈编程语言&#xff0c;&#xff0c;在TON中它是由c编译而成的语言…

WordPress官方发布“新”插件“SCF”(安全自定义字段)

安全自定义字段 (SCF) 为您提供了处理数据所需的所有工具&#xff0c;从而将 WordPress 网站转变为成熟的内容管理系统。 使用 SCF 插件可以完全控制您的 WordPress 编辑屏幕、自定义字段数据等。 按需添加字段—SCF字段生成器允许您快速轻松地将字段添加到 WP 编辑屏幕&…

第一个servlet程序

文章目录 在原有工程上建立模块前端配置前后端映射关系添加外部依赖库后端代码启动配置 在原有工程上建立模块 添加web框架 前端 应用结构 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>第一…

什么是SYN flood,如何处理

在数字化时代&#xff0c;随着互联网的普及和技术的飞速发展&#xff0c;网络安全问题变得日益严峻。Flood攻击&#xff0c;作为一种典型的网络攻击手段&#xff0c;对个人和企业的信息安全构成了重大威胁。通过深入了解Flood攻击的概念、特点、影响及解决方案&#xff0c;我们…

SpringSecurity源码分析以及如何解决前后端分离出现的跨域问题

解决Security前后端分离出现的跨域问题 一. Security源码分析 首先在看源码之前我们先来看这张图 , 这张图展示了Security执行的全部流程 从上图可知Security执行的入口是UsernamePasswordAuthenticationFilter这个抽象类 , 那我们就先从该类进行分析 1. UsernamePasswordAu…