uniapp-实现天地图以及行政区划图层覆盖

前言:

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

代码效果如下图所示:

    

详细代码100%复制可用直接搞定

申请天地图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></head><body><!-- 显示地图的DOM节点 --><view id="viewDiv" style="width: 100%;height: 100%;margin: 0;padding: 0;overflow: hidden;position: absolute;top: 0;left: 0;"></view><script>function load() {var T = window.T;var imageURL = 'http://t0.tianditu.gov.cn/vec_w/wmts?' +'SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles' +'&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=替换成你自己的天地图key';var lay = new T.TileLayer(imageURL, {minZoom: 1,maxZoom: 16});var config = {layers: [lay]};this.map = new T.Map('viewDiv', config); // 地图实例this.map.enableScrollWheelZoom(); //允许鼠标滚轮缩放地图// 创建地图图层对象let mapTypeSelect = [{'title': '地图','icon': 'http://api.tianditu.gov.cn/v4.0/image/map/maptype/vector.png','layer': window.TMAP_NORMAL_MAP},{'title': '卫星','icon': ' http://api.tianditu.gov.cn/v4.0/image/map/maptype/satellite.png','layer': window.TMAP_SATELLITE_MAP},{'title': '卫星混合','icon': 'api.tianditu.gov.cn/v4.0/image/map/maptype/satellitepoi.png','layer': window.TMAP_HYBRID_MAP},{'title': '地形','icon': ' http://api.tianditu.gov.cn/v4.0/image/map/maptype/terrain.png','layer': window.TMAP_TERRAIN_MAP},{'title': '地形混合','icon': ' http://api.tianditu.gov.cn/v4.0/image/map/maptype/terrainpoi.png','layer': window.TMAP_TERRAIN_HYBRID_MAP}];var ctrl = new T.Control.MapType({mapTypes: mapTypeSelect});this.map.addControl(ctrl);this.map.setMapType(window.TMAP_NORMAL_MAP); addGeoBoundary(this.map);}function addGeoBoundary(map) {fetch('https://geo.datav.aliyun.com/areas_v3/bound/geojson?code=410500').then(response => response.json()).then(data => {var coordinates = data.features[0].geometry.coordinates;var centroid = data.features[0].properties.centroid;// 将地图中心设置为该行政区域的质心var centerLngLat = new T.LngLat(centroid[0], centroid[1]);this.map.centerAndZoom(centerLngLat, 8); //修改这里1-16即可调整地图首屏的大小coordinates.forEach(polygon => {polygon.forEach(boundary => {var boundaryPolygon = new T.Polygon(boundary.map(function(coord) {return new T.LngLat(coord[0], coord[1]);}), {color: "#7C7BF6",weight: 1,opacity: 0.7,fillColor: "#ABAAF3",fillOpacity: 0.1});boundaryPolygon.addEventListener("mouseover", function() {boundaryPolygon.setFillColor("#ABAAF3");boundaryPolygon.setFillOpacity(0.6);});boundaryPolygon.addEventListener("mouseout", function() {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><script>
data() {return {webviewStyles: {progress: {color: '#FF3333'},width: '100%', height: '300px' },},}
</script>

样式代码:

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

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

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

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

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

相关文章

儿童服装CPC认证的测试项目有哪些

儿童服装CPC认证的测试项目主要包括以下几个方面&#xff1a; 一、物理性能测试 小零件测试&#xff1a;检查产品是否含有小零件&#xff0c;避免对3岁及以下儿童造成窒息风险。这包括检查服装上的纽扣、拉链、装饰物等小部件是否牢固&#xff0c;以及是否容易脱落。锐点&…

探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱

文章目录 探索 Jupyter 笔记本转换的无限可能&#xff1a;nbconvert 库的神秘面纱背景&#xff1a;为何选择 nbconvert&#xff1f;库简介&#xff1a;nbconvert 是什么&#xff1f;安装指南&#xff1a;如何安装 nbconvert&#xff1f;函数用法&#xff1a;简单函数示例应用场…

安装vue发生异常:npm ERR! the command again as root/Administrator.

一、异常 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If you believe this might b…

安卓开发中轮播图和其指示器的设置

在安卓开发中&#xff0c;轮播图&#xff08;Carousel&#xff09;是一种常见的UI组件&#xff0c;用于展示一系列图片或内容&#xff0c;用户可以左右滑动来切换不同的视图。轮播图通常用于展示广告、新闻、产品图片等。 轮播图的指示器&#xff08;Indicator&#xff09;则是…

LlamaIndex 针对数据集表格数据的Pandas 查询引擎

Pandas简介 Pandas 是一个强大的数据处理和分析库&#xff0c;广泛应用于 Python 数据科学和机器学习领域。它提供了丰富的数据结构和数据操作工具&#xff0c;使得数据清洗、转换、合并、重塑、选择等任务变得更加简单高效。以下是 Pandas 的一些主要特点和常用功能&#xff…

大模型生图安全疫苗注入赛题解析(DataWhale组队学习)

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月实践赛的大模型生图安全疫苗注入赛道&#xff1b;本文主要整理本次赛事的基本流程和优化方法。&#x1f495;&#x1f495;&#x1f60a; 一…

IEC104规约的秘密之九----链路层和应用层

104规约从TCP往上&#xff0c;分成链路层和应用层。 如图&#xff0c;APCI就是链路层&#xff0c;ASDU的就是应用层 我们看到报文都是68打头的&#xff0c;因为应用层报文也要交给链路层发送&#xff0c;链路层增加了开头的6个字节再进行发送。 完全用于链路层的报文每帧都只有…

好用,易用,高效,稳定 基于opencv 的 图像模板匹配 - python 实现

在定位、搜索固定界面图块时&#xff0c;经常用到模板匹配&#xff0c;opencv自带的图像模板匹配好用&#xff0c;易用&#xff0c;高效&#xff0c;稳定&#xff0c;且有多种匹配计算方式。 具体示例如下&#xff1a; 模板图&#xff1a; 待搜索图&#xff1a; 具体实现代码…

FreeRTOS - 任务管理

在学习FreeRTOS过程中&#xff0c;结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源&#xff0c;整理了该篇文章。如有内容理解不正确之处&#xff0c;欢迎大家指出&#xff0c;共同进步。 参考&#xff1a;https://rtos.100ask.net/zh/…

【C++刷题】力扣-#219-存在重复元素II

题目描述 给定一个整数数组 nums 和一个整数 k&#xff0c;判断数组中是否存在两个不同的索引 i 和 j 使得 nums[i] nums[j] 且 i! j。也就是说&#xff0c;不能有重复的元素。 示例 示例 1: 输入: nums [1,2,3,1], k 3 输出: true示例 2: 输入: nums [1,2,3,1,2,4], k …

SpringColoud GateWay 核心组件

优质博文&#xff1a;IT-BLOG-CN 【1】Route路由&#xff1a; Gateway的基本构建模块&#xff0c;它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真&#xff0c;则匹配到该路由。 Route路由-动态路由实现原理&#xff1a; 配置变化Apollo 服务地址实例变化…

H3C设备连接方式

Console线本地连接 协议Serial&#xff0c;接口com口&#xff0c;波特率9600&#xff08;设备管理器中查看com口&#xff09; 适用于设备初次调试 使用Telnet远程访问 适用于设备上架配置好后的维护管理 使用SSH远程访问 数据传输过程加密&#xff0c;安全的远程访问

洞察数字化营销的本质

数字化营销&#xff0c;即借助互联网、移动互联网、社交媒体等数字技术与渠道实现营销目标。涵盖市场调研、品牌推广、产品销售到客户服务全过程。 其特点显著。精准定位是一大优势&#xff0c;利用大数据分析和人工智能&#xff0c;深入了解客户需求、兴趣和行为&#xff0c;精…

AdmX_new

0x00前言 因为环境问题&#xff0c;此次靶场都放在vm上。都为NAT模式。 靶机地址: https://download.vulnhub.com/admx/AdmX_new.7z 需要找到两个flag文件。 0x01信息搜集 搜集IP 确认目标IP为172.16.8.131&#xff0c;进一步信息搜集 获取端口开放情况&#xff0c;版本信…

多模态大语言模型(MLLM)-Blip3/xGen-MM

论文链接&#xff1a;https://www.arxiv.org/abs/2408.08872 代码链接&#xff1a;https://github.com/salesforce/LAVIS/tree/xgen-mm 本次解读xGen-MM (BLIP-3): A Family of Open Large Multimodal Models 可以看作是 [1] Blip: Bootstrapping language-image pre-training…

TCP/IP 寻址

TCP/IP 寻址 概述 TCP/IP(传输控制协议/互联网协议)是一组用于数据网络的通信协议。它们定义了数据如何在网络上从一个设备传输到另一个设备。在TCP/IP网络中,每个设备都有一个唯一的地址,称为IP地址,用于标识网络上的设备。本文将深入探讨TCP/IP寻址的概念、类型、分配…

Lua脚本的原子性

Lua脚本之所以被认为是原子性的,主要源于Redis的内部实现机制和Lua脚本的执行方式。以下是对Lua脚本原子性的详细解释: 一、Redis的单线程模型 Redis是一个基于内存、可基于Key-Value等多种数据结构的存储系统,它使用单线程模型来处理客户端的请求。这意味着在任何给定的时…

Vue3中防止按钮重复点击的方式

本文列两种方式&#xff0c;推荐第一种&#xff0c;经过长时间测试第二种防止的还是会漏&#xff0c;这里也列一下 ①使用定时器&#xff08;推荐&#xff09; 判断3秒钟之内方法只能执行一次 <el-button click"handleClick" type"primary" :loading…

二叉树算法之二叉树遍历(前序、中序、后序、层次遍历)

二叉树遍历是指按照某种顺序访问二叉树的所有节点。常见的二叉树遍历方式包括前序遍历&#xff08;Preorder Traversal&#xff09;、中序遍历&#xff08;Inorder Traversal&#xff09;、后序遍历&#xff08;Postorder Traversal&#xff09;和层次遍历&#xff08;Level-or…

stm32 bootloader写法

bootloader写法&#xff1a; 假设app的起始地址&#xff1a;0x08020000&#xff0c;则bootloader的范围是0x0800,0000~0x0801,FFFF。 #define APP_ADDR 0x08020000 // 应用程序首地址定义 typedef void (*APP_FUNC)(void); // 函数指针类型定义 /*main函数中调用rum_app&#x…