mcpField
S
syncfusion-winforms-map

syncfusion-winforms-map

github.com/syncfusion数据与数据库278 次安装1 周前更新
代码仓库

关于 syncfusion-winforms-map

面向 Windows Forms 的 Syncfusion Maps 实现指南,适合构建桌面地理数据可视化。介绍如何渲染形状文件,并创建统计地图、多图层地图和交互式地图。

主要功能

  1. 01渲染形状文件
  2. 02多图层地图与数据绑定
  3. 03气泡地图尺寸和颜色映射
  4. 04图例与注释
  5. 05工具提示、选择、缩放和平移

适用场景

  1. 01按地区展示人口数据
  2. 02销售区域和销量可视化
  3. 03按区域展示选举结果
  4. 04位置分析仪表盘

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/syncfusion/winforms-ui-components-skills --skill syncfusion-winforms-map

安装后在 Claude Code 中输入/syncfusion-winforms-map确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
annotations.md
bubbles.md
customization.md
getting-started.md
layers.md
legends.md
map-points.md
user-interaction.md

详细介绍

在 Windows Forms 中实现地图

Syncfusion WinForms Maps 控件是一款功能强大的地理数据可视化组件,可渲染形状文件并显示统计信息,还支持缩放、平移、工具提示和选择等交互功能。

何时使用此技能

在以下情况下使用 Maps 控件:

  • 地理可视化:在世界地图、国家地图或区域地图上显示地理数据
  • 统计地图:创建按区域展示统计数据(人口、销售额、人口统计信息)的分级统计地图
  • 气泡地图:使用大小不同的气泡可视化地图位置上的数据
  • 多图层地图:组合多个地理图层(例如,带有高亮区域的世界地图)
  • 交互式地图:通过工具提示、选择、缩放和平移支持用户交互
  • 仪表板集成:将地图可视化添加到桌面仪表板应用程序
  • 位置分析:构建用于分析和显示基于位置的数据的应用程序

组件概述

主要功能:

  • 形状文件渲染(.shp、.dbf、.shx)
  • 支持使用 SubShapeFileLayers 添加多个图层
  • 使用 ItemSource 进行数据绑定
  • 支持通过大小和颜色映射实现气泡可视化
  • 支持图例及其自定义位置
  • 交互功能:工具提示、选择、缩放、平移
  • 用于自定义标记的注释
  • 提供丰富的颜色、描边和填充自定义选项

文档与导航指南

入门

📄 阅读: references/getting-started.md

  • 程序集部署和 NuGet 安装
  • 核心概念和地图结构
  • 形状文件说明和要求
  • 将形状文件添加为嵌入资源
  • Uri 属性配置
  • 创建第一张地图
  • 基本实现示例
图层和形状文件

📄 阅读: references/layers.md

  • ShapeFileLayer 架构
  • 添加多个图层(支持 MultiLayer)
  • SubShapeFileLayer 用法
  • LayoutType 配置(Default 与 Tile)
  • ItemSource 数据绑定
  • ShapeIDPath 和 ShapeIDTableField 映射
  • 图层自定义
气泡

📄 阅读: references/bubbles.md

  • 向地图添加气泡
  • BubbleSetting 属性(AutoFillColors、MaxSize、MinSize)
  • ValuePath 和 ColorValuePath 配置
  • 气泡范围颜色映射
  • StrokeThickness 和 Fill 自定义
  • 气泡可视化示例
图例

📄 阅读: references/legends.md

  • 图例可见性(ShowLegend)
  • 图例位置(Position、PositionX、PositionY)
  • 图例标头和标题
  • 图例类别(图层与气泡)
  • LegendType 和 LegendIcon
  • 图例形状自定义
用户交互

📄 阅读: references/user-interaction.md

  • 工具提示支持(ShowToolTip)
  • 单选和多选
  • EnableSelection 和 SelectionMode
  • SelectedShapeColor 自定义
  • 使用 ZoomFactor 和 ZoomLevel 缩放
  • 平移和导航
  • ShapeSelected 事件处理
地图点

📄 阅读: references/map-points.md

  • 点形状文件和几何图形
  • 加载点数据图层
  • 点、面和折线形状
  • 点标记样式
  • 点数据绑定
  • 多个点图层
注释

📄 阅读: references/annotations.md

  • 添加自定义注释
  • 纬度和经度定位
  • AnnotationDrawing 事件
  • 自定义标记和图标
  • 注释集合
  • 在地图上绘制自定义图形
自定义

📄 阅读: references/customization.md

  • 地图外观样式
  • 形状填充和描边自定义
  • 颜色值路径
  • FillSetting 配置
  • 用于范围的 ColorMappings
  • 主题集成
  • 高级样式技巧

快速入门

步骤 1:安装 NuGet 包
Install-Package Syncfusion.Maps.WinForms
步骤 2:将形状文件添加到项目
  1. 将形状文件(例如 world1.shp、world1.dbf、world1.shx)添加到项目
  2. 在“解决方案资源管理器”中选择文件
  3. 将 生成操作 设置为 嵌入的资源
  4. 将 复制到输出目录 设置为 如果较新则复制(可选)
