前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二维地图中立体阴影效果实现

二维地图中立体阴影效果实现

作者头像
lzugis
发布2023-07-11 13:53:33
3970
发布2023-07-11 13:53:33
举报

概述

前两天有个学员在群里发出来一张截图,效果是一个区域掩膜+边框立体阴影效果,咨询我怎么实现,我看了下心里大概有了一个想法,只是前两天比较忙就没实现,趁着周末就想着验证实现一下。鉴于学员的要求,本文使用的是leaflet框架。

效果

效果
效果

实现思路

  1. 掩膜和阴影都使用矢量图层;
  2. 掩膜借助turf.difference实现数据的处理;
  3. 注册地图zoomend事件,计算当前级别的分辨率,计算偏移量对坐标点数据进行偏移,叠加图层实现阴影效果。

实现

1. 使用技术

  • leaflet
  • turf.js

2. 实现代码

代码语言:javascript
复制
fetch('./data/beijing-boundry.json').then(res => res.json()).then(res => {
  res = res.features[0]
  const coordsBoundry = res.geometry.coordinates
  let shadowLayer = L.layerGroup().addTo(map);
  const mask = turf.difference(turf.bboxPolygon([-180, -90, 180, 90]), res);
  L.geoJSON(mask, {
    style: {
      color: '#098dde',
      weight: 3,
      opacity: 1,
      fillColor: '#ffffff',
      fillOpacity: 0.5
    }
  }).addTo(map);
  let addShadowLayer = function () {
    shadowLayer.clearLayers()
    const zoom = map.getZoom()
    const res = 360 / (Math.pow(2, zoom) * 256)
    const offset  = 2 * res
    let coords = [...coordsBoundry[0]].map(([lon, lat]) => {
      return [lon - offset * 2, lat - offset]
    })
    const feature = new Feature([coords])
    shadowLayer.addLayer(L.geoJSON(feature, {
      style: {
        color: '#098dde',
        weight: 8,
        opacity: 0.5,
        fill: false
      }
    }))
  }
  addShadowLayer()
  map.on('zoomend', () => {
    addShadowLayer()
  })
})

3. 测试数据

测试数据可从https://wwus.lanzouk.com/iAiwo10x18ze获取。

4. 代码获取

代码可从https://download.csdn.net/download/GISShiXiSheng/87975412获取。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 效果
  • 实现思路
  • 实现
    • 1. 使用技术
      • 2. 实现代码
        • 3. 测试数据
          • 4. 代码获取
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档