uni-app 地图手绘图覆盖方案,类似智慧景区小程序

news/2024/7/10 1:10:44 标签: 小程序, vue, html5, uni-app

前言:本以为很简单就可以解决的一样东西,就是在地图特定位置放置一个覆盖的图片就好了,实际上却是很简单,但是可惜你做的是小程序,这样子思路就会被截断。先自己摸索百度,最后发现这个版块是微信自家的服务,不对外开放,想要开放那就要问问它,最后发动是钞能力啦,这明显不符合要求。所以想过几种方法,最后使用的是web-view 嵌套 高德地图的自定义地图的方法实现。

思路:

因为经过试验,所有微信方面小程序的方法,都不能满足要求,都不能实现如下效果

所以只能通过先做好一个H5的地图,通过web-view标签 嵌套在小程序,这样就能达到这种效果,我这边使用的是高德地图的自定义功能,高德的都是用编程的方式,所以都是代码块,没有像小程序那种可以使用标签写的。

因为这类的模板很多都不免费分享,这让我很懊恼。索性自己做了一个demo 然后分享出来供有需要的人使用,毕竟看微信开发者文档中挺多人求,但是都没热心人去分享。

一、引入高德地图

1.到高德开发平台申请账号,在控制台创建相关的应用,这里我们使用的网页的api,也就web端,拿到key就可以了

在这里插入图片描述

  1. 这里的步骤就可以用这位博主的方法,我也是用他的方法 然后跟着文档改出来的
    @小傲哥哥

二、使用

上面的博主的一定要看。
标签

<template>
	<div style="width: 100vw;height: 100vh;">
		<div id="map"  style="width: 100vw;height: 100vh;position: absolute;"></div>
	</div>
</template>

先引入js文件

import AMap from '../../utils/utils.js'

data数据是上面博主的摘抄下来的

data() {
			return {
				title:'hello',
				provider:'',
				map: null,
				zoom:15,
				resAmap:null,
				scrollH:500,
				scrollW:500,
				initLat:38.913423,//初始维度
				initLng:116.368904,//初始经度
				covers:[],
				LlayAroundGroupOpen:true,  //l网周边
			}
		}

其实就这么一段代码是有用的,要是看不懂可以直接看官方文档的图片覆盖
图层覆盖

async initAMap() {
							try {
								this.resAmap = await AMap();
								this.$nextTick(() => {
									let that = this
									// this.getBroewerLatLng();
									console.log('这是获取到的方法',this.resAmap)
									var map = new this.resAmap.Map('map', {
										center: [this.initLng, this.initLat],
										zoom: this.zoom,
										resizeEnable: true
									});
									this.map = map;
									var imageLayer = new this.resAmap.ImageLayer({
									    bounds: new this.resAmap.Bounds(		// 这是你 地图铺在哪里的地方 虚假数据请勿使用
										 [114.086041, 23.600853], //图片左下角  第一位 +的话右移 - 左移 
										 [114.099361, 23.581953], // 图片右上角
										),
									    url: 'https://amappc.cn-hangzhou.oss-pub.aliyun-inc.com/lbs/static/img/dongwuyuan.jpg', // 这是你覆盖在地图的图片
									    zIndex:2,
									    zooms: [3, 20] // 设置可见级别,[最小级别,最大级别]
									})
									
			
										 // 创建一个 Icon
									    var startIcon = new this.resAmap.Icon({
									        // 图标尺寸
									        size: new this.resAmap.Size(40, 40),
									        // 图标的取图地址
									        image: 'https://lbs.amap.com/demo/jsapi-v2/example/selflayer/imagelayer', 
									        // 图标所用图片大小
									        imageSize: new this.resAmap.Size(40, 40),
									     })
									    var infoWindow = new this.resAmap.InfoWindow({offset: new this.resAmap.Pixel(0, -30)});
									    // 这里的marker 就是地图上面的你显示的景点的标点,要多少个可以循环
									        var marker = new this.resAmap.Marker({
												icon:startIcon,
									            position:  [114.086041, 23.600853], // 这是定位的点
									            map: map,
									            // 这是下标显示的名字, 我这里没注意看 所以用了偏移值,其实可以只用 top 改成 bottom 应该也一样
												label: {
													direction: 'top', // 显示在标记图片的什么地方
													content: "<div class='labelContent'>"+'小青龙'+"</div>",
													offset: new this.resAmap.Pixel(0,70) // 偏移值 
												}
									        });
									        // 设置点 点击时候触发的方法
									        marker.on('click', markerClick);
									        marker.emit('click', {target: marker});
									    
											// 设置定位地点为标点的中心
									map.setFitView();
									map.add(imageLayer);
									map.on('click', this.showInfoClick); // 地图点击的方法
									console.log(this.map)
									//解析定位结果
									// var then = this;
									function onComplete(data) {
										console.log(data) // 获取到的定位信息
									}
									function markerClick(e) {
										console.log('点击到的e',e.target)
									}
									function onError(data) {
										console.log(data) // 定位失败的信息
									}
								})
							} catch (e) {
								console.log(e)
							}
						}

