系统环境: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到Scene
   this.scene.LoadSxFile("******");//加载场景
   this.scene.Navigate = true;//启用Navigate
   this.scene.Update();
}

OK,F5启动看下效果 

最后,请同样装了64位Windows的朋友们,再做下面一个步骤:项目->WpfScene属性->生成,把目标平台设置成x86。只因为AE还没有支持64位,令人失望的是,最新的ArcGIS 10依然没有。 


EVC3/4项目升级到Visual Studio项目的一些建议

大家都在忙着研究WP7了,每天在园子里有好多精彩的文章出现。这几天受朋友的委托,帮忙把他手头的一个项目进行升级。情况大概是这样的:项目是用EVC
3来开发的,一开始运行在PocketPC 2002上(估计是很久以前的事情了),随着操作系统版本的更新,该程序已经不能运行在Windows 
Mobile 6.5平台上了。其实,按照微软官方的说法,EVC 4已经不能开发Windows Mobile
6.0以上的应用程序了,取而代之的是使用Visual Studio 2005/2008。自己的电脑上已经安装了Visual Studio
2008,所以就用这个工具来升级项目吧。下面就记录一下我升级的过程,其中碰到的问题,以及解决的方法,希望能够给后来人留下点信息,少走点弯路。

1. 使用Visual Studio 2008自动升级项目

点击EVC项目中的.vcp文件,Visual Studio 2008就会弹出对话框,然后进行升级,如下图所示:

一路Next以后,升级完成,并给出升级报告,会有Errors或者是Warnings,

2. 处理error C2440: 'static_cast' : cannot convert from 'void (**)(WPARAM,LPARAM)' to 'LRESULT (** )(WPARAM,LPARAM)

这个错误比较常见,处理方法也可以在其中找到提示,只要找到对应的afx_msg
void (**)(WPARAM,LPARAM),改成:afx_msg LRESULT (**
)(WPARAM,LPARAM)就可以了。注意的是要在头文件和.cpp文件中都进行修改,使得其一致。同时,在函数体中,进行return相应的值。
因为需要返回LRESULT值。

3. 处理编译错误error C2065: 'i' : undeclared identifier

原因:是由于存在以下的代码段:
for (int i = 0; i < MAX_LEN; i ++)
{
   //……
}
for (i = 0; i < MAX_NUM; i ++)
{
    //……
}
    对于evc离开循环后,循环变量仍然有效,并且仍可以使用,但是在VS2005下是不行的,由此可见VS2005对变量的定义与审查更为严格,还有就是对数组越界问题也比EVC来的强。
    解决方法:(不能完全相信编译器,也不能把所有的语法检查都丢给编译器) 
int i = 0;
for (i = 0; i < MAX_LEN; i ++)
{
    //……
}
for (i = 0; i < MAX_NUM; i ++)
{
     //……
}

4. 处理fatal error RC1015: cannot open include file 'wceres.rc'.

这个错误可以进行如下处理:右击项目资源 (RC) 文件,选择“查看代码”,然后注释掉以下行: //#include "wceres.rc"

5. 处理Unable to Start Program ‘*****’

编译通过,想下载调试的时候,出现这个问题。解决方法:在工程属性—〉General—〉Project Defaults –〉Use MFC
中,把Use MFC in a shared DLL 改为 Use MFC in a static DLL ,如下图所示:

6. 处理Unhandled Expection at ***:Access Violation reading location***

这类错误只能仔细逐步调试,准确定位以后,才能解决。以我为例,这个异常出现在winmain.cpp中,

原因是InitInstance()返回不成功,于是我再进入InitInstance函数查看。发现里面的domodal模式对话框居然返回失败。

这让我感觉有点摸不着头脑了,不过收获就是定位到了建立模式对话框出错这里。继续查找资料,起初是怀疑类似dll加载是否有问题,但是项目里面并没有加载
相应的dll。因此这个可能排除掉了。后来在msdn英文论坛上找到了一些蛛丝马迹,还是在项目的资源文件上出了问题,默认情况下,Embedded
Visual C++ 4.0 版会将 MFC Pocket PC 应用程序的对话框样式设置为 DS_MODALFRAME,但是MFC 8.0 不支持此样式。解决方法,打开项目资源文件:**.rc,定位到对话框资源,对风格进行修改:

