文章目录
颜色库
CorlorRamp抽象类,它包括4个子类(组件类):
- AlgorithmicColorRamp(起止颜色带):用起始颜色、终止颜色确定一个颜色带,起始、终止颜色使用RGB模型
- RandomColorRamp(随机颜色带):使用HSV颜色模型来确定一串颜色
- PresetColorRamp(预设颜色带):预设的颜色模式,可存储13种颜色
- MultiPartColorRamp(叠加颜色带):叠加产生颜色带
渲染Renderer
Renderer对象分三类:
- 要素渲染(FeatureRenderer)
- 栅格渲染(RasterRenderer)
- TIN渲染(TINRenderer)
要素渲染
IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0);
pGeoFeatureLayer.Renderer = pRenderer as IFeatureRenderer;
简单渲染SimpleRenderer
以点为例:
-
创建一个简单渲染器SimpleRenderer
ISimpleRenderer pSimpleRenderer = new SimpleRendererClass(); //简单渲染器
-
创建渲染对象的符号,并赋值
ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass(); //点状符号 pSimpleMarkerSymbol.Color = GetRGB(255,0,80); //设置颜色,GetRGB自己定义的函数 pSimpleMarkerSymbol.Size = 2; //设置大小 pSimpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond; //设置点的样式
-
将符号设置给渲染器(SimpleRenderer对象的Symbol属性)
pSimpleRenderer.Symbol = pSimpleMarkerSymbol as ISymobl;
-
将渲染器赋值给图层
IGeoFeatureLayer pGeoFeatureLayer = axMapControl1.get_Layer(0) as IGeoFeatureLayer; pGeoFeatureLayer.Renderer = pSimpleRenderers as IFeatureRenderer;
-
更新视图、更新目录
axMapControl1.ActiveView.Refresh(); axTOCControl1.Update();
点密度渲染DotDensityRenderer
使用类型:Polygon面状要素,不能用于Line和Point类型
IDotDensityRenderer接口:定义了使用点密度渲染的方法和属性:
- DotDensitySymbol属性:确定着色的点符号
- DotValue属性:确定每个点代表的值,该值控制每个面要素Polygon中点的数量
- 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;
}
}