步骤 3:基本地图实现
using System;
using System.Drawing;
using System.Windows.Forms;
using Syncfusion.Windows.Forms.Maps;

namespace WinFormsMapsExample
{
    public partial class Form1 : Form
    {
        private Maps mapsControl;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Create Maps control
            mapsControl = new Maps();
            mapsControl.Name = "mapsControl";
            mapsControl.Size = new Size(880, 585);
            mapsControl.Dock = DockStyle.Fill;
            mapsControl.MapBackgroundBrush = new SolidBrush(Color.White);

            // Create and configure shape layer
            ShapeFileLayer shapeLayer = new ShapeFileLayer();
            shapeLayer.Uri = "world1.shp";  // Shape file name
            
            // Add layer to map
            mapsControl.Layers.Add(shapeLayer);
            
            // Add control to form
            this.Controls.Add(mapsControl);
        }
    }
}

常见模式

模式 1:数据绑定地图与统计可视化
private void CreateDataBoundMap()
{
    // Prepare data
    MapViewModel model = new MapViewModel();
    
    // Create shape layer
    ShapeFileLayer shapeLayer = new ShapeFileLayer();
    shapeLayer.Uri = "world1.shp";
    
    // Bind data
    shapeLayer.ItemSource = model.Countries;
    shapeLayer.ShapeIDPath = "NAME";            // Property in data model
    shapeLayer.ShapeIDTableField = "NAME";      // Column in .dbf file
    
    // Configure shape display
    shapeLayer.ShapeSetting.ShapeValuePath = "Population";
    shapeLayer.ShapeSetting.ShapeColorValuePath = "Population";
    shapeLayer.ShapeSetting.ShapeDisplayValuePath = "NAME";
    
    // Style settings
    shapeLayer.ShapeSetting.ShapeFill = "#E5E5E5";
    shapeLayer.ShapeSetting.ShapeStroke = "#C1C1C1";
    shapeLayer.ShapeSetting.ShapeStrokeThickness = 1.5;
    
    // Enable features
    shapeLayer.ShowToolTip = true;
    shapeLayer.EnableSelection = true;
    
    mapsControl.Layers.Add(shapeLayer);
}

// Data Model
public class Country
{
    public string NAME { get; set; }
    public double Population { get; set; }
}
模式 2:多图层地图
private void CreateMultiLayerMap()
{
    // Base world layer
    ShapeFileLayer worldLayer = new ShapeFileLayer();
    worldLayer.Uri = "world1.shp";
    worldLayer.ShapeSetting.ShapeFill = "#E5E5E5";
    worldLayer.ShapeSetting.ShapeStroke = "#C1C1C1";
    worldLayer.ShapeSetting.ShapeStrokeThickness = 0.5;

    // Highlighted region 1
    SubShapeFileLayer africaLayer = new SubShapeFileLayer();
    africaLayer.Uri = "africa.shp";
    africaLayer.ShapeSetting.ShapeFill = "#8DCEFF";
    africaLayer.ShapeSetting.ShapeStroke = "#2F8CEA";
    africaLayer.ShapeSetting.ShapeStrokeThickness = 0.5;

    // Highlighted region 2
    SubShapeFileLayer australiaLayer = new SubShapeFileLayer();
    australiaLayer.Uri = "australia.shp";
    australiaLayer.ShapeSetting.ShapeFill = "#FFA07A";
    australiaLayer.ShapeSetting.ShapeStroke = "#FF6347";
    australiaLayer.ShapeSetting.ShapeStrokeThickness = 0.5;

    // Add sublayers to main layer
    worldLayer.SubShapeFileLayers.Add(africaLayer);
    worldLayer.SubShapeFileLayers.Add(australiaLayer);
    
    mapsControl.Layers.Add(worldLayer);
}
模式 3:带颜色范围的气泡地图
private void CreateBubbleMap()
{
    ShapeFileLayer shapeLayer = new ShapeFileLayer();
    shapeLayer.Uri = "world1.shp";
    shapeLayer.ItemSource = GetCountries();
    shapeLayer.ShapeIDPath = "NAME";
    shapeLayer.ShapeIDTableField = "NAME";

    // Configure bubbles
    shapeLayer.BubbleSetting.AutoFillColors = false;
    shapeLayer.BubbleSetting.MaxSize = 70;
    shapeLayer.BubbleSetting.MinSize = 25;
    shapeLayer.BubbleSetting.ValuePath = "Population";
    shapeLayer.BubbleSetting.ColorValuePath = "Population";

    // Define color ranges
    shapeLayer.BubbleSetting.ColorMappings = 
        new System.Collections.ObjectModel.ObservableCollection<ColorMapping>
        {
            new RangeColorMapping 
            { 
                From = 1000000000, 
                To = 2000000000, 
                Color = Color.FromArgb(127, 32, 188, 238) 
            },
            new RangeColorMapping 
            { 
                From = 500000000, 
                To = 1000000000, 
                Color = Color.FromArgb(127, 167, 206, 56) 
            },
            new RangeColorMapping 
            { 
                From = 100000000, 
                To = 500000000, 
                Color = Color.FromArgb(127, 241, 178, 26) 
            },
            new RangeColorMapping 
            { 
                From = 0, 
                To = 100000000, 
                Color = Color.FromArgb(127, 235, 115, 124) 
            }
        };

    mapsControl.Layers.Add(shapeLayer);
}
模式 4:带事件的交互式地图
private void CreateInteractiveMap()
{
    ShapeFileLayer shapeLayer = new ShapeFileLayer();
    shapeLayer.Uri = "world1.shp";
    shapeLayer.ItemSource = GetCountries();
    shapeLayer.ShapeIDPath = "Country";
    shapeLayer.ShapeIDTableField = "NAME";
    
    // Enable interaction
    shapeLayer.ShowToolTip = true;
    shapeLayer.EnableSelection = true;
    shapeLayer.SelectionMode = SelectionModes.Multiple;
    
    // Style selected shapes
    shapeLayer.ShapeSetting.SelectedShapeColor = Color.Orange;
    
    // Enable zooming
    mapsControl.ZoomFactor = 1.0f;
    mapsControl.ZoomLevel = 1;
    
    // Subscribe to events
    mapsControl.ShapeSelected += MapsControl_ShapeSelected;
    
    mapsControl.Layers.Add(shapeLayer);
}

