czh的开发笔记 - leaflet - 地图操作

前言

这个只是个人对该js库的学习文档,介绍一般不会全,详情可查看官方文档。

leaflet是什么

是一个轻量化的地图显示组件
可以在地图中显示标记和其他绘图等
官方文档:https://leafletjs.com/reference-1.7.1.html

如何引入使用 leatflet

啥也不说了,那个页面要用的直接copy

  import * as L from 'leaflet'

当然如果可以配置到Vue对象中,做全局使用也可以,看需求。

api记录

本文内环境皆为vue2.6.11+leaflet
示例函数与数据皆为测试数据,仅供参考使用
this.map为map对象

初始化地图对象

函数示例

示例:

this.map = L.map("map", {
    center: [40, 116],
    zoom: 14,
    zoomControl: false,
    doubleClickZoom: false,
    attributionControl: false,    
    preferCanvas: true
});
L.tileLayer(
    "http://mt0.google.cn/vt/lyrs=y@160000000&hl=zh-CN&gl=CN&src=app&y={y}&x={x}&z={z}&s=Ga",
).addTo(this.map);
  1. L即为上文所引入的leaflet对象
  2. center参数中为 [经度,纬度]
  3. tileLayer 叠加了一层数据层(也就是地图数据)
  4. 建议加入 preferCanvas 这个有效提升性能,但是不支持ie9以下的ie浏览器(就是放弃用svg渲染,改用 canvas 渲染【好像是调用了webgl】)

设立marker

函数示例

示例:

let marker_name = L.marker([51.5, -0.09],{
    icon:'url', // 图片链接
    title:'String', // 标签文字
    alt:'String', // 一般是对icon的注解 
    keyboard:'Boolean', // 设置为true时,冒泡事件正常。设置为false则阻止事件传递到画布对象
}).addTo(this.map)

  1. 向地图中的 [经度,纬度] 中插入一个标签

示例2:如何添加自定义图标文件

let img = require('@/assets/marker.png')
let myIcon = L.icon({
    iconUrl: img,
    // iconUrl:'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png',
    iconSize: [80,80 ],
    iconAnchor: [40, 80],
    popupAnchor: [-3, -76],
});
L.marker([lat, lng], {
    title: JSON.stringify({
    ...e.latlng
    }),
    name:'Are u sure?',
    icon: myIcon,
    alt: 'linkPoint'
}).addTo(this.map)
  1. 使用本地文件需要注意路径引入的问题

绘制圆点 .circle()

函数示例

示例:

L.circle([40, 116], 500, {
    color: 'red',
    fillColor: '#f03',
    fillOpacity: 1
}).addTo(this.map);
  1. 位置点数组 [经度,纬度]
  2. 半径 500
  3. 样式对象 Json

遍历图层

函数示例

示例 - 普通

this.map.eachLayer((layer)=>{
    console.log(layer)
})

layer即为图层对象,注意如果之后使用了canvasMarker做性能优化的话,可能无法识别marker图层

示例2 - 与删除图层同用

 clearLayer(name = '') {
    this.map.eachLayer((layer) => {
        if (layer.options.name == name)
        this.map.removeLayer(layer)
    })
},

这个就是一个很典型的通过name来删除图层的方式,实际使用的时候可以通过很多方案,非常自由

绑定鼠标事件(点击/滑动/滚轮)

函数示例

示例:

this.map.on('mousemove', this.mousemove)

这个应该啥也不用讲了,注意一下在对应的div上加上一个事件捕捉反防止事件穿透

@mousemove.stop=""

事件列表我就不列了,网上一堆

多边形绘制

函数示例

示例:

L.polygon(pointList).addTo(this.map)

pointList 就是一个点的数组

绘制点对点线

函数示例

PS:其实使用多边形绘制的那个函数(polygon),然后只穿入两个点就可以
示例:

主动刷新/屏幕自适应/数据更新事件

函数示例

示例:

一些可能没那么重要但是也有用的东西

阻止冒泡

一般在js中使用

e.stopPropagation(); 

即可阻止继续向上一层节点冒泡,并开始返回事件
如果时ie环境则需要使用

window.event.cancelBubble = true; 

在元素中用@或者v-on时使用

@mousemove.stop=""
v-on:mousemove.stop=""

即可

经纬度和公里的换算

可能需要前后端核验操作

体验

讲道理vue2-leaflet 真不错,好用多了
讲道理我想做一个微博舆情工具,看看能不能通过解析ip来大致渲染出舆情分布图

性能优化相关

最后修改时间

2021年1月27日 20点44分

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element UI是一个基于Vue.js的组件库,v在Element UI中用于现双向数据绑定。它可以非常方便地将表单元素的值与Vue实例中的数据进行关联,以实现数据的双向同步。在循环中,如果需要获取指定输入框的值,可以使用v-for指令循环生成多个输入框,并在v-model中绑定一个数组,通过数组索引来获取指定输入框的值。另外,在Element UI中,v-model也可用于实现下拉框的默认选中功能,通过绑定到一个变量来控制下拉框的选中状态。在自定义组件中,v-model也可以使用,通过在组件的props中接收和触发input事件来实现组件与外部对象的双向绑定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue循环中多个input绑定指定v-model实例](https://download.csdn.net/download/weixin_38683721/13126213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Element中添加自定义全部选项并使用v-model绑定](https://blog.csdn.net/li1615882553/article/details/107919887)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [element实现v-mode效果](https://blog.csdn.net/czh4869623/article/details/127990319)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值