SuperMap iObjects .NET 之雷达扫描动画

作者:贤

目录

  • 1. 介绍
  • 2. 开发环境
  • 3. 流程设计
    • 3.1. 核心逻辑
    • 3.2. 整体流程
  • 4. 代码实现
    • 4.1. 渐变填充雷达扫描区域的扇形
    • 4.2. 定时器刷新实现雷达动态效果
  • 5. 总结

1. 介绍

  SuperMap iObjects .NET 是基于 Microsoft 的 .NET 技术开发的一款 SDK 产品,该篇主要说明如何基于 SuperMap iObjects .NET 组件实现在二维地图上的雷达扫描的动画效果。

  话不多说,先看效果,如下图所示效果满足您的需求,请详细阅读以下内容;若该雷达动画无法满足您的当前需求,可在此篇评论您的需求以及此示例的改进建议。

SuperMap iObjects .NET 之雷达扫描动画_第1张图片

2. 开发环境

软件 版本 下载地址 说明
SuperMap iObjects .NET 10i 及以上版本 http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx 建议参考 SuperMap iObjects .NET 组件包中的帮助文档进行环境和许可配置
Visual Studio 2022 及以上版本 https://visualstudio.microsoft.com/zh-hans/ SuperMap iObjects .NET 从 10.2.0 版本开始只提供 64 位组件包,Visual Studio 2022 开始支持在工具箱中添加 SuperMap iObjects .NET 64 位 UI 控件

3. 流程设计

3.1. 核心逻辑

  • 为基于 SuperMap iObjects .NET 组件实现雷达扫描效果动画,主要分为以下核心流程:
    • 使用 MapControl UI 控件绘制地图底图和雷达几何数据,雷达扫描扇形区域用渐变填充;
    • 设置定时器用于实时刷新雷达扫描区域的位置;
    • 在定时器触发事件中计算定点旋转的雷达扫描扇形区域的动态位置并同步设置渐变填充的旋转角度;
    • 更新追踪图层上的雷达扫描扇形数据并刷新。

3.2. 整体流程

  • 详细步骤如下流程图所示:
    SuperMap iObjects .NET 之雷达扫描动画_第2张图片

4. 代码实现

4.1. 渐变填充雷达扫描区域的扇形

if (geometry is GeoRegion radar)
{
    // 渐变填充
    GeoStyle geoStyle = new GeoStyle
    {
        FillForeColor = Color.White,
        FillBackColor = Color.Green,
        FillOpaqueRate = 50,

        // 线性渐变
        FillGradientMode = FillGradientMode.Linear,

        // 渐变填充旋转角度
        FillGradientAngle = 270,

        // 隐藏扇形边框
        LineSymbolID = 5
    };

    radar.Style = geoStyle;
    Map map = mapControl.Map;

    // 在追踪图层上添加雷达扫描区域扇形几何进行绘制
    map.TrackingLayer.Add(radar, "radar");
    map.ViewBounds = mapViewBounds;
    map.RefreshTrackingLayer();
}

4.2. 定时器刷新实现雷达动态效果

  • 新建定时器

    if (timer == null)
    {
        // 每 5 毫秒刷新一次
        timer = new System.Timers.Timer(5);
        
        // 绑定刷新事件
        timer.Elapsed += Timer_Elapsed;
    }
    
  • 定时器刷新触发事件实现雷达扫描动画效果

    private void Timer_Elapsed(object sender, System.TimersElapsedEventArgs e)
    {
        // 动态调整扇形渐变填充旋转角度
        radar.Style.FillGradientAngle -= 1;
        if (radar.Style.FillGradientAngle <= -0)
        {
            radar.Style.FillGradientAngle = 360;
        }
    
        // 定点调整扇形位置
        radar.Rotate(new Point2D(104.431623223191, 34.4962593960899), -1);
    
        Map map = mapControl.Map;
        int index = map.TrackingLayer.IndexOf("radar");
    
        // 更新追踪图层上雷达扫描区域的位置
        map.TrackingLayer.Set(index, radar);
        map.RefreshTrackingLayer();
    }
    

5. 总结

  基于 SuperMap iObjects .NET 组件实现雷达扫描动画,若通过上述教程学习自行实现时依然存在逻辑不清晰的情况,建议可以参考示例源码 SuperMapRadarScanningSample

你可能感兴趣的:(组件GIS,SuperMap,iObjects,.NET,雷达,动画,组件)