private void MapsControl_ShapeSelected(object sender, ShapeSelectedEventArgs e)
{
    if (e.Data != null)
    {
        foreach (Country country in e.Data)
        {
            Console.WriteLine($"Selected: {country.Country}");
        }
    }
}

关键属性

Maps 控件属性
属性类型描述
LayersLayerCollectionShapeFileLayer 集合
MapBackgroundBrushBrush地图的背景颜色
MapItemsShapeMapItemShapes地图项的形状(Circle、Diamond 等)
ZoomFactorfloat缩放级别系数
ZoomLevelint缩放级别乘数
SelectedMapShapesCollection当前选中的形状
ShapeFileLayer 属性
属性类型描述
Uristring形状文件(.shp)的路径
ItemSourceobject绑定的数据源
ShapeIDPathstring数据模型中的属性名称
ShapeIDTableFieldstring.dbf 文件中的列名称
ShowToolTipbool启用/禁用工具提示
EnableSelectionbool启用/禁用选择
SelectionModeSelectionModes单选或多选
ShowLegendbool显示/隐藏图例
LayoutTypeLayoutType默认或平铺布局
SubShapeFileLayersCollection其他形状图层
ShapeSetting 属性
属性类型描述
ShapeFillstring/Color形状的填充颜色
ShapeStrokestring/Color形状的描边颜色
ShapeStrokeThicknessdouble边框粗细
ShapeValuePathstring值绑定的属性
ShapeColorValuePathstring颜色映射的属性
SelectedShapeColorColor选中形状的颜色
BubbleSetting 属性
属性类型描述
AutoFillColorsbool自动生成气泡颜色
MaxSizedouble气泡最大尺寸
MinSizedouble气泡最小尺寸
ValuePathstring气泡尺寸对应的属性
ColorValuePathstring气泡颜色对应的属性
ColorMappingsCollection基于范围的颜色映射

常见用例

用例 1:人口密度地图

根据人口范围为各地区着色,展示各国人口。

用例 2:销售区域地图

按区域可视化销售数据,用气泡表示销售量,并用颜色表示业绩等级。

用例 3:选举结果地图

按州/省展示选举结果,以颜色标示获胜者,并通过工具提示显示票数。

用例 4:区域分析仪表板

创建包含多个地图图层的仪表板,以展示不同的数据维度(人口统计、经济指标等)。

用例 5:基于位置的应用程序

构建桌面应用程序,以自定义注释突出显示特定位置,并允许用户与地图区域交互。

故障排查

问题:形状文件无法加载

  • 确认文件已添加为嵌入式资源
  • 检查 Uri 与形状文件名完全一致
  • 确保 .dbf 文件与 .shp 文件一同包含

问题:数据未绑定到形状

  • 确认 ShapeIDPath 与数据模型中的属性匹配
  • 确认 ShapeIDTableField 与 .dbf 文件中的列匹配
  • 检查值是否完全一致(区分大小写)

问题:颜色显示不正确

  • 使用 ColorMappings 时,将 AutoFillColors = false
  • 确保颜色范围覆盖所有数据值
  • 确认 ColorValuePath 指向正确的属性

问题:选择功能无效

  • 将 EnableSelection = true
  • 配置 SelectionMode(Single 或 Multiple)
  • 确保形状已绑定数据,以便进行选择

评论

支持 Markdown