leaflet移动端-uniapp 开发中的记录总结

移动端技术---uniapp

地图---leaflet

此篇主要为记录,以便自己随时找到。leaflet可以支持移动端,但是经过这次的项目,最好不要用uniapp,leaflet对原生更友好!如果有leaflet,最好避开uniapp。具体原因如下:

(在项目过程中的问题,还没有找到解决方法,不知大家有没有遇到过。leaflet在uniapp中只可以正常显示地图或者静态的数据无法在地图页面接收到动态的数据。多次尝试最后只能使用下策:webview将leaflet地图当作网页集成进移动端。之后更新代码和webview中的leaflet地图与uniapp之间的传值。)如果有大佬知道如何解决以上的问题,希望能指点一下,十分感谢!!

一、安装leaflet

npm install leaflet

 二、页面引入

import "leaflet/dist/leaflet.css";
import L from "leaflet";

 三、页面创建地图的容器

<view id="map" class="map" style="width: 100%;height: calc(100vh - 10px);">

四、初始化地图

这里引入的是天地图作为底图,key去官网申请。

var one = new L.tileLayer(
					'http://t0.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=你的key', {
						zoomControl: true,
						attributionControl: false
					})
				var two = new L.tileLayer(
					'http://t0.tianditu.com/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=你的key', {
						zoomControl: true,
						attributionControl: false
					})
				var three = new L.tileLayer(
					'http://t0.tianditu.com/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=你的key', {
						zoomControl: true,
						attributionControl: false
					})
				var four = new L.tileLayer(
					'http://t0.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=你的key', {
						zoomControl: true,
						attributionControl: false
					})
				var normal = L.layerGroup([one, three])
				var normal_ying = L.layerGroup([two, four])

				var map = L.map("map", {
					center: [31.27, 113.68],
					zoom: 13,
					layers: [normal],
					attributionControl: false,
					preferCanvas: true,
				});
				this.map = map

加载地图放在mounted里面

leaflet直接引入进uniapp中,在浏览器运行是没问题的,但是打包到真机上运行时,会发现地图无法加载在手机上,解决办法:

需要用到renderjs

如何加入图层控件

 

 

// 地图图层
var baseLayers = {
	'矢量图层': normal,
	'影像图层': normal_ying,
}
// 图层控件
L.control.layers(baseLayers, {}, {
	position: 'topright',
	collapsed: true
}).addTo(map);

// 自动定位用户的位置
map.locate({
	setView: true,
	maxZoom: 16
});

 如何在leaflet地图上加功能按钮

例如此处,加一个按钮,点击触发实现实时定位。

在leaflet添加功能按钮,可以使用一个插件(leaflet-easybutton)

GitHub - CliffCloud/Leaflet.EasyButton: leaflet control buttons with icons and callbacks

npm后,在页面引入

import "leaflet-easybutton"
L.easyButton('<img src="./static/local.png" style="height:20px;width:20px;">', function(btn, map) {
	map.locate({
		setView: true,
		maxZoom: 16
	});
}).addTo(map);

 引入图片资源的时候注意:App端视图层的页面引用资源的路径相对于根目录计算

如何在leaflet地图上实现绘制要素(点线面等)

这里根据需求,可以选择,下图是可绘制点线面。

可以使用一个插件(leaflet-geoman)

mapleegiser/leaflet-geoman

 里面讲解的十分详细,插件还是很强大的。

后面慢慢补充

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值