首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

鷹眼控制項實作(ArcEngine + C#):同步縮放、拖曳與框選

     編輯:關於C#

在 GIS 應用中,「鷹眼」是概覽圖的常見元件。本文提供一個完整的 ArcEngine + C# 實作,包含四大核心功能:

  1. 主地圖視野變更時,鷹眼繪製紅框指示當前範圍。
  2. 主地圖縮放時,鷹眼同步調整比例尺(參考 Google Maps 風格,變化幅度較小)。
  3. 在鷹眼以滑鼠左鍵拖曳紅框,釋放後主地圖視野跟隨移動。
  4. 在鷹眼以滑鼠右鍵拉框,主地圖視野更新為框選範圍。

關鍵技術點:圖層深層複製

直接將主地圖圖層 AddLayer 到鷹眼會導致兩控制項共用同一記憶體,操作時易觸發「嘗試讀取或寫入受保護的記憶體」異常。解決方案:使用 IObjectCopy 進行硬拷貝:

private void AddLayerToOverViewMap()
{
    OverViewMapControl.ClearLayers();
    for (int i = 0; i < MainMapControl.LayerCount; i++)
    {
        IObjectCopy objectcopy = new ObjectCopyClass();
        object toCopyLayer = MainMapControl.get_Layer(i);
        object copiedLayer = objectcopy.Copy(toCopyLayer);
        ILayer C = (new FeatureLayerClass()) as ILayer;
        object toOverwriteLayer = C;
        objectcopy.Overwrite(copiedLayer, ref toOverwriteLayer);
        OverViewMapControl.AddLayer(C, i);
    }
}

核心事件處理

  • MainMapControl_OnExtentUpdated:主地圖視野更新時,清空鷹眼圖形容器,依 e.newEnvelope 繪製紅框,並微調鷹眼視野範圍使紅框明顯可見。
  • OverViewMapControl_OnMouseDown (右鍵):呼叫 TrackRectangle() 取得框選範圍,直接指派給 MainMapControl.Extent。
  • OverViewMapControl_OnMouseMove (左鍵):即時計算主地圖視野中心點對應鷹眼座標,重繪紅框。
  • OverViewMapControl_OnMouseUp (左鍵):拖曳結束,將主地圖視野中心點移至滑鼠位置。

完整程式碼已整理於文中,可直接套用於專案。注意需引用 ESRI.ArcGIS.Carto、Geometry、Display、esriSystem 等組件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved