【leaflet中实现区块hover突出的伪3d效果】

leaflet-extrusion

一个基于 Leaflet 的 GeoJSON "挤出" 3D 可视化插件,用于将普通矢量要素渲染为带顶面、底面和侧面的立体效果。

功能

  • 支持 PolygonMultiPolygon GeoJSON 要素
  • 渲染顶面、底面与侧面,模拟高度与阴影效果
  • 支持鼠标 hover 高亮与位移效果
  • 可自定义颜色、透明度、深度、过渡动画和 hover 行为

安装

引入 leaflet-extrusion.js 文件即可

当前仓库入口文件为 src/leaflet-extrusion.js

使用示例

js 复制代码
import L from 'leaflet'
import './src/leaflet-extrusion.js'

const map = L.map('map').setView([39.9, 116.4], 12)

const geojson = {
  type: 'FeatureCollection',
  features: [
    {
      type: 'Feature',
      geometry: {
        type: 'Polygon',
        coordinates: [
          [
            [116.4, 39.9],
            [116.41, 39.9],
            [116.41, 39.91],
            [116.4, 39.91],
            [116.4, 39.9]
          ]
        ]
      },
      properties: {}
    }
  ]
}

const extrusion = L.geojsonExtrusion(geojson, {
  color: '#ff6600',
  depth: 24,
  hoverOffset: 14,
  hoverDebounceMs: 80,
})

extrusion.addTo(map)

实现效果图

API

L.geojsonExtrusion(geojson, options)

创建一个可添加到 Leaflet 地图的 L.LayerGroup,用于渲染带挤出效果的 GeoJSON 要素。

  • geojson - 支持 FeatureCollectionFeature 或纯几何对象。
  • options - 可选配置对象。

返回值:L.LayerGroup

支持的 GeoJSON 类型

  • Polygon
  • MultiPolygon

本插件通过构建顶面、底面和侧面图层来模拟 3D 挤出效果,因此当前仅对多边形几何类型进行可见渲染。

options 可选参数

  • color: 顶面填充颜色,默认 #0af
  • outlineColor: 顶面描边颜色,默认与 color 相同
  • baseColor: 底面颜色,默认为 color 加深版本
  • sideColor: 侧面颜色,默认为 color 加深版本
  • fillOpacity: 顶面填充不透明度,默认 0.8
  • hoverFillOpacity: 鼠标 hover 时顶面不透明度,默认 1
  • depth: 底面相对于顶面的像素垂直偏移,默认 18
  • hoverOffset: hover 时顶面像素偏移量,默认 12
  • hoverDebounceMs: hover 触发防抖时间,默认 50
  • weight: 顶面边线宽度,默认 2
  • transitionMs: CSS 过渡时间,默认 180
  • hover: 是否启用 hover 效果,默认 true
  • renderer: Leaflet 渲染器,例如 L.svg(),默认使用 overlayPane 的 SVG
  • baseHoverDarken: hover 时底面颜色加深量,默认 -12
  • baseHoverOpacityInc: hover 时底面透明度增量,默认 0.08
  • sideHoverDarken: hover 时侧面颜色加深量,默认 -12
  • sideHoverOpacityInc: hover 时侧面透明度增量,默认 0.15
  • blurRadius: hover 时阴影模糊半径,默认 12

实现说明

插件通过以下步骤构建挤出效果:

  1. 解析 GeoJSON 输入,支持 FeatureCollectionFeature 和纯几何对象。
  2. 将 GeoJSON 坐标转换为 Leaflet LatLng
  3. 创建顶层多边形、底层偏移多边形和侧面连接多边形。
  4. 在 hover 时更新样式、颜色和位移,增强立体感。
相关推荐
深圳市机智人激光雷达1 小时前
时空解算与图优化:激光雷达 3D 建图的技术原理与实现流程
人工智能·3d·机器人·自动化·自动驾驶·激光雷达
海伯森技术1 小时前
海伯森3D线光谱共焦精密测量技术及产业化应用
大数据·人工智能·3d
Coovally AI模型快速验证1 小时前
上海 AI Lab联合发布无需人工标注的TrackRef3D:全自动3D指代分割,mIoU达38.8领跑SOTA
人工智能·3d
七77.1 小时前
【3D 场景生成】MIDI: Multi-Instance Diffusion for Single Image to 3D Scene Generation
3d·世界模型
深圳市机智人激光雷达14 小时前
技术筑牢安全冗余:激光雷达在自动驾驶高阶感知中的底层价值与范式演进
人工智能·安全·机器学习·3d·机器人·自动驾驶·无人机
charlie11451419118 小时前
通用GUI编程技术——图形渲染实战(四十五)——D3D12资源与堆管理:从上传到驻留
开发语言·3d·图形渲染·win32
苏州邦恩精密21 小时前
江苏蔡司3D扫描仪定制厂家:专业三维检测方案助力智能制造升级
人工智能·科技·机器学习·3d·自动化·制造
Angelina_Jolie1 天前
深度图转换为3D点云
数码相机·计算机视觉·3d
LuminWave1 天前
【科研动态】攻克“宽视场”与“低串扰”难题:MIT新型光学天线设计助力下一代固态激光雷达
3d