AE+C#控制Globe操作范围

原创 2013年12月05日 10:28:39

在实际的Globe操作过程中,都希望能够控制当前场景的范围,即使是误操作超出了范围也能够快速的自动的回到初始的范围。以下代码根据图层的范围控制显示操作的范围,一旦超出图层的范围,根据重绘事件监听,将当前地图范围重置到初始化范围。

 

    系统环境:Win7 64位旗舰版

       GIS环境:ArcEngine 10 sp4

    开发环境:VS 2012 SP1C#

 

1、在frmMain主窗体中声明IGlobeDisplayEvents_Event事件

 

privateIGlobeDisplayEvents_Eventm_pGlobeDisplayEvents = null;

 

2、在窗体初始化的时候,对m_pGlobeDisplayEvents也进行初始化

 

        public frmMain()

        {

           InitializeComponent();

 

            IGlobe pGlobe = globeCtrl3D.Globe;//globeCtrl3DGlobe控件

            m_pGlobeDisplayEvents= pGlobe.GlobeDisplay asIGlobeDisplayEvents_Event;

           m_pGlobeDisplayEvents.AfterDraw += newIGlobeDisplayEvents_AfterDrawEventHandler(m_pGlobeDisplayEvents_AfterDraw);

           

        }

 

3、重写m_pGlobeDisplayEvents_AfterDraw事件

 

        publicvoid m_pGlobeDisplayEvents_AfterDraw(ISceneViewer pViewer)

        {

            try

            {

                IGlobeCamera pGlobeCamera =globeCtrl3D.GlobeCamera;

                double dObserverLatDD = 0.0;

                double dObserverLonDD = 0.0;

                double dObserverAltKMs = 0.0;

 

               pGlobeCamera.GetObserverLatLonAlt(out dObserverLatDD, out dObserverLonDD, out dObserverAltKMs);

 

                ILayer layer = Common.GlobeUtil.getLayerFromScene(globeCtrl3D.GlobeDisplay.Scene,"bj");//bj为要控制范围的图层,getLayerFromScene为在GlobeControl中获取相应图层的函数,这里不再赘述

                IEnvelope pInitEnvelope =layer.AreaOfInterest;

                double dXMin = pInitEnvelope.XMin;

                double dXMax = pInitEnvelope.XMax;

                double dYMin = pInitEnvelope.YMin;

                double dYMax = pInitEnvelope.YMax;

                  // 以下判断当前操作是否在图层范围内,高度控制在020公里(可以根据实际情况设置,此时为地上模式;如果想要地下模式可以将其改为负数)

                if ((dObserverLatDD < dYMin) || (dObserverLatDD> dYMax) || (dObserverLonDD < dXMin) || (dObserverLonDD > dXMax)

                    ||(dObserverAltKMs > 20) || (dObserverAltKMs < 0))

                {// 以下为获取初始化的操作范围,该范围设置在App.Config

                    double dInitObserverLatDD = Convert.ToDouble(System.Configuration.ConfigurationSettings.AppSettings["ObserverLatDD"]);

                    double dInitObserverLonDD = Convert.ToDouble(System.Configuration.ConfigurationSettings.AppSettings["ObserverLonDD"]);

                    double dInitObserverAltKMs = Convert.ToDouble(System.Configuration.ConfigurationSettings.AppSettings["ObserverAltKMs"]);

                    double dInitTargetLatDD = Convert.ToDouble(System.Configuration.ConfigurationSettings.AppSettings["TargetLatDD"]);

                    double dInitTargetLonDD = Convert.ToDouble(System.Configuration.ConfigurationSettings.AppSettings["TargetLonDD"]);

                    double dInitTargetAltKMs = Convert.ToDouble(System.Configuration.ConfigurationSettings.AppSettings["TargetAltKMs"]);

 

                   pGlobeCamera.SetObserverLatLonAlt(dInitObserverLatDD,dInitObserverLonDD, dInitObserverAltKMs);

                   pGlobeCamera.SetTargetLatLonAlt(dInitTargetLatDD, dInitTargetLonDD,dInitTargetAltKMs);

                    globeCtrl3D.GlobeDisplay.RefreshViewers();

                }

            }

            catch (Exception ex)

            {

                string msg = ex.Message;

            }

        }

 

