Leaflet简单使用

前言

    因为业务上的需求,要使用Leaflet 制作地图,而本人从未接触过,经过几天的研究,算是入门成功,现在小编和大家一起分享分享我这几天的成果 

下载引入

    npm下载 npm install leaflet

    在main.js中引入

import "leaflet/dist/leafle.css" // 引入css 
import * as L from "leaflet"

Vue.prototype.$L= L

    下载源码 

    进入官网下载,点击download,然后选择一个下载就好了

    CDN方式

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>

使用

    1.首先我们创建一个简单的地图

     html模块 准备一个div容器

<div id="map" style="width: 100%; height: 100%;"></div>

     js模块

//初始化 地图
var mymap = L.map('map').setView([51.505, -0.09], 13); // setView(LatLng(当前位置),zoom(默认开始显示的聚焦值))

//将图层加载到地图上
L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
	maxZoom: 18, // 最大的聚焦值
	attribution: 'Map data &copy; <a                                 
    href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, ' +
	'Imagery © <a href="https://www.mapbox.com/">Mapbox</a>', // 右下角展示的连接
	id: 'mapbox/streets-v11' // map样式
	}).addTo(mymap); // 添加挂载到mymap上

    这样一个简单的地图就出来了,接下来讲一讲地图中的标记以及一些配置项

    2.总结的一些map的option设置 

  // 初始化
  var mymap = L.map('map',{
        attributionControl:false, // 移除右下角标记
        zoomControl:false, // 移除上面的加减号缩放
        dragging:false // 不允许鼠标拖拽
        doubleClickZoom:true, // 是否可以双击放大 'center' 无论点击哪里,都会以试图中心进行缩放
        zoomSnap:1, // 强制控制放大缩小的比例
        boxZoom:false // 是否允许按住shift键拖拽
        maxZoom: 16, // 地图最大缩放比例
        minZoom:2, // 地图最小缩放比例
        scrollWheelZoom:false // 是否能让鼠标滚轮缩放地图
        wheelDebounceTime:500, // 规定滚轮缩放的时间
        wheelPxPerZoomLevel:1 // 每滚动一下缩放的比例
      }).setView([51.505, -0.09], 13);

    3.绘制marker标记

L.marker([51.5, -0.09]).addTo(mymap)
		.bindPopup("<b>Hello world!</b><br />I am a popup.") // bindPopup点击后提示信息
        .openPopup(); // openPopup关闭上一个bindPopup信息默认打开

    设置marker的自定义icon属性 

    图标方式

  var myIcon = L.icon({ // 当前位置标记的自定义图片图标
       iconUrl: require('../../assets/zaiban.png'), // 图片地址 在vue中导入图片地址的方式
       iconSize: [30, 30], // 图标大小 用x和y坐标(以像素为单位)表示一个点。通俗点,x(宽度)y(高度)
       iconAnchor: [20, 84], // 图标的偏移位置 如果不设置 默认为居中
       popupAnchor: [-2, -3], // 提示弹出窗口相对于icon的位置
       shadowUrl: 'my-icon-shadow.png', // 阴影图片的url
       shadowSize: [68, 95], // 阴影图片的大小
       shadowAnchor: [22, 94] // 阴影图片的偏移位置
    });
  L.marker([51.5, -0.09],{
     icon:myIcon, // 自定义图标标记
    }).addTo(mymap)
		.bindPopup("<b>Hello world!</b><br />I am a popup.").openPopup();

    标签方式

var myIcon = L.divIcon( // 当前位置标记的自定义div图标
      {
        iconSize: [50, 50], // 图标大小
        className: 'my-div-icon', // div的类名样式
        popupAnchor: [0, -15], // 提示弹出窗口相对于icon的位置
        html:'<p style="width: 100%;height: 100%;">你好你好你好</p>' // 插入html标签
       }
    );
