WPF & ArcGIS Engine三維開發入門攻略
前些日子在做ESRI的開發大賽,從剛開始接觸ArcGIS Engine(以下稱AE)那會兒“摸著石頭過河”那個階段一路走下來,有了不少心得體會,在此給大家分享下。
做得是一個三維的校園地下管線系統,使用的AE的SceneControl組件。傳說Scene適合小場景精細模型展示,Globe適合大場景海量數據展示,所以選的前者。界面用的是Dotnetbar for WinForm,但其實WPF更好些,這里我也以WPF為例。
我的系統環境:Windows 7 專業版,Visual Studio 2010,ArcGIS Engine 9.3
1.創建項目
創建一個WPF的項目,必須選擇.Net framework 3.5(AE9.3不支持.Net4.0),添加引用:
ESRI.ArcGIS.3DAnalyst
ESRI.ArcGIS.AxControls
ESRI.ArcGIS.Carto
ESRI.ArcGIS.Controls
ESRI.ArcGIS.Display
ESRI.ArcGIS.Geometry
ESRI.ArcGIS.GlobeCore
ESRI.ArcGIS.Output
ESRI.ArcGIS.System
ESRI.ArcGIS.SystemUI
VS08可以在.Net選項卡下面找到所有引用,但10則只能去ESRI安裝目錄下找
2.界面
把缺省標題MainWindow改掉,分割主窗體中的Grid為左右兩部分,兩邊各放置一個WindowsFormsHost,用于承載AE的控件。
打開XAML視圖,
在頂部引入AE控件的命名空間,名字隨意
xmlns:esri="clr-namespace:ESRI.ArcGIS.Controls;assembly=ESRI.ArcGIS.AxControls"
編輯兩個WindowsFormsHost,添加兩個控件
<WindowsFormsHost Margin="10" >
<esri:AxTOCControl x:Name="toc" Dock="Fill" />
</WindowsFormsHost><WindowsFormsHost Grid.Column="1" Margin="10" >
<esri:AxSceneControl x:Name="scene" Dock="Fill" />
</WindowsFormsHost>
3.代碼
AE的程序需要Liscene才能啟動,通常的辦法是在窗體上放置一個LicenseControl。但對于WPF,這個辦法行不通。
在App.xaml.cs,App類下建一個構造方法
public App(){AoInitialize aoi = new AoInitializeClass();//Additional license choices can be included here.esriLicenseProductCode productCode =esriLicenseProductCode.esriLicenseProductCodeEngine;if (aoi.IsProductCodeAvailable(productCode) ==esriLicenseStatus.esriLicenseAvailable){aoi.Initialize(productCode);}}
程序啟動后,綁定TOC到Scene,并加載地圖
private void Window_Loaded(object sender, RoutedEventArgs e){this.toc.SetBuddyControl(this.scene);//綁定Toc到Scenethis.scene.LoadSxFile("******");//加載場景this.scene.Navigate = true;//啟用Navigatethis.scene.Update();}
OK,F5啟動看下效果
最后,請同樣裝了64位Windows的朋友們,再做下面一個步驟:項目->WpfScene屬性->生成,把目標平臺設置成x86。只因為AE還沒有支持64位,令人失望的是,最新的ArcGIS 10依然沒有。
參考:
ArcGIS Blog:Can you use Visual Studio 2010 to develop against ArcGIS 10
ESRI資源中心:How to host an ArcGIS Engine map control in a WPF application
留言列表