到了这里就完成了,只需要把这个项目部署在公网上,然后小程序直接用

 <web-view src="公网地址" style="width: 100vw;height: 100vh;"></web-view>

// ========================== 修改2021-7-6 ==================//
补充一句: 公网地址在发布正式版本中,需要去微信管理平台补充 公网域名作为业务地址才行,不然那会出现网页非法不能查看的情况。
在这里插入图片描述


http://www.niftyadmin.cn/n/1529391.html

相关文章

015.SpringBoot进程缓存

无缓存调用2次数据库接口&#xff0c;输出2条日志 引入缓存依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency> 在启动类添加EnableCaching开启缓存 Ena…

微信网页调用jssdk扫一扫,63002报错的坑,ios的兼容问题

一&#xff0c;因为项目需要用到微信网页扫一扫功能&#xff0c;并且去找了很多文章都没有统一的整理&#xff0c;所以就整理了一下 比较常见的坑 1.如何在网页调用扫一扫功能 1. 先引入npm npm install weixin-js-sdk如果你需要用微信的支付那些api 那就需要多引入 weixin-…

016.SpringBoot+Redis

Redis安装教程可以看这里 Redis 安装 | 菜鸟教程 Redis安装目录 启动Redis 打开Cmd cd C:\redisredis-server.exe redis.windows.conf 下面截图代表启动了redis Redis常规命令 Cmd cd C:\redis后--连接服务redis-cli.exe -h 127.0.0.1 -p 6379--获取redis服务器信息Inf…

017.1.SpringBoot+Elastic-Job任务调度-配置写在类里

安装zookeeper 2.0 Zookeeper 安装配置 | 菜鸟教程 解压到本地&#xff0c;并创建data和logs文件夹 创建配置zoo.cfg tickTime2000dataDirC:/zookeeper-3.4.5/datadataLogDirC:/zookeeper-3.4.5/logsclientPort2181 启动 引入依赖 <dependency><groupId>com.gi…

vue关于axios跨域有问题 后的解决记录

因为axios本身没有跨域的设置&#xff0c;有时候可以通过设置headers进行跨域处理的时候&#xff0c;(可能没深入了解这方面的知识),设置完 跨域头axios跨域会出现 Strict-origin-when-cross-origin&#xff08;双重跨域&#xff09;跨域问题&#xff0c;所以这时就只能换一种跨…

017.2.SpringBoot+Elastic-Job任务调度-配置写在XML里

引入依赖 <dependency><groupId>com.dangdang</groupId><artifactId>elastic-job-lite-core</artifactId><version>2.1.5</version> </dependency> <dependency><groupId>com.dangdang</groupId><artif…

017.4.SpringBoot+Elastic-Job任务调度-后台管理

后台官方地址 https://github.com/apache/shardingsphere-elasticjob 打包后进入bin&#xff0c;运行bat 输入http://localhost:8899/进入后台 账号 root 密码root 添加配置 就可以监控服务的运行了 修改端口 修改登录密码

vue在开发中想要刷新标签重新渲染的问题,($nextTick + setTimeout)

如题&#xff0c;当在vue开发中当你用其他组件需要做demo操作时&#xff0c;你改变了其中的数据并重新触发想要更新时&#xff0c;你发现他的数据不是覆盖而是叠加上去了 比如 在一个 组件标签id xxx中 他保存的数组是根据[1,2,3,4]的数据渲染时&#xff0c;当你改变数据重新…