关于 syncfusion-react-maps
面向 React 开发者的 Syncfusion Maps 实现指南,用于将地理数据呈现为交互式地图。内容涵盖 GeoJSON、地图图层、标记、气泡、地图提供方及多种交互。
主要功能
- 01GeoJSON 数据绑定与多图层
- 02标记、气泡和数据标签
- 03颜色映射与交互式图例
- 04缩放、平移和提示信息
- 05地图投影与导航线
适用场景
- 01创建区域统计分级着色地图
- 02在地图上显示地点和路线
- 03叠加 GeoJSON 区域与底图
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ syncfusion/ react-ui-components-skills --skill syncfusion-react-maps安装后在 Claude Code 中输入/syncfusion-react-maps确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/advanced-features.mdannotations-polygon.mdapi-reference.mdcolor-mapping.mddata-visualization.mdgetting-started.mdlayers-and-sublayers.mdlegend.mdmap-providers.mdmarkers.mdnavigation-lines.mduser-interactions.md详细介绍
实现 Syncfusion React Maps
全面介绍如何实现 Syncfusion React Maps 组件,使用丰富的交互功能、多个图层、标记、气泡、图例和地图提供商集成来可视化地理数据。
何时使用此技能
在以下情况下使用此技能:
- 在交互式地图上显示地理数据
- 使用标记、气泡或数据标签可视化基于位置的信息
- 创建分级统计地图,根据数据值为区域着色
- 集成地图提供商,例如 Bing Maps、OpenStreetMap 或 Azure Maps
- 从 GeoJSON 数据文件渲染自定义形状
- 构建包含叠加层和子图层的多图层地图
- 添加导航线,显示位置之间的路线或连接
- 实现缩放和平移,以便探索地图
- 在地理区域上显示统计数据
- 创建用于解读数据的交互式图例
- 支持多种投影(Mercator、Miller、Eckert 等)
- 处理用户交互,例如工具提示、选择和高亮显示
组件概述
Syncfusion React Maps 组件是一款功能强大的数据可视化工具,可使用可缩放矢量图形(SVG)渲染地理数据。它支持:
- 任意数量的图层和子图层,用于复杂可视化
- GeoJSON 数据绑定,用于渲染自定义形状
- 地图提供商(Bing、OpenStreetMap、Azure)作为底图
- 6 种投影类型,用于呈现不同的地图视图
- 可视化元素:标记、气泡、导航线、注释、数据标签、图例
- 交互功能:缩放、平移、工具提示、选择、高亮显示
- 无障碍功能:符合 WCAG 2.1 标准,支持键盘导航
- 全球化:支持 RTL、国际化和本地化
主要功能
数据可视化元素
- 标记:使用自定义形状、模板和聚类标注位置
- 气泡:使用基于大小的气泡显示数据量级
- 数据标签:直接在地图形状上显示信息
- 颜色映射:根据数据值应用颜色(相等、范围、去饱和)
- 导航线:使用曲线和箭头绘制位置之间的连接
- 图例:提供用于解读数据的可视化标识
图层架构
- 主图层:来自 GeoJSON 或地图提供商的底图
- 子图层:在主图层上叠加其他形状
- 多图层支持:堆叠多个图层,实现丰富的可视化效果
地图提供商
- Bing Maps:卫星、航拍和道路视图
- OpenStreetMap:免费的瓦片图层提供商
- Azure Maps:Microsoft 的地图服务
- 混合方式:将 GeoJSON 形状与提供商瓦片结合
用户交互
- 缩放:鼠标滚轮、双击、捏合和工具栏控件
- 平移:拖动以探索不同区域
- 工具提示:悬停时显示数据
- 选择:单击时高亮显示形状
- 重置:返回初始视图
文档与导航指南
API 参考
📄 阅读: references/api-reference.md
- MapsComponent 属性完整参考
- 所有可用方法及示例
- 全面的事件文档
- 图层、标记、气泡和数据标签设置
- 图例、缩放和工具提示配置
- 快速参考代码示例
- 类型定义和参数
入门指南
📄 阅读: references/getting-started.md
- 安装和软件包依赖项
- Maps 组件的基本实现
- GeoJSON 数据结构和绑定
- CSS 主题导入
- 模块注入模式(基于功能)
- 首个世界地图示例
- 使用 shapeDataPath 和 shapePropertyPath 绑定数据源
图层与结构
📄 阅读: references/layers-and-sublayers.md
- 了解图层架构
- 主图层与子图层的区别
- 创建多图层地图
- 图层类型与堆叠顺序
- 图层专属设置与配置
- 何时使用多个图层
标记
📄 阅读: references/markers.md
- 添加标记以标出位置
- 标记数据源结构(纬度、经度)
- 标记形状与自定义模板
- 为密集数据聚合标记
- 动态更新标记
- 带点击事件的交互式标记
- 标记工具提示与标签
数据可视化元素
📄 阅读: references/data-visualization.md
- 用气泡可视化数据量级
- 配置气泡大小和颜色
- 设置和格式化数据标签
- 智能标签模式(裁剪、隐藏、不显示)
- 用标签模板自定义内容
- 结合使用气泡与数据标签
- 视觉层次的最佳实践
图例
📄 阅读: references/legend.md
- 启用和配置图例
- 定位策略(绝对定位、停靠)
- 图例对齐选项(近端、居中、远端)
- 交互式图例
- 图例模式(默认、交互式)
- 自定义图例外观
- 将图例与颜色映射同步
颜色映射
📄 阅读: references/color-mapping.md
- 颜色映射类型(等值、范围、去饱和)
- 根据数据值应用颜色
- 设置 colorValuePath
- 创建分级统计地图
- 多条颜色映射规则
- 自定义配色方案
- 数据可视化策略
导航线
📄 阅读: references/navigation-lines.md
- 在位置之间创建线条
- 线条样式(宽度、颜色、虚线数组)
- 曲线和角度
- 用箭头指示方向
- 使用场景(路线、连接、流向)
- 线条动画效果
地图提供方
📄 阅读: references/map-providers.md
- 支持的提供方概览
- 何时使用 GeoJSON,何时使用地图提供方
- Bing Maps 设置和 API 密钥
- 集成 OpenStreetMap(免费)
- 配置 Azure Maps
- 瓦片图层类型(卫星、航空、道路)
- 混合方案(在提供方瓦片上叠加 GeoJSON)
用户交互
📄 阅读: references/user-interactions.md
- 启用和配置缩放
- 缩放系数和工具栏控件
- 平移功能
- 工具提示配置和模板
- 选择和高亮形状
- 鼠标滚轮和双击缩放
- 触控设备上的捏合缩放
- 重置到初始视图
注释和多边形
📄 阅读: references/annotations-polygon.md
- 向地图添加自定义注释
- 使用多边形绘制自定义形状
- 定位和对齐
- 交互式注释
- 覆盖层的使用场景
自定义
- 地图投影(Mercator、Miller、Eckert、Winkel Tripel、Aitoff、Equirectangular)
- 配置标题和副标题
- 边框与背景样式
- 调整外边距和内边距
- 自定义 CSS 类
- 主题集成
- 响应式设计模式
高级功能
📄 阅读: references/advanced-features.md
- 国际化(i18n)
- 本地化(l10n)
- 无障碍功能(符合 WCAG 标准、键盘导航)
- 跨会话持久化状态
- 打印和导出功能
- 事件处理模式
- 通过 ref 访问组件方法
- 性能优化技巧
- 从 EJ1 迁移到 EJ2 的指南
快速入门示例
import * as React from 'react';
import { MapsComponent, LayersDirective, LayerDirective, Inject, Legend } from '@syncfusion/ej2-react-maps';
import { world_map } from './world-map'; // GeoJSON data
function MapExample() {
const data = [
{ Country: 'United States', Population: 331000000, Membership: 'Permanent' },
{ Country: 'Russia', Population: 145900000, Membership: 'Permanent' },
{ Country: 'China', Population: 1439000000, Membership: 'Permanent' },
{ Country: 'India', Population: 1380000000, Membership: 'Non-Permanent' },
{ Country: 'Brazil', Population: 212500000, Membership: 'Non-Permanent' }
];
return (
<MapsComponent
titleSettings={{ text: 'World Map with Country Membership' }}
legendSettings={{ visible: true }}
>
<Inject services={[Legend]} />
<LayersDirective>
<LayerDirective
shapeData={world_map}
shapeDataPath='Country'
shapePropertyPath='name'
dataSource={data}
shapeSettings={{
colorValuePath: 'Membership',
colorMapping: [
{ value: 'Permanent', color: '#D84444' },
{ value: 'Non-Permanent', color: '#316DB5' }
]
}}
/>
</LayersDirective>
</MapsComponent>
);
}
export default MapExample;
模块注入指南
地图功能采用模块化设计。只注入所需模块:
import {
MapsComponent,
Inject,
Legend, // For legends
DataLabel, // For data labels
Marker, // For markers
Bubble, // For bubbles
MapsTooltip, // For tooltips
Zoom, // For zooming and panning
Highlight, // For highlighting shapes
Selection, // For selecting shapes
NavigationLine,// For navigation lines
Annotations, // For annotations
Polygon // For polygons
} from '@syncfusion/ej2-react-maps';
<MapsComponent>
<Inject services={[Legend, Marker, MapsTooltip, Zoom]} />
{/* Your layers */}
</MapsComponent>
只为正在使用的功能注入模块,以尽可能减小包体积。
常见使用场景
分级统计地图(按颜色区分区域)
目标:使用不同颜色显示国家/地区的统计数据
方法:
- 使用
dataSource、shapeDataPath、shapePropertyPath绑定数据源 - 配置
shapeSettings.colorValuePath,指定数据字段 - 使用值与颜色的配对配置
colorMapping - 添加
Legend以便解读
示例:人口密度地图、选举结果、COVID-19 统计数据
位置标记地图
目标:使用自定义标记显示特定位置
方法:
- 在
LayerDirective内添加MarkersDirective - 提供包含纬度/经度的标记数据
- 自定义标记的形状、大小和模板
- 添加工具提示以显示标记信息
示例:门店定位、分支办公室、旅游景点
多图层叠加
目标:在底图上突出显示特定区域
方法:
- 第一层:底图(例如,整个国家)
- 添加
type="SubLayer"图层以突出显示区域 - 为子图层设置不同样式(不同颜色、边框)
- 控制图层的可见性和顺序
示例:在国家地图上突出显示州、销售区域
路线可视化
目标:显示地点之间的连接或路线
方法:
- 为起点/终点添加标记
- 使用
NavigationLineDirective绘制线条 - 配置线条曲线、箭头和样式
- 可选择为线条添加动画
示例:航线、航运路线、迁徙模式
地图服务集成
目标:使用真实世界的卫星/街道地图作为底图
方法:
- 使用服务商提供的
urlTemplate配置图层 - 根据需要设置 API 密钥(Bing、Azure)
- 如有需要,将 GeoJSON 形状作为子图层叠加
- 在上层添加标记和标签
示例:房地产地图、配送追踪、网约车应用
决策树
应该使用 GeoJSON 还是地图服务?
使用 GeoJSON 的情况:
- 需要自定义形状或边界
- 数据以区域/国家为单位(分级统计地图)
- 无需真实世界的街道级细节
- 需要离线功能
- 需要完全控制样式和数据绑定
使用地图服务的情况:
- 需要真实世界的卫星/航空影像
- 需要街道级细节
- 需要实时更新地图
- 用户期望使用熟悉的地图界面(例如 Google Maps)
同时使用两者(混合方案)的情况:
- 需要以真实世界地图为底图,并叠加自定义形状
- 将统计区域与街道环境结合
应该选择哪种颜色映射类型?
等色映射:
- 数据包含离散类别时使用(例如,会员资格:永久/非永久)
- 每个唯一值都分配一种特定颜色
范围颜色映射:
- 数据为连续数值时使用(例如,人口:0-1M、1M-10M、10M+)
- 为范围内的值分配颜色
去饱和度颜色映射:
- 根据数值创建渐变效果时使用
- 使用单一颜色,并改变其饱和度
应该使用多少个图层?
单图层:
- 只有一个数据维度的简单可视化
- 基本的国家/地区地图
- 所有数据都能放在一个图层中
多图层:
- 在底图上突出显示特定区域
- 组合不同的数据源
- 使用叠加层创建视觉层次
- 分别显示边界、河流和城市
关键属性参考
MapsComponent
titleSettings:配置标题和副标题legendSettings:配置图例的可见性、位置和对齐方式zoomSettings:启用缩放,设置初始缩放比例layers:图层配置数组
LayerDirective
shapeData:形状的 GeoJSON 数据dataSource:要绑定到形状的数据shapeDataPath:dataSource 中与形状匹配的字段shapePropertyPath:GeoJSON 中与 dataSource 匹配的字段shapeSettings:填充、边框和颜色映射type:"Layer"(主图层)或 "SubLayer"(叠加层)markerSettings:标记配置bubbleSettings:气泡可视化配置dataLabelSettings:标签配置tooltipSettings:工具提示自定义配置navigationLineSettings:线条可视化配置
常见模式
- 模块注入:仅注入所需服务,以减小打包体积
- 数据绑定:使用 shapeDataPath + shapePropertyPath 自动匹配
- 渐进式增强:从基础地图开始,逐步添加功能
- 响应式设计:地图会自动调整大小,但请在不同视口上进行测试
故障排查快速检查
❌ 地图未显示:
- 确认 GeoJSON 数据已正确导入
- 检查控制台是否有错误
- 确保已导入 CSS
❌ 颜色未应用:
- 确认
shapeDataPath与数据字段名称匹配 - 确认
shapePropertyPath与 GeoJSON 属性匹配 - 检查
colorValuePath是否指向正确的数据字段
❌ 标记未显示:
- 注入
Marker服务 - 在 MarkerDirective 中设置
visible={true} - 确认纬度/经度值有效
❌ 缩放不起作用:
- 注入
Zoom服务 - 设置
zoomSettings.enable={true} - 检查是否需要
enablePanning
❌ 图例未显示:
- 注入
Legend服务 - 设置
legendSettings.visible={true} - 确保已配置颜色映射
后续步骤
- 从简单开始:从 getting-started.md 开始,创建基础地图
- 添加数据:按照 data-visualization.md 添加标记/气泡
- 设置样式:使用 color-mapping.md 实现分级设色效果
- 添加交互:按照 user-interactions.md 实现缩放/平移
- 增强功能:根据需要添加高级功能
选择与当前实现阶段和具体需求相匹配的参考文档。