Arcgis Engine栅格渲染(唯一值)IRasterUniqueValueRenderer

参照官方代码后改造而成,有没有属性表都支持。

 

public static bool UniqueValueRenderer(IColorRamp colorRamp, IRasterLayer rasterLayer, string renderfiled="Value")
        {
            try
            {
                IRasterUniqueValueRenderer uniqueValueRenderer = new RasterUniqueValueRendererClass();                
                IRasterRenderer pRasterRenderer = uniqueValueRenderer as IRasterRenderer;
                pRasterRenderer.Raster = rasterLayer.Raster;
                pRasterRenderer.Update();
                IUniqueValues uniqueValues = new UniqueValuesClass();
                IRasterCalcUniqueValues calcUniqueValues = new RasterCalcUniqueValuesClass();
                calcUniqueValues.AddFromRaster(rasterLayer.Raster, 0, uniqueValues);//iBand=0
                IRasterRendererUniqueValues renderUniqueValues = uniqueValueRenderer as IRasterRendererUniqueValues;
                renderUniqueValues.UniqueValues = uniqueValues;
                uniqueValueRenderer.Field = renderfiled;
                colorRamp.Size = uniqueValues.Count;

                uniqueValueRenderer.HeadingCount = 1;
                uniqueValueRenderer.set_Heading(0, "All Data Value");
                uniqueValueRenderer.set_ClassCount(0, uniqueValues.Count);
                bool pOk;
                colorRamp.CreateRamp(out pOk);
                IRasterRendererColorRamp pRasterRendererColorRamp = uniqueValueRenderer as IRasterRendererColorRamp;
                pRasterRendererColorRamp.ColorRamp = colorRamp;
                for (int i = 0; i < uniqueValues.Count; i++)
                {
                    uniqueValueRenderer.AddValue(0, i, uniqueValues.get_UniqueValue(i));
                    uniqueValueRenderer.set_Label(0, i, uniqueValues.get_UniqueValue(i).ToString());
                    IFillSymbol fs=new SimpleFillSymbol();
                    fs.Color = colorRamp.get_Color(i);
                    uniqueValueRenderer.set_Symbol(0, i, fs as ISymbol);
                }
                pRasterRenderer.Update();
                rasterLayer.Renderer = pRasterRenderer;
            }
            catch(Exception ex)
            {
                return false;
            }
            return true;
        }


官方代码如下:

http://resources.esri.com/help/9.3/arcgisengine/dotnet/77da7a38-c696-407d-b73c-ddb36def6032.htm

public IRasterRenderer UnqueValueRenderer
  (ESRI.ArcGIS.Geodatabase.IRasterDataset rasterDataset)
{
  try
  {
    //Get the raster attribute table and the size of the table.
    IRaster2 raster = (IRaster2)rasterDataset.CreateDefaultRaster();
    ITable rasterTable = raster.AttributeTable;
    if (rasterTable == null)
    {
      return null;
    }
    int tableRows = rasterTable.RowCount(null);
    //Create colors for each unique value.
    IRandomColorRamp colorRamp = new RandomColorRampClass();
    colorRamp.Size = tableRows;
    colorRamp.Seed = 100;
    bool createColorRamp;
    colorRamp.CreateRamp(out createColorRamp);
    if (createColorRamp == false)
    {
      return null;
    }
    //Create a unique value renderer.
    IRasterUniqueValueRenderer uvRenderer = new RasterUniqueValueRendererClass

()
      ;
    IRasterRenderer rasterRenderer = (IRasterRenderer)uvRenderer;
    rasterRenderer.Raster = rasterDataset.CreateDefaultRaster();
    rasterRenderer.Update();
    //Set the renderer properties.
    uvRenderer.HeadingCount = 1;
    uvRenderer.set_Heading(0, "All Data Value");
    uvRenderer.set_ClassCount(0, tableRows);
    uvRenderer.Field = "Value"; //Or any other field in the table.
    IRow row;
    ISimpleFillSymbol fillSymbol;
    for (int i = 0; i < tableRows; i++)
    {
      row = rasterTable.GetRow(i);
      uvRenderer.AddValue(0, i, Convert.ToByte(row.get_Value(1))); 
        // Assuming the raster is 8-bit.
      uvRenderer.set_Label(0, i, Convert.ToString(row.get_Value(1)));
      fillSymbol = new SimpleFillSymbolClass();
      fillSymbol.Color = colorRamp.get_Color(i);
      uvRenderer.set_Symbol(0, i, (ISymbol)fillSymbol);
    }
    return rasterRenderer;
  }
  catch (Exception ex)
  {
    System.Diagnostics.Debug.WriteLine(ex.Message);
    return null;
  }
}


 

 

