[AE] ArcGIS Engine - 渲染器Renderer|Layer

颜色库

CorlorRamp抽象类,它包括4个子类(组件类):

  1. AlgorithmicColorRamp(起止颜色带):用起始颜色、终止颜色确定一个颜色带,起始、终止颜色使用RGB模型
  2. RandomColorRamp(随机颜色带):使用HSV颜色模型来确定一串颜色
  3. PresetColorRamp(预设颜色带):预设的颜色模式,可存储13种颜色
  4. MultiPartColorRamp(叠加颜色带):叠加产生颜色带

渲染Renderer

Renderer对象分三类:

  1. 要素渲染(FeatureRenderer)
  2. 栅格渲染(RasterRenderer)
  3. TIN渲染(TINRenderer)

要素渲染

这里写图片描述

IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0);
pGeoFeatureLayer.Renderer = pRenderer as IFeatureRenderer;

简单渲染SimpleRenderer

以点为例:

  1. 创建一个简单渲染器SimpleRenderer

     ISimpleRenderer pSimpleRenderer = new SimpleRendererClass(); //简单渲染器
    
  2. 创建渲染对象的符号,并赋值

     ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass(); //点状符号
     pSimpleMarkerSymbol.Color = GetRGB(255,0,80); //设置颜色,GetRGB自己定义的函数
     pSimpleMarkerSymbol.Size = 2; //设置大小
     pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond; //设置点的样式
    
  3. 将符号设置给渲染器(SimpleRenderer对象的Symbol属性)

     pSimpleRenderer.Symbol = pSimpleMarkerSymbol as ISymobl;
    
  4. 将渲染器赋值给图层

     IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer;
     pGeoFeatureLayer.Renderer = pSimpleRenderers as IFeatureRenderer;
    
  5. 更新视图、更新目录

     axMapControl1.ActiveView.Refresh();
     axTOCControl1.Update(); 
    

点密度渲染DotDensityRenderer

使用类型:Polygon面状要素,不能用于Line和Point类型

IDotDensityRenderer接口:定义了使用点密度渲染的方法和属性:

  1. DotDensitySymbol属性:确定着色的点符号
  2. DotValue属性:确定每个点代表的值,该值控制每个面要素Polygon中点的数量
  3. CreateLegend方法:用于产生图例

这里写图片描述

图层Layer

Layer是抽象类,包含FeatureLayer、RasterLayer、TINLayer等子类。

Layer的主接口ILayer,是所有图层对象的公共接口,用于访问所有图层的成员。包含最大、最小显示比例尺的属性,空间参考,名称,图层可见性

通过图层数获取图层,返回ILayer类型:

axMapControl1.get_Layer(i);

FeatureLayer(组件类)

主接口IFeatureLayer,主要用于设置要素图层的数据源FeatureClass

IFeatureLayer pFeatureLayer = new FeatureLayerClass();

GeoFeatureLayer类

主接口IGeoFeatureLayer,实现ILayer、IFeatureLayer两个接口,用于控制要素图层的符号化和标注等

简单渲染例子:点、线、面

整体代码:

//得到颜色的函数
private IRgbColor GetRGB(int r, int b, int g)
{
    IRgbColor pRgbColor = new RgbColor();
    pRgbColor.Red = r;
    pRgbColor.Blue = b;
    pRgbColor.Green = g;
    return pRgbColor;
}
//简单渲染点击事件
private void menuSimpleRenderer_Click(object sender, EventArgs e)
{
    int LayerNum = inputLayerNum(); //输入图层数,自己实现
    if (LayerNum == -1) //图层数出错
    {
        return;
    }
    else
    { 
		ISimpleRenderer pSimpleRenderer = new SimpleRendererClass(); //简单渲染器

        ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass(); //面状渲染类
        ISimpleLineSymbol pSimpleLineSymobl = new SimpleLineSymbolClass(); //线状渲染类
        ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass(); //点状渲染类
        
		IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(LayerNum) as IGeoFeatureLayer; //得到指定图层
		switch (pGeoFeatureLayer.FeatureClass.ShapeType) //底部图层类型
        {
            case esriGeometryType.esriGeometryPolygon: //面
                //边符号
                pSimpleLineSymobl.Color = GetRGB(255, 0, 80);
                pSimpleLineSymobl.Style = esriSimpleLineStyle.esriSLSDash;
                pSimpleLineSymobl.Width = 1.8;
                //填充符号
                pSimpleFillSymbol.Color = GetRGB(0, 0, 255);
                pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
                pSimpleFillSymbol.Outline = pSimpleLineSymobl;
                //为Renderer设置填充符号
                pSimpleRenderer.Symbol = pSimpleFillSymbol as ISymbol;
                break;
            case esriGeometryType.esriGeometryPoint: //点
                //点符号
                pSimpleMarkerSymbol.Color = GetRGB(255, 0, 80);
                pSimpleMarkerSymbol.Size = 2;
                pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond;
                pSimpleRenderer.Symbol = pSimpleMarkerSymbol as ISymbol;
                break;
            case esriGeometryType.esriGeometryPolyline: //线
                //线符号
                pSimpleLineSymobl.Color = GetRGB(255, 0, 80);
                pSimpleLineSymobl.Style = esriSimpleLineStyle.esriSLSDash;
                pSimpleLineSymobl.Width = 1.8;
                //为Renderer设置填充符号
                pSimpleRenderer.Symbol = pSimpleLineSymobl as ISymbol;
                break;
        }
        pSimpleRenderer.Description = "渲染示例";
        //设置图层渲染并刷新新屏幕
        pGeoFeatureLayer.Renderer = pSimpleRenderer as IFeatureRenderer;
        axMapControl1.ActiveView.Refresh(); //刷新视图
        axTOCControl1.Update(); //刷新目录树
        MessageBox.Show("第" + (LayerNum + 1) + "个图层渲染成功。");
    }
}

//inputLayerNum()输入图层函数
public static int layerNum = -1;
private int inputLayerNum()
{
    int LayerCnt = axMapControl1.LayerCount;
    if (LayerCnt == 0)
    {
        MessageBox.Show("当前没有一个图层,请添加图层后重试");
        return -1;
    }
    List<string> LayersInfo = new List<string>();
    for (int i = 0; i < LayerCnt; i++) 
    {
        IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(i) as IGeoFeatureLayer;
        LayersInfo.Add(pGeoFeatureLayer.Name);
    }
    Selector selectorForm = new Selector(LayersInfo); //新建立的Form,用来显示可选图层
    if (selectorForm.ShowDialog() == DialogResult.OK)
    {
        int ret = layerNum;
        layerNum = -1;
        return ret;
    }
    else
    {
        layerNum = -1;
        return -1;
    }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
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 提供了丰富的栅格图层渲染功能,可以根据需求为栅格数据进行个性化的可视化处理。无论是单波段、多波段、颜色映射还是分级渲染,用户都可以灵活选择和配置渲染方法,以实现最佳的图层显示效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geodoer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值