L.marker([51.5, -0.09],{
  icon:myIcon, // 自定义图标标记
}).addTo(mymap)
	.bindPopup("<b>Hello world!</b><br />I am a popup.").openPopup();

    批量增加标记 layerGroup

let marker1 = L.marker([50, 50])
let marker2 = L.marker([50.001, 50.001])
L.layerGroup([marker1, marker2]).addTo(map);

    4.绘制圆形标记 circleMarker

var geojsonMarkerOptions = {
    radius: 8, // 圆形标记的大小
    fillColor: "#ff7800", // 背景颜色
    color: "#000", // 颜色
    weight: 1, // 宽度
    opacity: 1, // 边框的透明度
    fillOpacity: 0.8 // 背景的透明度
};

L.circleMarker([51.508, -0.11],geojsonMarkerOptions).addTo(mymap)

    5.绘制圆形区域 circle

L.circle([51.509, -0.12], {radius: 1000}).addTo(mymap);

    6.绘制三角形 polygon

 L.polygon([ // 可以绘制多边形
          [51.509, -0.08],// 第一个坐标点
		  [51.503, -0.06],// 第二个坐标点
		  [51.51, -0.047] // 第三个坐标点
        ]).addTo(mymap).bindPopup("I am a polygon.") // 点击提示内容

    7.画线

L.polyline([[41.80, 123.43], [41.07, 123.00]], {opacity: 1,color: 'firebrick'}).bindPopup('I am red:').addTo(mymap);

    8.为地图添加事件

var popup = L.popup({ // 创建一个点击提示信息
          maxWidth:200, // 最大宽度
          minWidth:200, // 最小宽度
          maxHeight:300 // 最大高度 如果超出 则出现滚动条
     });

function onMapClick(e) { // 当点的时候所触发的函数 里面接收到的就是当前点击地理位置的相关信息
    popup
      .setLatLng(e.latlng) // 设置提示框出现的坐标
      .setContent(`<div style="background-color:red;height: 300px"> You clicked the map at ${e.latlng.toString()}</div>`)
       .openOn(mymap); // openOn关闭上一个提示信息 与openPopup相似
  }

mymap.on('click', onMapClick); // 添加地图点击事件
mymap.on('zoomend', onMapZoom) // 添加地图放大缩小监听事件;

    9.切换地图视野方法 flyTo

mymap.flyTo([35.717, 108.6333], 5, { animate: true, duration: 0.2 }); // 经纬度 zoom  animate开启缩放动画 duration时间

    10.GeoJSON 一种对地理数据结构进行编码的格式,类似于json,支持以下几何类型:点,线,面,多点,多线,多面和几何集

    绘制矩形 

