关于 mapcn
mapcn 是面向 React 与 shadcn/ui 项目的地图组件技能,帮助编码 Agent 安装、集成、定制和排查 mapcn。它基于 MapLibre GL JS,默认使用无需 API 密钥的 CARTO 瓦片。
主要功能
- 01集成 MapLibre 地图组件
- 02配置缩放、罗盘和定位控件
- 03组合标记、弹出框与提示
- 04绘制路线并聚合 GeoJSON 点
- 05通过 MapRef 与 useMap 操作地图
适用场景
- 01在 React 与 shadcn/ui 项目加入地图
- 02添加标记、弹出框或路线
- 03在密集点数据中使用聚合图层
- 04排查地图空白或控件缺失
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ferminrp/ agent-skills --skill mapcn安装后在 Claude Code 中输入/mapcn确认已加载。
附带文件references/api-cheatsheet.mdreferences/docs-pages.md
详细介绍
mapcn
何时使用此技能
当用户需要在 React + shadcn/ui 代码库中安装、集成、自定义或排查 mapcn 问题时,使用此技能。
常见触发词:
integrate mapcnadd mapcn to shadcn projectmapcn MapControls/Markers/Routes/Clusterscontrolled map viewport with mapcnuseMap hook mapcnMapLibre with mapcn components
库概述
mapcn 提供基于 MapLibre GL JS 构建、与 shadcn/ui 工作流保持一致的地图组件,采用复制粘贴式的使用方式。
前提条件:
- 项目使用 React。
- 已配置 Tailwind CSS。
- 已配置 shadcn/ui。
默认行为:
- mapcn 默认使用免费的 CARTO 瓦片。
- 默认瓦片配置无需 API 密钥。
安装
标准安装命令:
npx shadcn@latest add @mapcn/map
预期集成结果:
- 地图 UI 组件会添加到项目中(通常位于
components/ui下)。 - 导入方式通常如下:
import { Map } from "@/components/ui/map";
快速开始
使用固定高度的容器,并渲染 Map 和 MapControls。
import { Map, MapControls } from "@/components/ui/map";
export function BasicMap() {
return (
<div className="h-[500px] w-full overflow-hidden rounded-xl border">
<Map
initialViewState={{
longitude: -58.3816,
latitude: -34.6037,
zoom: 11,
}}
>
<MapControls
showZoom
showCompass
showLocate
showFullscreen
position="top-right"
/>
</Map>
</div>
);
}
重要提示:
- 地图容器必须设置明确的高度,否则地图可能显示为空白。
核心组件
Map 和受控视口
简单场景使用非受控模式;需要同步状态时使用受控模式。
const [viewport, setViewport] = useState({
longitude: -58.3816,
latitude: -34.6037,
zoom: 11,
});
<Map viewport={viewport} onViewportChange={setViewport} />
控件
MapControls 支持常见的开关和位置设置:
showZoomshowCompassshowLocateshowFullscreenposition
标记及标记 UI 组件系列
使用标记组合来构建更丰富的 UI:
MapMarkerMarkerContentMarkerPopupMarkerTooltipMarkerLabel
独立弹出窗口
使用 MapPopup 来显示未严格绑定到标记组件的弹出窗口 UI。
路线
使用 MapRoute 绘制基于路径的叠加层和类似路线的线条。
聚类
对密集点数据集使用 MapClusterLayer 和 GeoJSON 输入。
高级集成
MapRef
使用 MapRef 执行命令式地图操作,例如 flyTo、自定义相机过渡和直接操作地图实例。
useMap
使用 useMap 安全地访问地图上下文,并以符合生命周期的方式注册和清理事件监听器。
自定义样式
当默认瓦片无法满足需求时,使用 styles 属性(或相应的地图样式配置选项),并指定兼容 MapLibre 的样式 URL/规范。
性能指南
- DOM 标记适用于中小规模数据量(通常最多几百个点)。
- 对于大型数据集,优先使用基于 GeoJSON 图层的渲染和聚类(
MapClusterLayer)。 - 稳定属性和处理函数,避免过度重新渲染。
- 使用高级地图事件时,务必清理事件监听器。
故障排除
地图空白
请检查:
- 是否为容器明确设置了高度。
- 样式 URL/规范是否有效。
- 瓦片请求是否被阻止(网络/CORS)。
Hydration / 应用框架问题
- 确保在 SSR 应用配置中以兼容客户端的方式渲染地图。
- 在挂载前避免直接访问地图实例。
控件或标记缺失
- 确认组件嵌套在正确的地图上下文中。
- 核实标记和弹出窗口组件的子级层次结构是否符合预期。
类型/坐标错误
- 验证坐标的形状和顺序,以及属性类型。
- 确保回调函数签名与组件预期一致。
Agent 工作流
- 判断用户意图:安装、基础地图、标记、弹出窗口、路线、聚类或高级事件。
- 首先实现最小可用集成。
- 仅在需要同步状态时切换到受控视口。
- 点的数量增加时,切换到聚类/图层模式。
- 返回简洁的代码,然后说明决策和后续步骤。
不在范围内
- 非 React 框架。
- 未经请求的封装迁移/比较工作。
- 超出 mapcn 默认无密钥基准方案的托管地图供应商账户设置。
References
Local references:
references/docs-pages.mdreferences/api-cheatsheet.md
Canonical docs:
https://www.mapcn.dev/docshttps://www.mapcn.dev/docs/installationhttps://www.mapcn.dev/docs/api-referencehttps://www.mapcn.dev/docs/basic-maphttps://www.mapcn.dev/docs/controlshttps://www.mapcn.dev/docs/markershttps://www.mapcn.dev/docs/popupshttps://www.mapcn.dev/docs/routeshttps://www.mapcn.dev/docs/clustershttps://www.mapcn.dev/docs/advanced-usage