API 参考
所有地图组件及其属性的完整参考。
💡 注意:此库基于MapLibre GL JS构建。大多数组件扩展了原生 MapLibre 选项。未列出的选项请参考MapLibre Map API。
组件结构
所有你可以使用和组合来构建地图的组件部分:
<Map>
<MapMarker longitude={...} latitude={...}>
<MarkerContent>
<MarkerLabel />
</MarkerContent>
<MarkerPopup />
<MarkerTooltip />
</MapMarker>
<MapPopup longitude={...} latitude={...} />
<MapControls />
<MapRoute coordinates={...} />
<MapArc data={...} />
<MapGeoJSON data={...} />
<MapClusterLayer data={...} />
</Map>Map
根容器组件,初始化 MapLibre GL 并为子组件提供上下文。自动处理浅色和深色模式之间的主题切换。
继承 MapOptions(排除 container 和 style)。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
children | ReactNode | — | 子组件 |
className | string | — | 容器额外 CSS 类名 |
theme | "light" | "dark" | 自动检测 | 地图主题 |
styles | { light?: string | StyleSpecification; dark?: string | StyleSpecification } | — | 自定义地图样式 |
blank | boolean | false | 透明无瓦片底图 |
projection | ProjectionSpecification | — | 投影类型,如 3D 地球 |
viewport | Partial<MapViewport> | — | 受控视口状态 |
onViewportChange | (viewport: MapViewport) => void | — | 视口变化回调 |
loading | boolean | false | 显示加载指示器 |
useMap
提供访问 MapLibre 地图实例和加载状态的 hook。必须在 Map 组件内使用。
const { map, isLoaded } = useMap();map— MapLibre.Map 实例isLoaded— 布尔值,表示地图是否已加载就绪
MapControls
渲染地图控制按钮(缩放、指北针、定位、全屏)。必须在 Map 内部使用。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
position | "top-left" | "top-right" | "bottom-left" | "bottom-right" | "bottom-right" | 控件位置 |
showZoom | boolean | true | 显示缩放按钮 |
showCompass | boolean | false | 显示指北针 |
showLocate | boolean | false | 显示定位按钮 |
showFullscreen | boolean | false | 显示全屏按钮 |
className | string | — | 额外 CSS 类名 |
onLocate | (coords: { longitude: number; latitude: number }) => void | — | 定位回调 |
MapMarker
标记相关组件的容器。为子组件提供上下文并处理标记定位。
继承 MarkerOptions(排除 element)。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
longitude | number | — | 经度 |
latitude | number | — | 纬度 |
children | ReactNode | — | 标记子组件 |
onClick | (e: MouseEvent) => void | — | 点击回调 |
onMouseEnter | (e: MouseEvent) => void | — | 鼠标进入回调 |
onMouseLeave | (e: MouseEvent) => void | — | 鼠标离开回调 |
onDragStart | (lngLat: {lng, lat}) => void | — | 拖拽开始回调 |
onDrag | (lngLat: {lng, lat}) => void | — | 拖拽中回调 |
onDragEnd | (lngLat: {lng, lat}) => void | — | 拖拽结束回调 |
MarkerContent
渲染标记的视觉内容。必须在 MapMarker 内使用。无 children 时渲染默认蓝色圆点。
| 属性 | 类型 | 描述 |
|---|---|---|
children | ReactNode | 自定义标记内容,默认蓝色圆点 |
className | string | 额外 CSS 类名 |
MarkerPopup
渲染附加到标记的弹窗,点击时打开。必须在 MapMarker 内使用。
继承 PopupOptions(排除 className 和 closeButton)。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
children | ReactNode | — | 弹窗内容 |
className | string | — | 额外 CSS 类名 |
closeButton | boolean | false | 显示关闭按钮 |
MarkerTooltip
渲染悬停时显示的提示。必须在 MapMarker 内使用。
| 属性 | 类型 | 描述 |
|---|---|---|
children | ReactNode | 提示内容 |
className | string | 额外 CSS 类名 |
MarkerLabel
渲染标记上方或下方的文字标签。必须在 MarkerContent 内使用。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
children | ReactNode | — | 标签文字 |
className | string | — | 额外 CSS 类名 |
position | "top" | "bottom" | "top" | 标签相对位置 |
MapPopup
独立弹窗组件,可放在地图任意位置,无需标记。必须在 Map 内使用。
继承 PopupOptions(排除 className 和 closeButton)。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
longitude | number | — | 经度 |
latitude | number | — | 纬度 |
onClose | () => void | — | 关闭回调 |
children | ReactNode | — | 弹窗内容 |
className | string | — | 额外 CSS 类名 |
closeButton | boolean | false | 显示关闭按钮 |
MapRoute
渲染连接坐标点的线/路线。必须在 Map 内使用。支持点击和悬停交互。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
id | string | 自动生成 | 路线图层唯一标识 |
coordinates | [number, number][] | — | 坐标对数组 |
color | string | "#4285F4" | 线条颜色 |
width | number | 3 | 线条宽度(像素) |
opacity | number | 0.8 | 线条透明度 |
dashArray | [number, number] | — | 虚线模式 |
onClick | () => void | — | 点击回调 |
onMouseEnter | () => void | — | 鼠标进入回调 |
onMouseLeave | () => void | — | 鼠标离开回调 |
interactive | boolean | false | 响应鼠标事件 |
MapArc
使用二次贝塞尔曲线渲染坐标对之间的弯曲弧线。必须在 Map 内使用。
基于 MapLibre 线图层。支持 MapLibre 表达式实现逐要素样式。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
data | MapArcDatum[] | — | 弧线数据数组 |
id | string | 自动 | 源/图层 id 前缀 |
curvature | number | 0.2 | 弯曲程度。0 为直线 |
samples | number | 64 | 每条弧线采样点数 |
paint | LineLayerSpecification['paint'] | 默认蓝线 | 绘制属性,支持表达式 |
layout | LineLayerSpecification['layout'] | 默认圆角 | 布局属性 |
hoverPaint | LineLayerSpecification['paint'] | — | 悬停绘制覆盖 |
onClick | (e: MapArcEvent) => void | — | 点击事件 |
onHover | (e: MapArcEvent | null) => void | — | 悬停事件 |
interactive | boolean | true | 响应鼠标事件 |
beforeId | string | — | 在此图层前插入 |
MapGeoJSON
将任意 GeoJSON 渲染为填充 + 轮廓图层。必须在 Map 内使用——通常配合 blank 属性。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
data | FeatureCollection | Feature | Geometry | string | — | GeoJSON 数据或 URL |
id | string | 自动 | 源/图层 id 前缀 |
promoteId | string | — | 提升为要素 id 的属性名 |
fillPaint | FillLayerSpecification['paint'] | false | 主题感知 | 填充绘制属性。false 省略 |
linePaint | LineLayerSpecification['paint'] | false | 主题感知 | 轮廓绘制属性。false 省略 |
fillHoverPaint | FillLayerSpecification['paint'] | — | 悬停填充覆盖。需 promoteId |
onClick | (e: MapGeoJSONEvent) => void | — | 点击事件 |
onHover | (e: MapGeoJSONEvent | null) => void | — | 悬停事件 |
interactive | boolean | false | 响应鼠标事件 |
beforeId | string | — | 在此图层前插入 |
MapClusterLayer
使用 MapLibre GL 原生聚类渲染聚类点数据。自动将附近点分组为聚类,点击展开。必须在 Map 内使用。
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
data | string | GeoJSON.FeatureCollection | — | GeoJSON 数据或 URL |
clusterMaxZoom | number | 14 | 聚类最大缩放级别 |
clusterRadius | number | 50 | 聚类半径(像素) |
clusterColors | [string, string, string] | 绿/黄/红 | 聚类颜色 [小, 中, 大] |
clusterThresholds | [number, number] | [100, 750] | 颜色/大小阈值 [中, 大] |
pointColor | string | "#3b82f6" | 未聚类点颜色 |
onPointClick | (feature, coordinates) => void | — | 单点点击回调 |
onClusterClick | (clusterId, coordinates, pointCount) => void | 放大展开 | 聚类点击回调 |
继续探索
高级用法