【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 时更新样式、颜色和位移,增强立体感。
相关推荐
苏州福兰克2 小时前
没有3D内容,裸眼3D显示器还能用吗?
3d·计算机外设
慧都CAD开发笔记4 小时前
汽车零部件检测软件如何用统一接口直读多种 CAD:3D InterOp 的三类数据接入
3d·汽车
苏州福兰克4 小时前
长期看裸眼3D显示器容易视觉疲劳吗?
3d·计算机外设
苏州福兰克4 小时前
商用裸眼3D显示器和家用款主要差别在哪里?
3d·计算机外设
天树星智源5 小时前
静态物理满分、交互 11.54%:3D 场景生成系统的幻觉
论文阅读·人工智能·3d·机器人
Wanda12145 小时前
机器人与机电一体化3D数字孪生机器-Day9
人工智能·3d·unity·机器人·数字孪生
暴走约伯6 小时前
【VFX工具链源码拆解 01】总体架构:大型项目特效流程的程序化落地
开发语言·经验分享·3d·unity·架构·游戏引擎
云飞云共享云桌面1 天前
智能装备工厂研发部门多设计师共享一台SolidWorks服务器做设备装配建模
运维·服务器·网络·人工智能·3d·自动化·制造
Yyq130208696821 天前
3D磁编码应用-带屏按钮-KTH5701
3d
小雨爱测1 天前
3ds Max 入门到进阶:建模、材质、灯光与渲染全流程指南
3d·材质