天天看點

SuperMap iObjects .NET 之雷達掃描動畫1. 介紹2. 開發環境3. 流程設計4. 代碼實作5. 總結

作者:賢

目錄

  • 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. 開發環境3. 流程設計4. 代碼實作5. 總結

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 之雷達掃描動畫1. 介紹2. 開發環境3. 流程設計4. 代碼實作5. 總結

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。

繼續閱讀