uniapp微信小程序实现地图展示控件

本文介绍了如何在地图上使用cover-view展示控件,包括设置样式、图标和绑定点击事件,以实现在点击时绘制面图形的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最终实现效果:

地图上展示控件,并可以点击。

目录

一、前言

二、在地图上展示控件信息 点击后可进行绘制面图形

1.使用cover-view将控件在地图上展示

2.设置控件样式,使用好看的图标

3.控件绑定点击事件


一、前言

原本使用的是controls,但是我发现官方明确说明,这个功能即将废弃,所以这里控件的展示我使用了cover-view

二、在地图上展示控件信息 点击后可进行绘制面图形

1.使用cover-view将控件在地图上展示

HTML部分

<!-- 展示地图信息  标绘位置情况 -->
<view class="myMap">
	<u-divider text="地图展示"></u-divider>
	<map id="mymap" class="myMap_map">
		<cover-view class="myMap_map__cover-view">
			<cover-view class="myMap_map__cover-view_mapControls">
				<!-- 显示绘制的控件-->
				<cover-view class="myMap_map__cover-view_mapControls_drawControl"></cover-view>
			</cover-view>
		</cover-view>
	</map>
</view>

设置CSS样式

// 地图模块样式
.myMap{
	width:100%;
	height: 500rpx;
	&_map{
		width: 100%;
		height: 450rpx;
		
		&__cover-view{
			position: absolute;
			top:calc(50% - 150rpx);
			left:calc(50% - 150rpx);
			
			&_mapControls{
				display: flex;
				flex-direction: column;
				align-items: center;
				
				&_drawControl{
					width: 50px;
					height: 50px;
					background-color: #ff0000
				}
			}
		}
	}
}

展示效果

2.设置控件样式,使用好看的图标

将控件移动到屏幕中地图的合适位置,并使用cover-image展示好看的图标展示

HTML部分

<!-- 展示地图信息  标绘位置情况 -->
<view class="myMap">
	<u-divider text="地图展示"></u-divider>
	<map id="mymap" class="myMap_map">
		<cover-view class="myMap_map__cover-view">
			<cover-view class="myMap_map__cover-view_mapControls">
				<!-- 显示绘制的控件-->
				<cover-view class="myMap_map__cover-view_mapControls_drawControl">
					<cover-image class="myMap_map__cover-view_mapControls_drawControl_drawicon" :src="mapData.drawIconPath"></cover-image>
					<cover-view class="myMap_map__cover-view_mapControls_drawControl_drawText">标绘位置</cover-view>
				</cover-view>
			</cover-view>
		</cover-view>
	</map>
</view>

CSS设置地图

// 地图模块样式
.myMap{
	width:100%;
	height: 500rpx;
	&_map{
		width: 100%;
		height: 450rpx;
		
		&__cover-view{
			position: absolute;
			top:40rpx;
			left:35rpx;
			
			&_mapControls{
				display: flex;
				flex-direction: column;
				align-items: center;
				
				&_drawControl{
					display: flex;
					align-items: center;
					justify-content: center;
					flex-direction: column;
					width: 48px;
					height: 48px;
					background-color: #fff;
					border-radius: 5px;
					
					&_drawicon{
						width: 20px;
						height: 20px;
						margin-bottom: 6px;
					}
					
					&_drawText{
						font-size: 10px;
						color: #00AF99;
					}
				}
			}
		}
	}
}

展示效果:

3.控件绑定点击事件

直接在控件的cover-view上绑定click事件

点击效果:

### 实现 UniApp微信小程序手绘地图功能 为了实现UniApp 开发的微信小程序中的手绘地图功能,可以采用 `leafletwx` 组件来替代默认的小程序 map 组件。此组件基于 Leaflet 并利用了微信原生组件进行构建[^1]。 #### 准备工作 确保已经安装并配置好 UniApp 的开发环境,并创建一个新的项目或者打开现有的项目文件夹。 #### 添加依赖项 前往 GitHub 或者其他托管服务下载 `leafletwx` 和其对应的 UniApp 调用示例库 `unileafet` 。将这些资源集成到项目的合适位置以便后续引用。 #### 修改 pages.json 文件 编辑 `pages.json` 来注册自定义的地图组件: ```json { "path": "pages/map/map", "style": { "navigationBarTitleText": "Hand Drawn Map", "usingComponents": { "v-leaflet": "plugin://zhgeo-plugin/zhgeo-component" } } } ``` 这段 JSON 定义了一个新的页面路径用于展示手绘地图界面,并引入了名为 `v-leaflet` 的插件作为全局可用的地图控件[^3]。 #### 编写 Vue 页面结构 在对应的手绘地图页面中编写 HTML 结构以及绑定事件处理函数以响应用户的交互操作。下面是一个简单的例子展示了如何设置画布区域供用户绘制路线或标记地点: ```html <template> <view class="container"> <!-- 地图容器 --> <div id="mapContainer"></div> <!-- 控制按钮组 --> <button @click="startDrawing">开始绘画</button> <button @click="stopDrawing">停止绘画</button> <!-- 显示当前状态 --> <text>{{ drawingStatus }}</text> </view> </template> <script> export default { data() { return { leafletMap: null, drawControl: null, drawingStatus: '未启动' }; }, mounted() { this.initLeaflet(); }, methods: { initLeaflet() { const L = require('leaflet'); // 初始化地图对象 this.leafletMap = L.map('mapContainer').setView([51.505, -0.09], 13); // 加载底图瓦片层 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors', subdomains: ['a','b','c'] }).addTo(this.leafletMap); // 创建绘制工具栏 this.drawControl = new L.Control.Draw({ position: 'topright', draw: { polyline: true, polygon: false, circle: false, rectangle: false, marker: false }, edit: { featureGroup: drawnItems } }); this.leafletMap.addControl(drawControl); this.leafletMap.on(L.Draw.Event.CREATED, (event) => { let layer = event.layer; console.log("新图形已创建:",layer.toGeoJSON()); }); this.drawingStatus = '初始化完成'; }, startDrawing(){ this.drawControl._toolbars.draw._modes.polyline.handler.enable(); this.drawingStatus='正在绘画'; }, stopDrawing(){ this.drawControl._toolbars.draw._modes.polyline.handler.disable(); this.drawingStatus='暂停绘画'; } } }; </script> <style scoped> .container { width: 100%; height: calc(100vh - var(--window-top)); } #mapContainer { width: 100%; height: 80%; } </style> ``` 上述代码片段通过 JavaScript 动态加载了 Leaflet 库及其扩展模块,并设置了基本的地图视图参数;同时提供了两个按钮让用户能够控制是否允许自由绘制线条于地图之上。 #### 测试与优化 完成以上步骤之后就可以运行应用测试效果了。如果遇到任何问题可以通过调试日志排查错误原因。另外还可以考虑增加更多实用特性比如保存所绘制的内容至服务器端数据库或是与其他社交平台分享等功能增强用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙姐姐QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值