用途:构建以地图为核心的高级地理空间演示 Web 应用,源自一个生产级地理空间检索演示,沉淀了经过验证的设计模式。
技术栈:Vite + 原生 TypeScript + MapLibre GL JS(globe 投影)+ DuckDB-WASM + 纯 CSS。不使用 React、Vue、Tailwind 或 CSS-in-JS,采用语义化 HTML、CSS 自定义属性与原生 TS。地图即应用本体,其余元素以透明 HUD 形式浮于其上。全局状态对象作为唯一数据源,updateView() 负责重渲染,指纹比对避免冗余 DOM 重建。
设计系统:暖咖啡色 + 象牙白 + 铁锈色,仅深色模式,玻璃拟态浮动面板。布局为固定视口,含星空背景、暗角、MapLibre 地球画布,以及品牌、搜索、状态、左右面板与教程覆盖层。
地图集成:MapLibre GL JS 使用 projection: "globe",可加载 Sentinel-2 无云瓦片等卫星底图;图层栈包含 AOI 填充/描边、草稿层、结果层、带光晕的点圆与悬停预览;支持矩形(shift+拖拽)与多边形(点击添加、双击闭合)绘制,以及 globe.flyTo() 飞行动画;数据统一为 GeoJSON,使用表达式绘制属性实现动态样式。
数据管线:DuckDB-WASM 加载 Parquet 清单与分片,通过 ST_Intersects 或 bbox 包含做空间过滤,Web Worker 处理嵌入距离与评分等重计算,并发受限地并行拉取分片,两阶段加载(先元数据、后按需嵌入)。
教程系统:5-7 步交互式聚光灯引导,用 box-shadow 挖孔高亮目标,卡片按 getBoundingClientRect() 自动定位,模拟点击带涟漪动画,回车推进,跳过时自动放置样例,完成状态存入 localStorage,且必须是可实时模拟缩放、绘制、样例放置与视图切换的演示。
响应式:仅两个断点,1100px 缩小面板并隐藏次级导航,900px 面板折叠为底部居中堆叠、最大高度 40-45vh。文件按职责拆分并控制在约 500 行以内:main.ts、map.ts、types.ts、util.ts、scoring-worker.ts、styles.css、index.html。
限制:资料未提供具体安装命令、依赖版本、收费与平台信息,暂未提供。