在 GIS 應用中,「鷹眼」是概覽圖的常見元件。本文提供一個完整的 ArcEngine + C# 實作,包含四大核心功能:
直接將主地圖圖層 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);
}
}
e.newEnvelope 繪製紅框,並微調鷹眼視野範圍使紅框明顯可見。TrackRectangle() 取得框選範圍,直接指派給 MainMapControl.Extent。完整程式碼已整理於文中,可直接套用於專案。注意需引用 ESRI.ArcGIS.Carto、Geometry、Display、esriSystem 等組件。