vue3+leaflet开发地图入门教程(超级详细)

vue3+leaflet开发地图01

1.离线地图下载

​ 离线地图下载器有很多,网络上也很多文档,这里不再详细说明,根据项目要求下载对应的瓦片地图就好

2.leaflet官网及地图加载

Leaflet - 一个交互式地图 JavaScript 库 (leafletjs.cn)

​ 官网第一个案例就是加载地图,也很简单,不再详述

3.使用leaflet

3.1 实现动态线段

#安装
yarn add leaflet
#或者
npm i leaflet
#安装插件
npm install leaflet-ant-path

//引入插件 antpath
import {AntPath} from 'leaflet-ant-path'
//折线坐标
let path = [[维度,经度],[维度,经度]...]
//动态折线
 let gPath = antPath(path, {
      paused: false, //暂停  初始化状态
      reverse: false, //方向反转
      delay: 3000, //延迟,数值越大效果越缓慢
      dashArray: [15, 15], //间隔样式
      weight: 7, //线宽
      opacity: 0.8, //透明度
      color: '#0000FF', //颜色
      pulseColor: '#ffffff', //块颜色
    })
 //将动态折线添加到地图中即可
   gPath.addTo(map)

3.2 添加标记点

//设置标记图标样式和大小
let customIcon = L.icon({
    iconUrl: 'path/to/your/custom/icon.png',
    iconSize: [30, 30],
    iconAnchor: [15, 30],
    popupAnchor: [0, -30]
});
//鼠标悬停,变大图标
marker.on('mouseover', function() {
    marker.setIcon(highlightIcon);
});
//鼠标移走,变默认
marker.on('mouseout', function() {
    marker.setIcon(defaultIcon);
});

聚合标记

作用:在Leaflet中,可以通过使用插件如MarkerCluster来实现标记点聚合的功能。MarkerCluster插件可以自动将标记点聚合,并在用户操作地图时根据地图的缩放级别进行动态展示和隐藏。

// 添加标记点并配置聚合功能
var markers = L.markerClusterGroup();
// 创建标记点
var marker1 = L.marker([lat1, lng1]);
var marker2 = L.marker([lat2, lng2]);
// 将标记点添加到聚合组
markers.addLayer(marker1);
markers.addLayer(marker2);
// 将聚合组添加到地图
map.addLayer(markers);

3.3 添加点击事件

特别注意: Leaflet的事件监听器是一次性的,如果你没有重新添加监听器,事件就不会再次触发。核心代码如下:

// 定义点击事件处理函数
function onMarkerClick() {
    alert('Marker clicked!');
    //移除绑定事件
    marker.off('click');
    // 重新绑定事件,如果需要的话
    marker.on('click', onMarkerClick);
}
// 绑定点击事件
marker.on('click', onMarkerClick);


//需要传参的话按照如下使用方法
function onMarkerClick(e, myCustomParam) {
    alert("Marker clicked with custom param: " + myCustomParam);
}
// 绑定点击事件,并传递自定义参数
marker.on('click', onMarkerClick.bind(null, marker,'myCustomValue'));

3.4 弹窗设置

使用setContent这个api可以灵活定制弹窗。若相似弹窗多,建议封装一个共用弹窗组件。

4.天地图和高德地图坐标转换

坐标系算法不一致,所以需要转换,参考文档:

高德地图更换天地图底图(坐标转换)—使用高德API(WMTS)_高德地址查询api 天地图-CSDN博客

### Vue 3 中使用 Leaflet 的教程 #### 安装依赖包 为了在 Vue 3 项目中集成 Leaflet 地图库,需安装 `leaflet` 和适用于 Vue 3 的插件 `@vue-leaflet/vue-leaflet`。 ```bash npm install leaflet @vue-leaflet/vue-leaflet ``` 此命令会将所需的地图组件及其样式文件加入到项目里[^2]。 #### 创建地图容器并初始化 在模板部分定义一个用于承载地图的 `<client-only>` 或者简单的 div 元素作为占位符,在脚本内通过 `L.map()` 方法来实例化一个新的地图对象,并设置其视口位置与缩放级别。 ```html <template> <div ref="mapContainer" style="height: 400px;"></div> </template> <script setup> import "leaflet/dist/leaflet.css"; import L from "leaflet"; onMounted(() => { const map = L.map(this.$refs.mapContainer).setView([51.505, -0.09], 13); L.tileLayer(&#39;https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png&#39;, { attribution: &#39;© OpenStreetMap contributors&#39; }).addTo(map); }); </script> ``` 这段代码展示了如何在一个 Vue 组件内部加载基础底图瓦片服务以及配置初始中心坐标和缩放比例。 #### 添加交互功能 对于更复杂的需求比如支持用户绘制图形、编辑现有要素或是响应鼠标点击事件等操作,则可以借助于额外的 JavaScript 插件如 `Leaflet.draw` 来增强应用的功能集。同时也可以利用官方提供的 API 文档探索更多可能性[^3]。 #### 图层管理 当涉及到不同类型的地理数据叠加显示时(例如矢量特征、影像覆盖物),可以通过构建自定义图层组或将各独立图层添加至默认的根图层上来实现分层效果。下面的例子说明了怎样向已有地图添加一张图片覆盖物: ```javascript const imageUrl = "/path/to/image.png"; // 替换成实际路径 const bounds = [[lat1, lon1], [lat2, lon2]]; // 设置图像边界范围 this.imageOverlay = L.imageOverlay(imageUrl, bounds).addTo(map); ``` 上述片段中的变量 `bounds` 需要被赋予具体的经纬度值以限定所加载资源的位置;而 `imageOverlay` 则代表新创建出来的图像型图层实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值