ArcGIS Engine栅格数据使用总结 ArcOjects 3D开发方法简介 作者:佚名 文章来源:GIS论坛 点击数:861 更新时间:2009-8-6 一、ArcOjects 3D开发方法简介 众所周知,在ArcGIS 3D分析扩展模块中提供了丰富的三维可视化和分析功能:你可以通过不同的视角查看表面数据,对表面数据进行查询,以及对表面数据进行坡度、坡向、视域分析等操作,进行三维动画模拟等等。其中所涉及的3D对象都是ArcObjects的一部分,针对3D的开发,实际上是ArcObjects的开发,所以具体的开发方法有: 基于ArcScene中内嵌的VBA开发; 通过VB、VC++等兼容COM的开发语言进行开发新的3D组件和功能。 二、基本的3D对象模型 在3D开发中,我们可以用ArcMap对应ArcScene,其中MxDocument对象对应SxDocument对象,Map对象对应着Scene对象,而相对于Display显示对象,在ArcScene中有SceneGraph对象。在对象模型图的顶部是Application对象,从它我们可以执行和应用相关的任务,比如打开文档或者访问和应用相关的其它对象。在VBA中,我们可以直接获得Application对象: Dim pApp as IApplicaiton Set pApp = Application 如果你在VB DLL中实现命令和工具,那么在具体实例化这个类时你可以获得和Application对象挂接的钩子(hook): Implements ICommand Private m_pApp as esriCore.Iapplication Private Sub ICommand_OnCreate(ByVal Hook As Object) Set m_pApp = Hook … End Sub 有了Application对象,你就可以访问它所包含的其它所有对象了。比如可以获得SxDocument对象,而它包含一个Scene对象,Scene对应的SceneGraph对象包含了一个或多个SceneViewer对象,每个SceneViewer对象中有一个Camera对象,它代表了观察点的特性。在Scene对象中可以访问Layer对象和GraphicsLayer3D对象,这两个对象都包含着一个3DProperties对象,用来控制图层中有关三维方面的特性。具体有关对象的特性可以参考联机帮助中对象上提供的接口所属的方法和属性。 三、3D几何模型和定制对象介绍 3D模型可以包括两种:矢量模型和表面模型,表面模型包括TIN和Raster,有关表面模型的创建、数据结构访问和分析在本文中不做介绍。在此只介绍三维矢量模型的生成和访问等。3D矢量模型包括所有含有Z的几何对象:点、线、面,以及MultiPatch(多片)。其中多片又可以分为:三角条带(Triangle Strip)、三角扇(Triangle Fan)和环(Ring)。 在ArcScene中可以通过二维的点、线、面数据来构建三维模型,通过ArcScene中提供的拉伸功能可以将点要素构建成垂直的线,线要素构建成墙,而多边形要素构建成块,拉伸的的大小可以是一定常数,也可以是通过要素属性字段中的计算得出,或者通过数据自身记录的Z。在ArcObjects中可以通过在Geometry几何对象构建过程中,任意点除了X、Y坐标,指定坐标Z来构建三维点、线和面对象;对于多片,则通过构建相应的Multipatch对象,并指定每一个顶点的X、Y和Z。下面的代码描述了如何由多片来构建一个房子对象,它的房顶由三角扇构建,没有窗户的墙由三角条带构建,带窗户的墙由环构建。 Dim pMultiPatch As esriCore.IMultiPatch Set pMultiPatch = New MultiPatch Dim pGeoCol As esriCore.IGeometryCollection Set pGeoCol = pMultiPatch Dim pPoints As esriCore.IPointCollection Dim pPoint As IPoint ‘创建屋顶 Set pPoints = New esriCore.TriangleFan Set pPoint = New Point pPoint.PutCoords 5, 4 pPoint.Z = 10 pPoints.AddPoint pPoint Set pPoint = New Point pPoint.PutCoords 0, 0 pPoint.Z = 5 pPoints.AddPoint pPoint ‘屋顶的其它顶点: . . . (10, 0, 5); (10, 8, 5); ( 0, 8, 5); ( 0, 0, 5) ‘将扇加到MultiPatch pGeoCol.AddGeometry pPoints ‘为没有窗户的墙创建条带 Set pPoints = New esriCore.TriangleStrip ‘添加条带顶点: . . . (10, 0, 5); (10, 0, 0); (10, 8, 5) . . . (10, 8, 0); ( 0, 8, 5); ( 0, 8, 0) . . . ( 0, 0, 5); ( 0, 0, 0) ‘将条带添加到MultiPatch pGeoCol.AddGeometry pPoints ‘为前面的墙创建外环 Set pPoints = New esriCore.Ring ‘添加外环顶点: . . . (10, 0, 5); (10, 0, 0); (10, 8, 5) . . . (10, 8, 0); ( 0, 8, 5); ( 0, 8, 0) . . . ( 0, 0, 5); ( 0, 0, 0) ‘将外环添加到MultiPatch pGeoCol.AddGeometry pPoints pMultiPatch.PutRingType pPoints, esriMultiPatchOuterRing ‘为前面的墙创建内环 Set pPoints = New esriCore.Ring ‘添加内环顶点: . . .(1, 0, 2);(3, 0, 2);(3, 0, 4);(1, 0, 4);(1, 0, 2) pGeoCol.AddGeometry pPoints pMultiPatch.PutRingType pPoints, esriMultiPatchInnerRing Set pPoints = New esriCore.Ring ‘添加内环顶点: . . .(7, 0, 2);(9, 0, 2);(9, 0, 4);(7, 0, 4);(7, 0, 2) pGeoCol.AddGeometry pPoints pMultiPatch.PutRingType pPoints, esriMultiPatchInnerRing ‘设置Z和M坐标awareness Dim pZAware As esriCore.IZAware Set pZAware = pMultiPatch pZAware.ZAware = True Dim pMAware As esriCore.IMAware Set pMAware = pMultiPatch pMAware.MAware = False 通常,多片是用来描述阴影平面集合,并且可以在其上粘贴影像,也就是贴图。为了粘贴影像,需要在Multipatch的每一个定点上记录纹理坐标。纹理坐标记录为s和t,为0到1,表示了从x到y方向影像的起点到终点。在ArcObjects中将s和t编码存储在定点的M中。另外,如果要用Multipatch表达复杂连续的几何对象,比如球体,为了平滑阴影平面之间的转折,需要在Multipatch的每一个顶点上记录它的法向量,同样法向量也是编码后存储在定点的M中。如下面的代码: Dim pNormal As esriCore.IVector3D Dim pVertex As esriCore.Ipoint Dim m As Double m = 0 . . . Dim pEncoder As IEncode3DProperties Set pEncoder = New GeometryEnvironment pEncoder.PackNormal vNormal, m pEncoder.PackTexture2D s, t, m pVertex.M = m 四、3D渲染和动画功能定制简介
ArcGIS Engine 10.2 提供了强大的栅格图层渲染功能,可用于将栅格数据可视化并展示给用户。以下是关于该功能的一些解释和说明。 首先,ArcGIS Engine 10.2 支持多种栅格图层渲染方法,包括单波段、多波段、颜色映射和分级渲染等。这些方法可以根据栅格数据的特点和需求选择合适的方式进行渲染。 在进行栅格图层渲染之前,我们可以通过设置渲染器属性来调整栅格图层的显示效果。例如,可以设置图层的透明度,使得底层的地图或图层得以显示;还可以设置最小和最大可见比例尺,以便根据不同的比例尺范围调整图层的可见性。 对于单波段渲染ArcGIS Engine 10.2 提供了丰富的渲染器选项,包括简单单渲染唯一渲染和分类渲染等。这些选项可以根据栅格像元的来为其分配不同的颜色或符号,以便在地图上进行标记或区分。 对于多波段渲染ArcGIS Engine 10.2 支持将多个波段的组合起来,并将其显示为彩色或灰度图像。此外,还可以应用色带渲染或颜色树渲染来增强图像的视觉效果。 对于颜色映射渲染ArcGIS Engine 10.2 提供了一系列预定义的颜色映射方案,如虑光线渲染和地形渲染等。这些方案可以用于增强图像的视觉效果,以表达栅格数据的特征和分布。 对于分级渲染ArcGIS Engine 10.2 允许用户根据栅格图层的像元范围进行分类,然后为每个类别分配不同的颜色或符号。这样可以更好地表达数据的分布和趋势。 总之,ArcGIS Engine 10.2 提供了丰富的栅格图层渲染功能,可以根据需求为栅格数据进行个性化的可视化处理。无论是单波段、多波段、颜色映射还是分级渲染,用户都可以灵活选择和配置渲染方法,以实现最佳的图层显示效果。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值