Leaflet【二】图层绘制——UI图层【点线面】& 矢量图层【img、svg】

layer图层

在leaflet当中使用图层比OL当中简便一点,我们创建的layer图层可以直接通过 addTo 方法加到地图上,不需要通过layer、source再去做一些区分,

图标 Icon

创建Marker时提供的一个Icon 详细配置–>go

  // 导入一张图片作为图标
  import Money from '@/assets/image/money.png';
  const myIcon = L.icon({
    iconUrl: Money,
    iconSize: [38, 38], // 尺寸(px)
    iconAnchor: [0, 0], // 相对于其左上角的位置
    popupAnchor: [0, 0], // 弹出窗口(popup)的坐标
    shadowUrl: '', // 图标阴影图像
    shadowSize: [40, 40], // 阴影图像的大小(px)
    shadowAnchor: [0, 0] // 阴影图像相对于其左上角的位置
  });

点 marker

通过marker创建的点就是一个layer,可以直接通过addTo加到地图上
移步 --> Marker 配置

// 构造函数
L.marker([经纬度],{options 配置对象})
// 简单marker对象
const marker = L.marker([31.5, 120]).addTo(map);
// 使用icon
const marker = L.marker([31.5, 120], {
  icon: myIcon, // 标记使用的图标
  title: 'marker1', // 相当于div的title属性 鼠标移入后的提示
  alt: 'icon 丢失了?', // 相当于img标签的alt
  zIndexOffset: 1000, // 高度
  opacity: 0.5, // 透明度
  draggable: true // 是否可拖拽
}).addTo(map);

在这里插入图片描述

路径 Path

一个抽象的类,包含了矢量覆盖物 (Polygon(多边形), Polyline(折线), Circle(圆形))之间共享的选项和常量。主要是他的一些属性(options)使用 path 抽象类的属性

选项类型默认值说明
strokeBooleantrue是否沿路径绘制边框。把它设置为false ,可以禁用多边形或圆形的边框。
colorString‘#3388ff’ Stroke(描边)颜色
weightNumber3Stroke(描边)宽度,单位:像素
opacityNumber1.0Stroke(描边)的不透明度
lineCapString‘round’定义描边 结束时使用的形状 的字符串。
lineJoinString‘round’定义在描边 转角处使用的形状 的字符串。
dashArrayStringnull一个定义描边的点画线的 图案范式的字符串。 在一些旧的浏览器中,对 Canvas-powered 图层不起作用。
dashOffsetStringnull一个字符串,它定义了进入 dash 范式的距离,以 dash 开始。 在一些旧的浏览器中,对 Canvas-powered 图层不起作用。
fillBooleandepends是否对路径进行颜色填充。设置为 false 可以禁止对多边形或圆形的填充。
fillColorString*填充颜色。默认为 color 选项的值。
fillOpacityNumber0.2填充的不透明度。
fillRuleString‘evenodd’一个字符串,定义 形状的内部区域 是如何被确定的。
bubblingMouseEventsBooleantrue当为 true时,这个路径上的鼠标事件将在地图上触发相同的事件 (除非使用 L.DomEvent.stopPropagation )。
rendererRenderer在这个路径上使用这个特定的 Renderer(渲染器) 实例。 优先于地图的 default renderer(默认渲染器)。
classNameStringnull在一个元素上设置的自定义类名。仅适用于 SVG 渲染器。

折线Polyline & 多边形Polygon & 矩形Rectangle

折线和多边形本质上是一样的,只是看第一个点和最后一个点会不会自动连接起来构成的是一条线段还是一个平面(多边形)

继承关系: Path -> Polyline -> Polygon -> Rectangle

// 多边形在入参的数组当中可以入多维数组,会挨个解析,下面就相当于两个三角形
const polygonPos = [
  [[45.51, -122.68],
    [37.77, -122.43],
    [34.04, -118.2]],
  [[40.78, -73.91],
    [41.83, -87.62],
    [32.76, -96.72]]
];
// 这里的{} 属性都是继承于Path对象的
const polygon = L.polygon(polygonPos,{}).addTo(map);

// 折线 polyline和polygon基本上是一样的,这里的入参polyLinePos和上面一样,我就不贴这个数据的代码了
const polyline = L.polyline(polyLinePos, {color: 'red'}).addTo(map);

// 矩形
const bounds = [[24.5, 125.7], [26.1, 126.8]];
L.rectangle(bounds, {color: '#ff7800', weight: 1}).addTo(map);
map.fitBounds(bounds);   //地图定位,入参是这个矩形所在的位置,那么也就是相当于定位到矩形

在这里插入图片描述

圆形标记CircleMarker & 圆 Circle

区别在于CircleMarker 的半径是以像素为单位,而Circle的半径是米

继承关系: Path -> CircleMarker -> Circle

const circle = L.circle([21, 120], {
  color: 'red',
  fillColor: '#f03',
  fillOpacity: 0.5,
  radius: 500000
}).addTo(map);
const circleMarker = L.circleMarker([26, 125], {
  radius: 10,
  fillColor: '#ff7800',
  color: '#000',
  weight: 1,
  opacity: 1,
  fillOpacity: 0.8
}).addTo(map);

在这里插入图片描述

弹出框 popup

用于在地图的某些位置打开弹出窗口。使用 Map.openPopup 打开弹出窗口,同时确保一次只打开一个弹出窗口。弹出窗option 配置

// 提示弹出框
const popup = L.popup({}).setLatLng([20, 125]).setContent('这是弹窗.').openOn(map);
// 也可以给点线面加上(当单击点之后弹出)
marker.bindPopup('<b>Hello world!</b><br>弹框.');

工具提示 Tooltip

用于在地图图层顶部显示小文本。

marker.bindTooltip('my tooltip text').openTooltip();

在这里插入图片描述

图片图层 ImageOverlay

用于在地图的特定边界上加载和显示单个图像

  for (let i = 0; i < 3; i++) {
    for (let j = 0; j < 3; j++) {
      const bounds = [[(j - 1) * 5, (i - 1) * 5], [5 * j, 5 * i]];
      L.imageOverlay(`https://picsum.photos/300/300?/${i}/${j}`, bounds).addTo(map);
    }
  }
选项类型默认值说明
opacityNumber1.0图像图层的不透明度。
altString‘’alt 属性的文本内容(对于可访问性很有用)。
interactiveBooleanfalse如果为 true,当单击或悬停时,图像图层将发出 鼠标事件。
crossOriginBoolean\Stringfalse是否允许跨域
errorOverlayUrlString‘’图像图层的 URL,以代替加载失败的图层。
zIndexNumber1图层的显式 zIndex。
classNameString‘’为图像指定一个自定义类名。默认是空的。

在这里插入图片描述

矢量图层 SvgOverlay

用于在地图的特定边界上加载、显示和提供对 SVG 文件的 DOM 访问。 扩展自 ImageOverlay。

  var svgElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
  svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
  svgElement.setAttribute('viewBox', '0 0 200 200');
  svgElement.innerHTML = '<rect width="200" height="200"/><rect x="75" y="23" width="50" height="50" style="fill:red"/><rect x="75" y="123" width="50" height="50" style="fill:#0013ff"/>';
  var svgElementBounds = [[32, -130], [13, -100]];
  L.svgOverlay(svgElement, svgElementBounds).addTo(map);

在这里插入图片描述

视频图层 VideoOverlay

用于在地图的特定范围内加载和显示视频播放器。 扩展 ImageOverlay。

const videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm';
const videoBounds = [[32, -130], [13, -100]];
L.videoOverlay(videoUrl, videoBounds).addTo(map);
  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Modify_QmQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值