// 画矩形
   var states = [{
        "type": "Feature",
        "properties": {"party": "Republican"}, // 当前标记所携带自定义的数据
         "geometry": {
            "type": "Polygon", // 类型
            "coordinates": [[
              [111.593628,24.507143],
              [100.107422,  28.304381],
              [115.900269,33.797409],
              [124.804688 , 27.683528],
              [111.593628,24.507143]
            ]]
          }
        },{
        "type": "Feature",
        "properties": {"party": "Democrat"}, // 当前标记所携带自定义的数据
         "geometry": {
            "type": "Polygon", // 类型
            "coordinates": [[
              [111.59362,24.50714],
              [100.10742,  28.30438],
              [115.90026,33.79740],
              [124.80468 , 27.68352],
              [111.59362,24.50714]
            ]]
          }
        }];

        this.marker =  L.geoJSON(states, {
          style: function(feature) { // 设置样式 里面得到的相当于states 
            switch (feature.properties.party) { // 根据不同的类型判断颜色
              case 'Republican': return {color: "#ff0000"};
              case 'Democrat':   return {color: "#0000ff"};
            }
          }
        }).addTo(mymap);

    绘制线段

  var freeBus = {
          "type": "FeatureCollection",
          "features": [
            {
              "type": "Feature",
              "geometry": {
                "type": "LineString", // 线段属性
                "coordinates": [
                  [-105.00341892242432, 39.75383843460583],
                  [-105.0008225440979, 39.751891803969535]
                ]
              },
              "properties": { // 自定义属性写在这里面
                "popupContent": "This is a free bus line that will take you across downtown.",
                "underConstruction": false
              },
              "id": 1
            },
            {
              "type": "Feature",
              "geometry": {
                "type": "LineString",
                "coordinates": [
                  [-105.0008225440979, 39.751891803969535],
                  [-104.99820470809937, 39.74979664004068]
                ]
              },
              "properties": {
                "popupContent": "This is a free bus line that will take you across downtown.",
                "underConstruction": true
              },
              "id": 2
            },
            {
              "type": "Feature",
              "geometry": {
                "type": "LineString",
                "coordinates": [
                  [-104.99820470809937, 39.74979664004068],
                  [-104.98689651489258, 39.741052354709055]
                ]
              },
              "properties": {
                "popupContent": "This is a free bus line that will take you across downtown.",
                "underConstruction": false
              },
              "id": 3
            }
          ]
        };
 L.geoJSON(freeBus, { // 创建线段
     filter: function (feature, layer) { // 过滤属性 配合 properties一 起使用
              if (feature.properties) {
              // If the property "underConstruction" exists and is true, return false (don't render features under construction)
              return feature.properties.underConstruction !== undefined ? !feature.properties.underConstruction : true;
            }
            return false;
      }
 }).addTo(map);

     增加标记 

var coorsField = {
          "type": "FeatureCollection",
          "features": [
            {
              "type": "Feature",
              "properties": {
                "popupContent": "Coors Field" // 点击提示文字
              },
              "geometry": {
                "type": "Point", // 配合 pointToLayer 一起使用
                "coordinates": [-104.99404191970824, 39.756213909328125]
              }
            },
          ]
        };
function onEachFeature(feature, layer) { // 为每一个标记添加点击提示 (该项的属性,标记)
      var popupContent = "<p>I started out as a GeoJSON " + feature.geometry.type + ", but now I'm a Leaflet vector!</p>";
      if (feature.properties && feature.properties.popupContent) { // 判断标记里面是否有内容
            popupContent += feature.properties.popupContent;  // 有则添加
       }
          layer.bindPopup(popupContent); // bind到该标记
}
var coorsLayer = L.geoJSON(coorsField, { // 创建 marker 标记
          pointToLayer: function (feature, latlng) {  // pointToLayer 可以配合标记一起使用
            return L.marker(latlng, {icon: baseballIcon}); // 除了marker 还可以配合circle 与 circleMarker
          },
          onEachFeature: onEachFeature // 添加公共的弹出层样式
 }).addTo(map);

    删除标记

mymap.removeLayer(coorsLayer)

   11.添加自定义控制器 control

 var legend = L.control({position: 'bottomright'});
 legend.onAdd = function (map) {
    var div = L.DomUtil.create('div', 'info legend'), // 创建dom元素
     grades = [0, 10, 20, 50, 100, 200, 500, 1000], // 将要添加的内容
     labels = [],
     from, to;
    for (var i = 0; i < grades.length; i++) {
         from = grades[i];
         to = grades[i + 1];
         labels.push(
              `<i style="background: ${getColor(from+1)};display: block;height: 20px">${from + (to ? '&ndash;' + to : '+')}</i> `) // 添加每一行的dom
     }
     div.innerHTML = labels.join('');
     return div;
  };
  legend.addTo(map);

结语

    当然,leaflet 能实现的功能不仅限于此。leaflet 提供了可扩展的插件、控件等,在这里你能根据需求创作出你的个人工具,在这四方地图上绘制出你的美好愿景!

