在WPF中使用ArcGIS Engine

简介: 原文 http://blog.csdn.net/zzahkj/article/details/9102621 1.首先,新建一个WPF项目,添加引用ESRI.ArcGIS.AxControls、ESRI.

原文 http://blog.csdn.net/zzahkj/article/details/9102621

1.首先,新建一个WPF项目,添加引用ESRI.ArcGIS.AxControls、ESRI.ArcGIS.System、 ESRI.ArcGIS.Version、ESRI.ArcGIS.Controls、ESRI.ArcGIS.SystemUI,然后拖入 WindowsFormsHost控件到窗体中或者通过在Grid中添加XAML代码实现,如下:

[html] view plain copy
  1. <Grid>  
  2.        <WindowsFormsHost Height="54" HorizontalAlignment="Left" Name="windowsFormsHost1" VerticalAlignment="Top" Width="576" />  
  3.        <WindowsFormsHost Height="232" HorizontalAlignment="Left" Margin="0,60,0,0" Name="windowsFormsHost2" VerticalAlignment="Top" Width="133" />  
  4.        <WindowsFormsHost Height="232" HorizontalAlignment="Left" Margin="139,60,0,0" Name="windowsFormsHost3" VerticalAlignment="Top" Width="437" />  
  5.    </Grid>  



2.为窗体添加一个WindowsLoad事件,名为Window_Loaded,可通过在Window属性里的事件Load里填写Window_Loaded

或者在代码中直接添加Loaded="Window_Loaded"

3.添加AE控件并建立其与WindowsFormsHost控件的联系,

[csharp] view plain copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Windows;  
  6. using System.Windows.Controls;  
  7. using System.Windows.Data;  
  8. using System.Windows.Documents;  
  9. using System.Windows.Input;  
  10. using System.Windows.Media;  
  11. using System.Windows.Media.Imaging;  
  12. using System.Windows.Navigation;  
  13. using System.Windows.Shapes;  
  14. using ESRI.ArcGIS.Controls;  
  15. using ESRI.ArcGIS.SystemUI;  
  16. using System.Windows.Forms;  
  17.   
  18. namespace WpfArcGISEngine  
  19. {  
  20.     /// <summary>  
  21.     /// MainWindow.xaml 的交互逻辑  
  22.     /// </summary>  
  23.     public partial class MainWindow : Window  
  24.     {  
  25.         AxMapControl mapControl = null;  
  26.         AxTOCControl tocControl = null;  
  27.         AxToolbarControl toolbarControl = null;  
  28.         public MainWindow()  
  29.         {  
  30.             InitializeComponent();  
  31.             CreateEngineControls();  
  32.         }  
  33.         //建立AE控件与WindowsFormsHost控件的联系  
  34.         private void CreateEngineControls()  
  35.         {  
  36.             mapControl = new AxMapControl();  
  37.             windowsFormsHost3.Child = mapControl;  
  38.             tocControl = new AxTOCControl();  
  39.             windowsFormsHost2.Child = tocControl;  
  40.             toolbarControl = new AxToolbarControl();  
  41.             windowsFormsHost1.Child = toolbarControl;  
  42.         }  
  43.         //在Window_Loaded实现TOC与MapControl控件、ToolBar与MapControl之间的绑定  
  44.         private void Window_Loaded(object sender, RoutedEventArgs e)  
  45.         {  
  46.             tocControl.SetBuddyControl(mapControl);  
  47.             toolbarControl.SetBuddyControl(mapControl);  
  48.             ToolbarAddItems();  
  49.         }  
  50.         //ToolBar中添加工具  
  51.         private void ToolbarAddItems()  
  52.         {  
  53.             toolbarControl.AddItem(new ControlsOpenDocCommandClass(), -1, -1, false, -1, esriCommandStyles.esriCommandStyleIconOnly);  
  54.             toolbarControl.AddItem(new ControlsSaveAsDocCommandClass(), -1, -1, false, -1, esriCommandStyles.esriCommandStyleIconOnly);  
  55.             toolbarControl.AddItem(new ControlsAddDataCommandClass(), -1, -1, false, -1, esriCommandStyles.esriCommandStyleIconOnly);  
  56.             toolbarControl.AddItem("esriControls.ControlsMapNavigationToolbar");  
  57.             toolbarControl.AddItem("esriControls.ControlsMapIdentifyTool");  
  58.         }  
  59.     }  
  60. }  


4.最后运行肯定不会成功,因为没有License的初始化,License初始化的方法是在App.xaml.cs中添加如下的代码实现

