简介
Mapjar 是一个基于 WebGL2 的现代化地图渲染引擎,专注于高性能和易用性。相比现有的地图库,Mapjar 更轻量、更快、更灵活。
在线文档和示例: mapjar.netlify.app/
特色功能
🚀 高性能渲染
- WebGL2 GPU 加速,60 FPS 流畅渲染
- Web Worker 并发加载,首屏速度提升 28%
- 视锥剔除 + 批量渲染,支持 10,000+ 要素
- 完美支持高 DPI 屏幕(Retina)
🎨 丰富的图层类型
基础图层:
- TileLayer - 瓦片图层(OSM、Google Maps 等)
- VectorLayer - 矢量图层(点、线、面)
- GeoJSONLayer - GeoJSON 数据加载
- ImageLayer - 图像叠加(历史地图、卫星影像)
科学可视化:
- WindLayer - 风场动画(粒子系统)
- HeatmapLayer - 热力图(温度、降水等)
自定义图层:
- OverlayLayer - HTML 元素叠加
- CanvasLayer - Canvas 2D 自定义绘制
💡 数据驱动样式
根据要素属性动态设置样式:
layer.setDataDrivenStyle({
fillColor: StyleFunction.createPropertyColorMap(
'type',
{
'residential': [0.8, 0.8, 0.6, 0.5], // 住宅区
'commercial': [1.0, 0.6, 0.6, 0.5], // 商业区
'park': [0.4, 0.8, 0.4, 0.5] // 公园
}
)
});
🎬 流畅动画
所有交互都带有平滑的缓动效果:
// 飞行到目标位置
engine.flyTo(121.4737, 31.2304, 10, { duration: 2000 });
// 自动适配边界
engine.fitBounds({
minLon: 73.5, minLat: 18.2,
maxLon: 135.0, maxLat: 53.5
});
快速开始
安装
npm install mapjar
基础示例
import { MapEngine, TileLayer } from 'mapjar';
// 创建地图
const engine = new MapEngine('#map', {
center: [116.4074, 39.9042], // 北京
zoom: 10
});
// 添加 OpenStreetMap
const tileLayer = new TileLayer(
'osm',
'https://tile.openstreetmap.org/{z}/{x}/{y}.png'
);
engine.addLayer(tileLayer);
风场动画示例
import { WindLayer } from 'mapjar';
const windLayer = new WindLayer('wind', {
particleCount: 5000,
speedFactor: 0.5,
colorRamp: ['#3288bd', '#66c2a5', '#fee08b', '#d53e4f']
});
// 设置风场数据
windLayer.setData({
uv: uvData, // UV 分量数组
width: 100,
height: 50,
minU: -10, maxU: 10,
minV: -10, maxV: 10,
bounds: { minLon: 73.5, minLat: 18.0, maxLon: 135.0, maxLat: 53.5 }
});
engine.addLayer(windLayer);
热力图示例
import { HeatmapLayer } from 'mapjar';
const heatmapLayer = new HeatmapLayer('temperature', {
colorRamp: [
{ value: 0.0, color: '#313695' }, // 冷
{ value: 0.5, color: '#ffffbf' }, // 中
{ value: 1.0, color: '#a50026' } // 热
]
});
// 直接使用图片
const img = new Image();
img.onload = async () => {
const bitmap = await createImageBitmap(img);
heatmapLayer.setData({
image: bitmap,
bounds: { minLon: 55, minLat: 1, maxLon: 155, maxLat: 57 }
});
};
img.src = 'temperature.png';
engine.addLayer(heatmapLayer);
性能对比
Web Worker 瓦片加载
| 指标 | 优化前 | 优化后 | 提升 |
|---|---|---|---|
| 首屏加载 | 2.5s | 1.8s | 28% ↓ |
| 主线程阻塞 | 150ms | 20ms | 87% ↓ |
| 帧率下降 | 15 fps | 3 fps | 80% ↓ |
渲染性能
- ✅ 10,000+ 矢量要素流畅渲染
- ✅ 60 FPS 稳定帧率
- ✅ 5,000 个粒子实时动画
浏览器兼容性
支持所有现代浏览器(WebGL2):
- Chrome 56+
- Firefox 51+
- Safari 15+
- Edge 79+
覆盖 97%+ 的用户。
为什么选择 Mapjar?
vs Mapbox GL JS
- ✅ 更轻量(~80KB vs ~500KB)
- ✅ 零配置,开箱即用
- ✅ 更简单的 API
- ✅ 完全开源免费
vs Leaflet
- ✅ WebGL2 GPU 加速
- ✅ 更高的渲染性能
- ✅ 内置科学可视化图层
- ✅ 更流畅的动画效果
vs OpenLayers
- ✅ 更现代的技术栈
- ✅ 更简洁的 API 设计
- ✅ 更好的 TypeScript 支持
- ✅ 更小的打包体积
技术栈
- TypeScript - 类型安全
- WebGL2 - GPU 加速
- Web Workers - 并发加载
- Earcut - 多边形三角化
- Vite - 快速构建
在线资源
- 📖 完整文档:mapjar.netlify.app/
- 🎮 在线示例:包含所有图层类型的交互式演示
- 📦 NPM:www.npmjs.com/package/map…