【Leaflet】地图绘制多边形点击后颜色变化

4 篇文章 0 订阅
3 篇文章 0 订阅
 <div id="l_map"></div>

初始化地图

initMap() {
            let that = this
            if (this.map) {
              this.map.remove()
            }
            this.map = initLeafletMap('l_map', 10)
            // 双击事件
            this.map.addEventListener("dblclick", function (e) {
              that.mapDoubleClick(e)
            })
            // 拖拽事件
            that.map.addEventListener("dragend", function(){
              let zoom = that.map.getZoom()
              that.mapZoomOrDragEnd(zoom)
            })
            // 缩放事件
            that.map.addEventListener("zoomend", function(){
              let zoom = that.map.getZoom()
              that.mapZoomOrDragEnd(zoom)
            })
          },
initLeafletMap (id, zoom = 16) {
    let normalMap = window.L.tileLayer.chinaProvider('Baidu.Normal.Map', {
        maxZoom: 18,
        minZoom: 10
    });
    let normal = window.L.layerGroup([normalMap])
    let map = window.L.map(id, {
        crs: window.L.CRS.Baidu,
        center: [36.717672, 119.160414],
        zoom: zoom,
        layers: [normal],
        zoomControl: true,
        trackResize: true
    });
    //初始化绘制插件
    window.L.PM.initialize();
    //中文
    map.pm.setLang('zh')

    // 比例尺
    window.L.control.scale({maxWidth:200,metric:true,imperial:false}).addTo(map)
    return map
}

绘制多边形

polygonToMap (list) {
            this.polygonLayerList = []
            list.forEach(res => {
              let latlngs = []
              let rangePoints = res.rangePoints
              let options = {
                color: res.color, // #5b8ff9
                fillColor: res.color, // #5b8ff9
                fillOpacity: 0.2,
                data: res
              }
              if (!rangePoints) {
                return
              }
              rangePoints.forEach(item => {
                latlngs.push([item.lat, item.lng])
              })
              // 绘制多边形
              let polygonLayer = window.L.polygon(latlngs, options).addTo(this.map)
              this.polygonInit(polygonLayer, res)
              this.polygonLayerList.push(polygonLayer)
              // 绘制文字
              let iconLabel = window.L.divIcon({
                html: `<p><span>${res.name}</span><span style="margin-left: 5px">${res.amount}</span></p>`,
                className: 'my-div-icon',
                iconSize: 30,
                data: res
              })
              let that = this
              new window.L.marker([res.latitude, res.longitude], {
                icon: iconLabel
              }).addTo(this.map).on('click', (e) => {
                // 点击多边形中marker设置颜色
                that.setCurrentGridPolygon(polygonLayer, res)
              })
            })
          },

          // 多边形需要执行的操作
          polygonInit(polygonLayer, data) {
            //点击事件
            polygonLayer.on('click', e => {
              // 设置多边形颜色
              this.setCurrentGridPolygon(polygonLayer, data)
            });
          },

设置多边形颜色

// 设置当前点击多边形的颜色
          setCurrentGridPolygon (currentPolygonLayer, data) {
            // 重置多边形颜色
            this.polygonLayerList.forEach(polygonLayer => {
              polygonLayer.setStyle({
                color: data.color,
                fillColor: data.color,
                fillOpacity: 0.2
              });
            })
            // 当前多边形颜色
            currentPolygonLayer.setStyle({
              color: '#ff0000',
              fillColor: '#ff0000',
              fillOpacity: 0.2
            });
          },

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Leaflet是一个非常流行的JavaScript库,它可以用来创建交互式的Web地图。要绘制多边形,需要使用Leaflet的绘图插件——Leaflet.draw。 下面是一个简单的示例: 1. 引入LeafletLeaflet.draw库 ```html <!-- Leaflet --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.7.1/dist/leaflet.css" /> <script src="https://cdn.jsdelivr.net/npm/leaflet@1.7.1/dist/leaflet.js"></script> <!-- Leaflet.draw --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.css" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.js"></script> ``` 2. 创建地图容器 ```html <div id="map" style="width: 100%; height: 400px;"></div> ``` ```javascript // 初始化地图 var map = L.map('map').setView([51.505, -0.09], 13); // 添加OSM地图图层 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: 'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors', maxZoom: 18 }).addTo(map); ``` 3. 添加绘图工具 ```javascript // 添加绘图工具 var drawControl = new L.Control.Draw({ draw: { polygon: true, // 允许绘制多边形 polyline: false, rectangle: false, circle: false, marker: false, circlemarker: false }, edit: { featureGroup: drawnItems // 将绘制的图形添加到drawnItems图层 } }).addTo(map); ``` 4. 处理绘制完成事件 ```javascript // 处理绘制完成事件 map.on('draw:created', function(e) { var layer = e.layer; drawnItems.addLayer(layer); }); ``` 完整代码如下: ```html <!DOCTYPE html> <html> <head> <title>Leaflet Draw Demo</title> <!-- Leaflet --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.7.1/dist/leaflet.css" /> <script src="https://cdn.jsdelivr.net/npm/leaflet@1.7.1/dist/leaflet.js"></script> <!-- Leaflet.draw --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.css" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.js"></script> </head> <body> <div id="map" style="width: 100%; height: 400px;"></div> <script> // 初始化地图 var map = L.map('map').setView([51.505, -0.09], 13); // 添加OSM地图图层 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: 'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors', maxZoom: 18 }).addTo(map); // 添加绘图工具 var drawnItems = new L.FeatureGroup(); map.addLayer(drawnItems); var drawControl = new L.Control.Draw({ draw: { polygon: true, // 允许绘制多边形 polyline: false, rectangle: false, circle: false, marker: false, circlemarker: false }, edit: { featureGroup: drawnItems // 将绘制的图形添加到drawnItems图层 } }).addTo(map); // 处理绘制完成事件 map.on('draw:created', function(e) { var layer = e.layer; drawnItems.addLayer(layer); }); </script> </body> </html> ``` 运行代码,你可以在地图上用鼠标绘制多边形绘制完成后,多边形将会被添加到地图上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值