map.ActiveView.Refresh();
1.矢量图层渲染:
用到的接口是IFeatureRenderer和IGeoFeatureLayer.Renderer; ISimpleRenderer:简单渲染
IUniqueValueRenderer:唯一值渲染 IClassBreaksRenderer:分级渲染
2.栅格图层渲染:
用到的接口是 IRasterRenderer 和IRasterLayer.Renderer; IRasterRGBRenderer:RGB渲染,指定R、G、B波段 IRasterUniqueValueRenderer:唯一值分类渲染
IRasterClassifyColorRampRenderer:连续值分级渲染 步骤:(针对RGB渲染方式) 第一步,获取栅格图层
ILayer pLayer = axMapControl1.Map.get_Layer(0); IRasterLayer pRasterLayer = pLayer as IRasterLayer;
第二步:通过接口IRasterRGBRenderer2 设置波段 第三步:通过接口IRasterStretch2 设置拉伸方法 第四步:设置背景色,进行渲染。
添加元素
图形元素(Graphics Element),以添加一个点元素为例,主要步骤: 1 创建一个新的元素对象;使用IMarkerElement接口
2 创建元素显示时使用的Symbol(符号)和Geometry(几何对象)
(1)使用ISimpleMarkerSymbol接口(如果使用简单点符号)定义Symbol,包括设置符号的颜色、大小等参数,然后把符号赋给元素。
(2)使用IElement 的 Geometry属性定义Geometry。
将创建的IMarkerElement类型元素强制转换成IElement类型,通过IPoint接口的PutCoords() 设置其位置,给Geometry属性赋值。
3用IGraphicsContainer::AddElement()方法把图形元素添加到视图并显示 4 刷新视图,让添加的元素可以显示出来。
框架元素(Frame Element),以添加指北针为例,步骤: 1、获取PageLayout对象:
IPageLayout pPageLayout = new axPageLayoutControl1.PageLayout;
2、获取与PageLayout相关联的活动视图
IActiveView pActiveView = pPageLayout as IActiveView; 3、获取与PageLayout 相关联的图形容器
IGraphicsContainer pGraphicsContainer = pPageLayout as IGraphicsContainer;
4、使用IGraphicsContainer的FindFrame方法与焦点(Focus)地图相关联的MapFrame对象。 IMapFrame pMapFrame = pGraphicsContainer.FindFrame(pActiveView.FoucsMap) as IMapFrame; 5、由MapFrame对象通过CreateSurroundFrame(pID,pMapSurround)得到mapSurroundFrame对象。
pID表示地图要素的类型,pMapSurround表示MapSurround对象,是个可选参数,可以从样式库(StyleGallery)中获得。
6、获取Element对象,以便它能设置框架的几何体属性(Geometry):
//将MapSurroundFrame对象引用赋给IElement接口的对象变量,从而得到Element对象。 IElement pElement = pMapSurroundFame as IElement ;
7、获取与Focus地图的MapFrame相关联的几何体(该几何体控制图例在地图上的位置); 8、为图例创建一个新的封闭区域几何体,并以Focus地图的地图框架为参照来决定该区域的位置;
9、采用GraphicsContainer对象的AddElement(Element,ZOrder)方法,以Element对象和一个要素在容器中Z方向位置的长整型值为参数,把地图要素添加地图布局( PageLayout的图形容器)中。 10、刷新视图。
专题图绘制
MapControl控件的主要接口IMap;PageLayoutControl控件的主要接口IPageLayout. Map与PageLayout对象共同点:
PageLayout与Map都是视图对象,能够显示地图。 (1)都实现了IActiveView接口;
(2)它们都是图形元素的容器,能存储图形元素,都实现了IGraphicsContainer接口 。 ArcGIS中可以显示在视图上的图形分为两种,地理数据和元素( Element)数据。元素是一个地图中除去要素数据外的部分,即在一幅地图中,除了保存在数据库中的地理数据外,其余的对象全部是元素。
存储的图形类型差别: Map只能保存图形元素(Graphic Element)数据; PageLayout能保存图形元素和框架元素(Frame Element)。
PageLayoutControl 上的Map对象被PageLout的MapFrame对象所管理。
地图总是包含在Map对象中,而Map对象是由一个MapFrame所持有,PageLayout对象至少拥有一个MapFrame对象,而每个MapFrame中也拥有一个Map。
地图输出类库OUTPUT库(esri.ArcGIS.Output) 打印:
IPrinter接口:访问打印机,
IPaper接口:访问打印机的纸张;
IPage接口:访问页面布局控件的页,设置页面打印方式; 地图输出:
IActiveView:获取视图(Map/PageLayout)的范围; IExport:可以用ExportJPEGClass、ExportPNGClass、ExportTIFFClass等实例化,设置导出方式。 IPrintAndExport :: Export(docActiveView,docExport,iOutputResolution,true,null);导出地图。
属性查询
类:
QueryFilter QueryDef
Cursor
FeatureCursor
接口:
IQueryFilter:(WhereClause:设置用来过滤的属性字段列表;SubFields属性:定义用于数据过滤的属性字段列表) IQueryDef ICursor
IFeatureCursor IFeatureSelection
游标有三种类型,即查询游标、插入游标和更新游标 获取游标的四种方法:
1、 IFeatureLayer::search()方法
2、 IFeatureClass::search()/select()方法 3、IFeatureSelection::SelectFeatures()方法 4、 IQueryDef::Evaluate属性
使用search方法的一般格式:
获取图层IFeatureLayer pFeaturelayer=axMapControl.Map.getLayer(0) as IFeatureLayer; 定义查询过滤器IQueryFilter pQueryFilter = new QueryFilter(); 设置查询条件:pQueryFilter .WhereClause = “”;
查询:IFeatureCursor pFeatureCursor = pFeaturelayer.search ( pQueryFilter ,false ); IFeature pFeature = pFeatureCursor.NextFeature(); while (pFeature!= null) { //....... pFeature = pFeatureCursor.NextFeature(); //...... }
使用SelectFeatures方法一般格式:
IFeatureLayer pFeaturelayer=axMapControl.Map.getLayer(0) as IFeatureLayer; IQueryFilter pQueryFilter = new QueryFilter (); //设置过滤器对象的属性
pQueryFilter.WhereClause = \
IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
pFeatureSelection.SelectFeatures(pQueryFilter,esriSelectionResultEnum.esriSelectionResultNew, false);
IQueryDef不能在Shapefile 和Coverage 数据中使用,而仅仅可以使用在GeoDatabase数据库中。 代表了数据库中基于一个或多个表、要素类的进行的属性查询,通过这个对象,用户可以在多个表间建立连接,并且保证在这个连接基础上的查询可以实现。
QueryDef 中的表必须放在一个工作空间内,而QueryDef 对象也是用IFeatureWorkspace::CreateQueryDef 方法来产生,它并不是一个组件类。
比较:
接口 方法名称 返回值 说明 Search IFeatureCursor 返回查询结果集IFeatureCursor接口的游标,目的是遍历查询结果,在地图中不会显示查询结果。 IFeatureClass Select ISelectionSet 返回结果为ISelectionSet接口的选择集,在地图中不会显示查询结果。 IFeatureLayer Search IFeatureCursor 与IFeatureClass接口中的Search方法相同。 IFeatureSelection SelectFeatures void 无返回值,目的是根据查询条件选择要素,将在地图上高亮显示查询结果。 IQueryDef Evaluate ICursor 根据设定的查询条件执行查询操作,返回值为Icursor接口的游标,可进行行遍历,在地图上不会显示查询结果。
空间查询
用到的接口:ISpatialFilter,继承自IQueryFilter,同时包含空间和属性两种查询约束。 ISpatialFilter过滤器 三个必须的属性:
Geometry:设置或获取用来筛选数据的几何体
GeometryField:获取或设置应用于查询过滤器中几何字段的名称。
SpatialRel:获取或设置过滤器所要使用的空间关系:其类型是esriSpatialRelEnum枚举类型
SearchOrder属性用于设置,选择顺序,默认先空间后非空间 esriSearchOrderSpatial ,0,空间查询优先. esriSearchOrderAttribute,1, 属性查询优先。
步骤:
1获取要查询的要素图层:
IFeatureLayer pFeatureLayer = axMapControl1.get_Layer(0) as IFeatureLayer; 2定义空间过滤器:
ISpatialFilter spatialFilter = new SpatialFilterClass();
3定义一个标识flag,选择用于查询的几何形状类型:点、线、矩形、圆和多边形,此处用到switch...case...break条件分支语句;如画圆IGeometry pGeometry = axMapControl1.TrackCircle();
4根据选择的几何形状类型,在图上选择或绘制用于查询的几何形状,为spatialFilter 定义Geometry,并将其赋值给空间过滤器: spatialFilter.Geometry = pGeometry; 5选择空间关系:
spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelEnvelopeIntersects(相交) 6执行查询:通过IFeatureLayer::search()方法
IFeatureCursor featureCursor = pFeatureLayer.Search(spatialFilter, false); IFeature pFeature= featureCursor.NextFeature(); while (pFeature != null) { //高亮显示
axMapControl1.Map.SelectFeature(pFeatureLayer, pFeature);
} pFeature = featureCursor.NextFeature();
axMapControl1.Refresh();