GIS程序设计期末复习总结(2)

2020-06-30 10:49

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();


GIS程序设计期末复习总结(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电厂锅炉蒸汽温度导前微分控制系统设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: