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

leaflet-extrusion

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

功能

  • 支持 Polygon 和 MultiPolygon 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 - 支持 FeatureCollection、Feature 或纯几何对象。
  • 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 输入,支持 FeatureCollection、Feature 和纯几何对象。
  2. 将 GeoJSON 坐标转换为 Leaflet LatLng。
  3. 创建顶层多边形、底层偏移多边形和侧面连接多边形。
  4. 在 hover 时更新样式、颜色和位移,增强立体感。
相关推荐
成都渲染101云渲染66661 小时前
云渲染怎么用?从项目准备到提交出图,3ds Max、VRay、UE5 实用教程
3d·ue5
我才是银古15 小时前
大坐标、镜像与弦高:.NET CSG 库的工程笔记
3d·cad·csg
创世虚拟世界18 小时前
我做了一个 3D 虚拟世界基底,基于这个再做 3D 虚拟世界或者元宇宙,会事半功倍
javascript·人工智能·3d·gitee·虚拟现实
西红柿炖牛腩3541 天前
数字孪生大屏场景模型几个 G,Draco 3D 模型压缩和减面该怎么排顺序
3d·大屏端
3D可视化大侠1 天前
DPE 工程怎么交付到自有系统:GLB 导出与 SDK 集成实践
3d
总要学点什么1 天前
第47篇:三维特效-雷达波效果——波纹一圈圈往外推,一半却埋在地下
3d·前端框架·gis·webgl·cesium
Shirley~~2 天前
Three.js的基础概念
前端·3d
Zldaisy3d2 天前
GAMS 2026: 增材制造无国界
3d·制造
浦信仿真大讲堂2 天前
用好 CST View Options:把3D操作环境调到更顺手,也更高效
3d·cst软件·达索软件
oioihoii2 天前
Pascal Editor 3D建筑编辑:墙体门窗、2D与3D视图及WebGPU建模
3d