[csharp] view plain copy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Configuration;  
  4. using System.Data;  
  5. using System.Linq;  
  6. using System.Windows;  
  7. using ESRI.ArcGIS.esriSystem;  
  8. namespace WpfArcGISEngine  
  9. {  
  10.     /// <summary>  
  11.     /// App.xaml 的交互逻辑  
  12.     /// </summary>  
  13.     public partial class App : Application  
  14.     {  
  15.         protected override void OnStartup(StartupEventArgs e)  
  16.         {  
  17.             base.OnStartup(e);  
  18.             ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine);  
  19.             InitializeEngineLicense();  
  20.         }  
  21.         private void InitializeEngineLicense()  
  22.         {  
  23.             AoInitialize aoi = new AoInitializeClass();  
  24.             esriLicenseProductCode productCode = esriLicenseProductCode.esriLicenseProductCodeEngine;  
  25.             if (aoi.IsProductCodeAvailable(productCode) == esriLicenseStatus.esriLicenseAvailable)  
  26.             {  
  27.                 aoi.Initialize(productCode);  
  28.             }  
  29.         }  
  30.     }  
  31. }  


现在就可以运行了,运行结果如下:

界面有点丑

目录
相关文章
|
SQL 开发框架 数据可视化
ArcGIS Engine学习系列1 AE基础介绍
市面上AE教程大致到ArcGIS10.2,ESRI宣布从ArcGIS10.5开始便停止AE的更新,使用AO做开发,初学者可以在学习C#语言后,从AE入门,逐渐过度到AO。不同版本下AE数据类型数量Enums:枚举类型,用于实现一些定义的内容Structs:结构体Interfaces:接口Classes:类AE开发中,为了更好地管理COM对象,ESRI将这些COM对象放到不同的组件库中。
305 0
|
SQL 数据安全/隐私保护 数据库
ArcGIS Engine 连接SQL Server并建立关联
IWorkspaceFactory  pWFactory=new OLEDBWorkspaceFactory(); IPropertySet  pPropertySet=new  PropertySetClass(); pPropertySet.
858 0
ArcGIS Engine 几何对象和WKB的转换
using System; using System.Collections.Generic; using System.Text; using GisSharpBlog.NetTopologySuite.
965 0
|
定位技术 容器 索引
ArcGIS Engine Style文件操作
对于一个GISer来说,地图,符号这些都应该有着比别人更深刻的理解和认识,作为平台软件都会提供一套自己的符号库,符号库里面根据类别和种类进行区分,因为点,线,面的自然存在和固有属性是不肯能让你用面状符号去渲染点和线的,学GIS的人,一般都会有分类的意识。
1050 0
|
定位技术
ArcGIS Engine中的Symbols详解
本文由本人翻译ESRI官方帮助文档。尊重劳动成果,转载请注明来源。 Symbols     ArcObjects用了三种类型的Symbol(符号样式)来绘制图形特征:marker symbols(标记符号),line symbols(线符号),和fill symbols(填充符号)。
914 0
|
定位技术 C# C++
VC2010+ArcGIS Engine 10.1 开发(一)
                      使用MFC(VS2010)开发ArcGIS Engine 10.1 网上C#结合ArcGIS Engine的资料简直太多了,多的都无法形容,但是C++的却很少,前一段时间不断的有人问在VC中如何开发ArcGI...
1111 0
|
C# 定位技术
VC2010+ArcGIS Engine 10.1 开发(二)
采用ActiveX控件插入的方式 上面我们是通过代码直接将地图控件放到界面上,这种有一个不好的地方就是,如果我们要设置控件的一些样式和视觉效果,我们要自己写很多代码,在C#中我们就很容易,其实在VC中也可以采用这种方式,下来我介绍下: 插入控件 在Vi...
850 0
|
C++
ArcGIS Engine 10报错:ArcGIS version not specified...
        ArcGIS Engine 10桌面应用程序第一次开发,于是使用VS创建一个简单的AE应用程序,然后拖放一个toolbar、LicenseControl以及MapControl控件。
794 0
|
分布式数据库 数据库
ArcGIS Engine+分布式数据库操作
我们知道Geodatabase的分布式数据库可以在线也可以离线,而在线和离线的接口是不同的,这是因为两者的操作过程不一样,我们看一下两者的区别:                                                                             ...
756 0
ArcGIS Engine+拓扑操作
///  /// 建立拓扑 ///  /// 目标数据集 /// 拓扑名称  public void CreateTopology(IFeatureDataset featureDataset, string topologyName)  { // 建立一个空拓扑(拓扑名称、获得数据集的...
842 0