如何代码实现ArcGlobe中TOC右键菜单下Elevation选项卡中的Floating on a custom surface功能

首先,标题要长……

其次,很无奈,找这个东西找了一天……网上都没有明确的代码示例或解释。快要遍历官方的Developer Help文档了。各种搜Floating on神马的都没有。最后经语法分析,觉得

How to drape a layer on an elevation surface in globe

这个标题有点意思。于是尝试了一下,还真是……无语啊,文档就不能跟右键菜单设置里的说明保持一致么……

最无奈的是 直接搜索 How to drape a layer on an elevation surface in globe 一个搜索结果都没有!

搜drape才能找到该文档……无了个语的。

 

问题描述:

我现在有高程数据,也就是有一个IRasterLayer elevationRasterLayer。

我生成了一个栅格数据,渲染之后要贴在地球表面上。要贴的图层是IRasterLayer coverageRasterLayer。

最后就剩怎么贴了。

 

贴法:

  借鉴官方的示例。

// 搞到globeDisplayLayers

IGlobeDisplayLayers2 pGlobeDisplayLayers2 = axGlobeCtrl.GlobeDisplay as IGlobeDisplayLayers2;

// 找到要贴的图层的属性
IGlobeLayerProperties drapeLayerGlobeLayerProperties = pGlobeDisplayLayers2.FindGlobeProperties(coverageRasterLayer);

// 获取高度属性设置
IGlobeHeightProperties drapeLayerGlobeHeightProperties = drapeLayerGlobeLayerProperties.HeightProperties;

// 设置baseLayer为原来的高程底图
drapeLayerGlobeHeightProperties.BaseLayer = elevationRasterLayer;

// 设置一下BaseOption 属性
drapeLayerGlobeHeightProperties.BaseOption =
ESRI.ArcGIS.GlobeCore.esriGlobeLayerBaseOption.esriGlobeLayerBaseLayer;

// 将配置好的高度属性应用到被贴的图层
drapeLayerGlobeHeightProperties.Apply(axGlobeCtrl.GlobeDisplay.Globe, coverageRasterLayer);

// 刷刷刷
axGlobeCtrl.GlobeDisplay.RefreshViewers();

 

posted @ 2012-08-28 18:24  Reaver21  阅读(435)  评论(0编辑  收藏  举报