WPF/ArcGIS Engine三维开发和EVC3/4升级到VS项目建议(转)的更多相关文章

  1. WPF & ArcGIS Engine三维开发入门攻略

    原文 http://www.cnblogs.com/Realh/archive/2010/12/14/1906112.html 前些日子在做ESRI的开发大赛,从刚开始接触ArcGIS Engine( ...

  2. ArcGIS Engine三维动画开发 来自:http://www.iarcgis.com/?p=826

    ArcGIS Engine 三维开发 来自:http://www.iarcgis.com/?p=826 在三维中,经常使用的一个功能就是播放动画,也就是我们要对一条动画轨迹进行播放,而在ArcGIS ...

  3. wpf arcgis engine 当前没有或未启用Spatial Analyst许可解决办法

    用wpf 在做叠加分析时 遇到了一个错误:“ERROR 010096:当前没有或未启用Spatial Analyst许可”:在环境中把这个Spatial Analyst扩展功能给勾了也不能解决,现在把 ...

  4. ArcGIS Engine开发前基础知识(4)

    ArcGIS不同开发方式的比较 关于GIS应用软件的开发,通常有三种方式:C/S架构.网络GIS和移动GIS.ArcGIS平台提供了对三种开发方式的支持,对于采用从C/S架构的大多数开发者来讲,首先想 ...

  5. 使用XAML在WPF项目中承载ArcGIS Engine地图控件开发

    原文 http://blog.csdn.net/flexmapserver/article/details/5868882 用Windows Form进行ArcGIS Engine二次开发时常见的形式 ...

  6. VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统

    一.前言 众所周知,二维GIS技术发展了近四十年,伴随着计算机软硬件以及关系型数据库的飞速发展,二维GIS技术已日臻完善.在对地理信息的分析功能上有着无可比拟的优势.一些宏观的地理信息,一维的地理信息 ...

  7. VS2010下WPF开发ARCGIS ENGINE 10的带Ribbon控件项目

    原文 http://blog.sina.com.cn/s/blog_47522f7f0100nq5t.html 题目好长,但是集目前最新的工具于一身..VS是最新的2010版,不过用的是.net3.5 ...

  8. ArcGIS Engine开发前基础知识(1)

    ArcGIS二次开发是当前gis领域的一项重要必不可少的技能.下面介绍它的基本功能 一.ArcGIS Engine功能 在使用之前首先安装和部署arcgis sdk,(在这里不在赘述相关知识)可以实现 ...

  9. 如何在WPF程序中使用ArcGIS Engine的控件

    原文 http://www.gisall.com/html/47/122747-4038.html WPF(Windows Presentation Foundation)是美国微软公司推出.NET ...

随机推荐

  1. Friendly number

    Friendly number Long numbers can be made to look nicer, so let’s write some code to do just that. Yo ...

  2. 【转】Gedit中文乱码

    原文网址:http://wiki.ubuntu.org.cn/Gedit%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81#.E5.91.BD.E4.BB.A4.E6.96.B9 ...

  3. C++初始化列表问题

    C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误 class ClassA{private ClassB arrayOfObjectClassB ...

  4. 如何在程序中调用Caffe做图像分类

    Caffe是目前深度学习比较优秀好用的一个开源库,采样c++和CUDA实现,具有速度快,模型定义方便等优点.学习了几天过后,发现也有一个不方便的地方,就是在我的程序中调用Caffe做图像分类没有直接的 ...

  5. UVa156.Ananagrams

    题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. UDP通讯协议

    常见的通讯协议有udp和tcp. 先来简单了解一下这两个协议各自的特点: UDP: --将数据及源.目的封装在数据包中,不需要建立连接: --每个数据包的大小限制在64k以内: --因无连接,是不可靠 ...

  7. flashback database操作步骤

    默认情况数据库的flashback database是关闭的. 启用Flashback Database 步骤:1.配置Flash Recovery Area 检查是否启动了flash recover ...

  8. python- 迭代器与生成器

    1.迭代器: 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么, 因为人们很少在迭代途中往后退.另外,迭代器的一 ...

  9. TreeView中右击直接获取节点的方法

    在TreeView中无法直接右击得到一个节点,因为当你选中其中一个右击时(不能是第一个)他会默认跳到第一个. 有时我们要想直接右击得到选中的节点,又时我们又想选中直接右击跳出一个快捷菜单怎么办了! 在 ...

  10. SQLSERVER执行时间统计工具SQLQueryStress

    有时候需要检测一下SQL语句的执行时间,相信大家都会用SET STATISTICS TIME ON开关打开SQLSERVER内置的时间统计 SET STATISTICS TIME ON 不过这款小工具 ...