4App.Config中的初始化参数为

 

  <appSettings>

    <!--初始化的位置-->

    <addkey="ObserverLatDD"value="-0.056946961416494392" />

    <addkey="ObserverLonDD"value="121.49905414870099" />

    <addkey="ObserverAltKMs"value="3.9120639485526882" />

    <addkey="TargetLatDD"value="-0.028060602957429747" />

    <addkey="TargetLonDD"value="121.49892786453003" />

    <addkey="TargetAltKMs"value="0.5625919130259821" />

……

 

5、以上完成在GlobeControl中控制可操作的范围,如果超出了自动恢复到初始位置。

Globe

LandSim3D viewterra
  • hayaqi0504
  • hayaqi0504
  • 2016年03月17日 11:09
  • 229

定义成本控制范围(Controlling Area)

一.说明     本操作是在ERP系统后台,定义一个成本控制范围(ControllingArea)。成本控制范围是CO模块最重要也是最基本的组织单位,用来核算企业的收益及费用支出使用情况,基本上所有...
  • zhongguomao
  • zhongguomao
  • 2013年08月28日 10:38
  • 1294

怎么改变CO的成本控制范围

之前做测试时,将成本控制范围默认指定到了别的公司代码下的成本控制范围,现在要在自己的成本控制范围下创建成本要素组,但是KAH1进去后,系统自动给定位到了别的成本控制范围,而且还不能手动选择成本控制范围...
  • zhongguomao
  • zhongguomao
  • 2016年11月08日 12:43
  • 624

范围确认和范围控制

范围确认 范围确认是项目干系人正式接受已完成的项目范围的过程。范围确认需要审查可交付物和工作成果,贯穿于整个项目。 输入 工具与技术 输出 1.范围说明书 2.WB...
  • seacean2000
  • seacean2000
  • 2016年12月11日 19:04
  • 1065

android日期范围控制

http://blog.csdn.net/dongshuai1991/article/details/8512628
  • XiNanHeiShao
  • XiNanHeiShao
  • 2015年03月10日 12:34
  • 283

PMP知识点总结—范围核实与范围控制

【核实范围】:核实产品是否在范围内。首先要通过【需求跟踪矩阵)去保持客户联系,确定产品范围有没变,确保【需求文档)最新后,用它去核实“确认过质量的产品”【确认的可交付成果)的范围,核实没有问题就可以验...
  • michelleqiao
  • michelleqiao
  • 2011年03月16日 16:20
  • 3147

SAP设置信贷控制范围有什么作用?

目的是加强客户应收账款的管控工作,实际是给客户一个赊销的额度。 针对以赊销为主的客户,事前经过对客户的评级,规定在一个期限内,给客户设置一个授信额度,在这个额度内客户可以先发货。 比如给客户甲设置10...
  • zhongguomao
  • zhongguomao
  • 2015年12月08日 17:12
  • 1079

sap信贷管理的操作流程

为了降低企业在实际业务中的信贷风险,SAP系统提供了一个复杂的信贷管理解决方案,当客户超过它的信贷许可范围时,系统能够做出迅速而有效的反应。如下图所示显示了SAP系统中一个客户的信贷管理信息。 ...
  • zhongguomao
  • zhongguomao
  • 2016年02月03日 17:13
  • 1726

AE中获取图层属性信息

public List GetMatchedValues(IFeatureClass pFeatureClass, string strQuery, string strFieldName)    ...
  • zjt107
  • zjt107
  • 2013年08月09日 17:10
  • 3355

公司公司代码业务范围成本控制范围概念

1. 公司(Company)复杂的组织日益需要一个全景式的会计报表,这种趋势在当今竞争日趋激烈的经济全球化进程中显得越来越重要。SAP R/3系统中定义的集团公司的组织结构元素,可以是实际的或虚拟存在...
  • zhongguomao
  • zhongguomao
  • 2016年01月14日 09:07
  • 915
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AE+C#控制Globe操作范围
举报原因:
原因补充:

(最多只允许输入30个字)