⭐希望大家多多点赞、收藏 

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: leaflet wmts 是一个在 Leaflet 地图库中集成的插件,用于加载和显示 Web Map Tile Service(WMTS)数据。WMTS 是一种标准化的 Web 地图服务协议,用于切片瓦片数据的传输和渲染。 使用 leaflet wmts 插件,我们可以通过指定 WMTS 服务的 URL 和图层名称来加载地图瓦片。插件会自动处理瓦片的分辨率、坐标系和样式等属性。用户还可以使用一些相关的选项来自定义地图的样式、缩放级别范围和图层顺序等。 在 Leaflet使用 WMTS 数据源可以在地图上显示精确的地理信息。WMTS 数据源通常由预先切片的地理数据组成,因此加载速度较快,并且可以实现地图的流畅缩放和平移。此外,WMTS 还支持多种坐标系和投影方式,能够适配不同的地理数据源和地图需求。 总的来说,leaflet wmts 插件为 Leaflet 提供了对 WMTS 数据源的完整支持,使开发者能够通过 WMTS 服务加载和显示地图瓦片。它提供了简单易用的 API 接口,使得集成 WMTS 数据到 Leaflet 地图应用变得更加容易。无论是展示地理信息还是实现交互式地图功能,leaflet wmts 都是一个非常有用的工具。 ### 回答2: leaflet wmts指的是在Leaflet使用Web Map Tile Service(WMTS)来加载和显示地图数据。WMTS是一种用于传输地图瓦片的网络服务标准,它通常用于在Web浏览器中呈现地图图层。 要使用WMTS,我们首先需要在Leaflet中添加WMTS插件。然后,我们需要获取WMTS的服务URL和图层名称。通过将这些信息传递给Leaflet的WMTS函数,我们可以创建一个WMTS图层。 WMTS的每一个图层由许多瓦片(tiles)组成,每个瓦片代表地图的一小部分。当用户缩放或平移地图时,Leaflet会动态加载和显示相应的瓦片。由于瓦片是按需加载的,因此在显示大范围地图时,可以提高性能和效率。 在Leaflet使用WMTS可以实现高性能的地图显示,特别是对于大规模的地图数据。通过WMTS,我们可以加载和显示具有高分辨率和复杂样式的地图。此外,WMTS还支持瓦片缓存,可以提高地图的加载速度,并减少对服务器的请求。 总之,leaflet wmts是一种在Leaflet中利用WMTS标准加载和显示地图数据的方法。它可以在Web浏览器中使用,提供高性能和高效率的地图显示,并支持高分辨率和复杂样式的地图。它是构建交互式和可定制的地图应用程序的重要工具。 ### 回答3: leaflet是一个开源的JavaScript库,用于在网页上创建交互式地图。WMTS(Web Map Tile Service)是一种用于动态地图切片的网络地图服务标准。所以,leaflet WMTS可以理解为在Leaflet使用WMTS服务。 使用leaflet的WMTS插件,我们可以轻松地在Leaflet地图上加载和显示WMTS地图服务。首先,我们需要获取WMTS地图服务的URL地址和图层ID。然后,使用leaflet的TileLayer.WMTS方法创建一个WMTS图层对象。该方法需要传入WMTS服务的URL地址、图层ID和一些其他配置参数,例如最小、最大缩放级别等。创建完成后,我们可以使用addTo()方法将图层添加到Leaflet地图上。 为了使WMTS图层正确显示,我们还需要提供WMTS服务的坐标参考系统(CRS)信息。可以通过定义一个CRS对象,并设置其属性来指定CRS信息。然后,在创建WMTS图层时,使用该CRS对象作为可选参数传入。 在将WMTS图层添加到Leaflet地图上后,可以使用其他Leaflet提供的方法和事件来控制图层的显示,例如设置地图中心点、缩放级别、图层背景色等。还可以通过添加相应的控件来实现地图的放大、缩小、测量等功能。 总之,leaflet WMTS提供了一种简单方便的方法在Leaflet地图中加载和显示WMTS地图服务。通过使用leaflet的WMTS插件,我们可以轻松地创建具有丰富交互性和可定制性的地图应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值