leaflet + 天地图底图 + 地图点击选点标注

初始化地图和数据

<div id="map"></div>
import * as L from 'leaflet';
import 'leaflet/dist/leaflet.css';
var map = null;
const tdtMapKey = '天地图key';
var markerArr = [];
function initMap(data = []){
	const VEC_C = 'http://{s}.tianditu.com/vec_c/wmts?layer=vec&style=default&tilematrixset=c&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=';
    const CVA_C = 'http://{s}.tianditu.com/cva_c/wmts?layer=cva&style=default&tilematrixset=c&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=';
    let { lat, lng }  = data.length && data[0] 
    map = L.map('map', {
        minZoom: 3,
        maxZoom: 17,
        center: [lat || 34.33213, lng || 109.00945],
        zoom: 10,
        zoomControl: false,
        attributionControl: false, //版权控制器
        crs: L.CRS.EPSG4326,
    });
    L.tileLayer(VEC_C + tdtMapKey, {
        zoomOffset: 1,
        subdomains: ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7'],
    }).addTo(map);
    L.tileLayer(CVA_C + tdtMapKey, {
        tileSize: 256,
        zoomOffset: 1,
        subdomains: ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7'],
    }).addTo(map);
    map.on('click', ($event) => clickMap($event));
    // 给地图上添加标注
    data.forEach(v => {
        const marker = L.marker([ v.lat, v.lng ], config).addTo(this.map);
        marker.bindTooltip(`经度:${v.lng}<br>纬度:${v.lat}<br>地名:${v.address}`, { direction: 'top', className: 'my-tooltip', offset: [0, -10] }); //每个标注绑定tooltip
        marker.on('dragend', ($event) => dragend(v.id,$event));// 为每个标注添加拖拽结束事件
        v.marker = marker;
    })
    markerArr = data;
}

地图点击事件

function clickMap({ latlng }){
	getPoi(latlng,Date.now())
}

标注的拖拽事件

dragend(id,{ target }){
	getPoi(target._latlng,id)
}

数据处理

getPoi(latlng,id = ""){
	let { lat, lng } = latlng;
	let index = markerArr.findIndex(obj => obj.id == id);
    let item = index >= 0 ? markerArr[index] : {};
    if(item?.lat == lat && item?.lng == lng) return;
    if(index >= 0){
      item.lng = lng;
      item.lat = lat;
      item.marker.bindTooltip(`经度:${lng}<br>纬度:${lat}`,{ direction: 'top', className: 'my-tooltip',offset: [0, -10]}); //marker重新绑定tooltip
  	}else{
      const marker = L.marker([ lat, lng ], config).addTo(map);
      marker.bindTooltip(`经度:${lng}<br>纬度:${lat}`, { direction: 'top', className: 'my-tooltip', offset: [0, -10] });
      marker.on('dragend', ($event) => dragend(id,$event));
      markerArr.push({
          marker, lat, lng, id
      })
  	}
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue Leaflet 是一种结合了Vue框架和Leaflet库的前端技术,用于展示和操作地图地图是一种具有高清影像和矢量数据的地图服务,提供了丰富的地理信息资源和功能,如地图展示、地图操作、定位导航等。 Vue Leaflet 可以通过调用地图的API接口,获取并展示地图的各类地理信息。通过Vue的组件化开发方式,可以方便地在Vue项目中使用这些地理信息,实现自定义的地图功能。例如,在Vue Leaflet 中可以实现地图、标记点、线段、面等地理要素的显示和编辑。 Vue Leaflet 提供了一套方便易用的API和组件,可以轻松地在Vue项目中集成和使用地图。比如,可以使用Vue Leaflet 提供的地图组件将地图展示在网页中,可以使用它提供的标记点组件在地图上添加标记,可以使用它提供的工具条组件进行地图的操作和导航等。 使用Vue Leaflet 可以有效地提高开发效率和用户体验。通过其简洁的API和灵活的组件,开发人员可以快速地实现各种地图需求,如显示地图、标记地点、展示线段等。并且,Vue Leaflet 结合了Vue框架的优势,可以更好地组织和管理地图相关的逻辑代码,使开发工作更加方便和高效。 总之,Vue Leaflet 是一种方便、灵活和高效的前端技术,用于展示和操作地图。它通过结合Vue框架和Leaflet库,提供了一套方便易用的API和组件,帮助开发人员快速实现各种地图需求,提高开发效率和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值