ArcGIS Engine基础开发教程3学习地图和地图布局.docx

上传人:b****5 文档编号:5800042 上传时间:2023-01-01 格式:DOCX 页数:28 大小:2.55MB
下载 相关 举报
ArcGIS Engine基础开发教程3学习地图和地图布局.docx_第1页
第1页 / 共28页
ArcGIS Engine基础开发教程3学习地图和地图布局.docx_第2页
第2页 / 共28页
ArcGIS Engine基础开发教程3学习地图和地图布局.docx_第3页
第3页 / 共28页
ArcGIS Engine基础开发教程3学习地图和地图布局.docx_第4页
第4页 / 共28页
ArcGIS Engine基础开发教程3学习地图和地图布局.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

ArcGIS Engine基础开发教程3学习地图和地图布局.docx

《ArcGIS Engine基础开发教程3学习地图和地图布局.docx》由会员分享,可在线阅读,更多相关《ArcGIS Engine基础开发教程3学习地图和地图布局.docx(28页珍藏版)》请在冰豆网上搜索。

ArcGIS Engine基础开发教程3学习地图和地图布局.docx

ArcGISEngine基础开发教程3学习地图和地图布局

ArcGISEngine基础开发教程(3)——学习地图和地图布局

本帖最后由fxlcoco于2010-3-909:

51编辑

ESRIBBSGIS大讲堂首发,转载请注明出处

本章是ArcGISEngine基础开发教程的第三章,主要给大家大致讲解了,地图和地图布局的相关对象。

这些对象非常重要,如果这些基本对象都不熟悉就开始搞ArcGISEngine开发是不科学的也走不远的。

3地图和地图布局

3.1地图

3.1.1Map对象

Map对象是ArcGISEngine的主要对象,本章将给大家介绍地图组成结构,如何创建地图,如何对组成地图的对象进行操作,在介绍这些内容时尽量结合ArcMap学习效果会更好。

在Map对象上能显示的图形有两类一类是地理数据,一类是元素。

地理数据包括矢量类型的要素数据,栅格数据,Tin等表面数据等,这些数据都保存在Geodatabase或数据文件如shapefile中,它们是用于GIS分析制图的源数据;

下载(482.69KB)

2009-5-1809:

19

图1

而元素是另一种可以显示在Map上的对象,它分为两部分一类是图形元素,一类是框架元素,图形元素可以显示出来,而框架元素充当了“容器”的角色。

在ArcMap中可以使用“Draw”工具在Map上直接绘制一个矩形,圆形,文本等对象,在布局视图上也可以给地图添加指北针,图例,比例尺等图形对象,这些都是图形元素。

下载(311.21KB)

2009-5-1809:

19

图2

在ArcMap中Map对象是由MXDocument对象的MapFrame对象管理,MapFrame是一个框架元素。

Map对象有双重身份,一方面是数据的管理容器,可以加载地理数据和图形元素,扮演了数据管理器的角色,另一方面它又可以让用户看到这些数据即扮演了数据显示器的角色,当加载数据到Map对象的时候,Map对象是数据的管理者;当改变视图范围,刷新地图的时候它是数据的显示者。

Map对象主要实现的接口由IMap, IGraphicContainer, IActiveView, IMapBookmarks等接口。

IMap接口主要用于管理Map对象中的Layer对象,要素选择集对象,MapSourround对象,空间参考等对象。

Map对象可以显示图形元素(GraphicsElement),Map对象通过IGraphicsContainer接口来管理这些元素对象,包括图形元素和框架元素。

IGraphicsContainer返回的是Map对象中处于活动状态的Graphicslayer引用指针,它可以是一个Basicgraphicslayer,也可以是CompositeGraphicsLayer中的一个图层,或者是一个FDOGraphicsLayer注记图层。

以下代码片段演示如何添加一个Element到Map上:

1.

2.  ///

3.

4.///添加临时元素到地图窗口上

5.///

6.///地图控件

7.///单个元素

8.///元素集合

9.publicstaticvoidAddTempElement(AxMapControlpMapCtrl,IElementpEle,IElementCollectionpEleColl)

10.{

11.try

12.{

13.IMappMap=pMapCtrl.Map;

14.IGraphicsContainerpGCs=pMapasIGraphicsContainer;

15.if(pEle!

=null)

16.pGCs.AddElement(pEle,0);

17.

18.if(pEleColl!

=null)

19.  if(pEleColl.Count>0)

20.    pGCs.AddElements(pEleColl,0);

21.    IActiveViewpAV=(IActiveView)pMap;

22.    //需要刷新才能即时显示

23.  pAV.PartialRefresh(esriViewDrawPhase.esriViewGraphics,null,pAV.Extent);

24.}

25.catch(ExceptionErr)

26.{

27.MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

28.}

29.}

复制代码

IActiveView接口定义了Map对象的数据显示功能。

使用该接口可以改变视图的范围,刷新视图。

IActiveView的PartialRefresh(esriViewGeography,pLayer,null)用于刷新指定图层:

IActiveView的PartialRefresh(esriViewGeography,null,null)用于刷新刷新所有图层:

IActiveView的PartialRefresh(esriViewGeoSelection,null,null)用于刷新所选择的对象:

IActiveView的PartialRefresh(esriViewGraphics,null,null)用于刷新图形元素:

IActiveView的PartialRefresh(esriViewGraphics,pElement,null)用于刷新指定图形元素

IActiveView的PartialRefresh(esriViewGraphics,null,null)用于刷新所有图形元素

IActiveView的PartialRefresh(esriViewGraphicSelection,null,null)用于刷新所选择的图元。

IMapBookmark接口用于管理所有的空间书签对象。

3.1.2图层对象

Map对象可以装载地理数据,这些数据是以图层的形式加载到地图对象上的,图层对象Layer作为一个数据的“中介”存在,它本身没有转载地理数据,而仅仅是获得了数据的引用,用于管理数据源的连接。

地理数据始终保存在Geodatabase或者地理数据文件中。

由于地理数据的类型多样,所以Layer类也拥有众多子类(具体查看帮助),接下来主要给大家介绍要素图层—FeatureLayer对象。

3.1.3FeatureLayer对象

FeatureLayer类实现的常用主要接口如下图所示:

IFeatureLayer,IFeatureLayerDefinition,FeatureSelection,IGeoDataset,IGeoFeatureLayer,IIdentify,ILayerEffects。

下载(227.23KB)

2009-5-1809:

19

图3

IFeatureLayer接口主要用于设置要素图层的数据源(FeatureClass),IFeatureLayer的DataSourceType获取FeatureLayer对象的数据源类型。

此外通过IFeatureLayer的Search方法可以查询要素图层上符号某一条件的要素集。

IGeoFeatureLayer接口继承了ILayer和IFeatureLayer两个接口,用于控制要素图层的符号化和标注等。

IGeoDataset接口仅有两个属性,它们用于管理地理要素集。

Extent可以返回当前数据集的范围,是一个IEnvelope类型的对象;

SpatialReference属性则可以让用户获得这个数据集的空间参考。

IFeatureSelection接口提供管理一个图层中的要素的选择集的方法和属性。

以下代码片段演示如何获取要素图层符合条件获取选择集

1.

2.//////

3.      ///获取要素图层符合条件获取选择集

4.      ///

5.      ///要素图层

6.      ///过滤条件

7.      ///返回选择集

8.      privateIFeatureSelectionSelectLayersFeatures(IFeatureLayerpFeatureLayer,stringWhereClause)

9.      {

10.        IFeatureSelectionpFeatureSelection=pFeatureLayerasIFeatureSelection;

11.        if(pFeatureSelection==null)return null;

12.        IQueryFilterpQueryFilter=newQueryFilterClass();

13.        pQueryFilter.WhereClause=WhereClause;

14.        pFeatureSelection.SelectFeatures(pQueryFilter,esriSelectionResultEnum.esriSelectionResultNew,false);

15.        returnpFeatureSelection;

16.      }

复制代码

IFeatureLayerDefinition接口定义了CreateSelectionLayer方法,可以将一个图层选择集中的要素转换为一个单独的要素图层。

3.1.4矢量图层操作实例

以下代码片段演示按行政区加载图层数据的功能,以此理解IFeatureLayerDefinition的CreateSelectionLayer方法的使用。

比方说整个国土资源部有某一类型专题数据有若干图层,每个图层数据的范围是整个中国,这时国土资源部开发一套系统可能有这个需求,每个省只能加载本省的数据。

以下函数即为按按行政区范围创建行政区范围的图层。

比方说我想获取河南省的数据只需传入行政区图层中河南省图元的Geometry即可。

另外如果如果遇到行政区层必须用esriSpatialRelEnum. esriSpatialRelContains这个参数,否则行政区这个图层就不能只获取河南这个省份,它会把河南省的周围省份,河北,湖北,安徽,陕西,山东,山西等省份的图元也添加创建到新图层。

1.

2.      ///

3.      ///按行政区范围创建行政区范围的图层

4.      ///

5.      ///源数据图层

6.      ///行政区范围

7.      ///图层是否为行政区

8.      ///新创建的图层

9.      privateIFeatureLayer  GetSelectionLayer(IFeatureLayerpFeatureLayer,IGeometrypGeometry,boolbXZQ)

10.      {

11.        try

12.        {

13.          if(pFeatureLayer!

=null&&pGeometry!

=null)

14.          {

15.              IQueryFilterpQueryFilter;

16.              ISpatialFilterpSpatialFilter=newSpatialFilterClass();

17.              IFeatureSelectionpFeatureSelection=pFeatureLayerasIFeatureSelection;

18.              pSpatialFilter.GeometryField=pFeatureLayer.FeatureClass.ShapeFieldName;

19.              pFeatureSelection.Clear();            

20.              if(!

bXZQ)

21.              {

22.                pSpatialFilter.Geometry=pGeometry;              

23.                pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelIntersects;

24.                pQueryFilter=pSpatialFilter;                

25.                pFeatureSelection.SelectFeatures(pQueryFilter,esriSelectionResultEnum.esriSelectionResultNew,false);

26.              }

27.              else

28.              {

29.                pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;

30.                pQueryFilter=pSpatialFilter;                

31.                if(pGeometryisIGeometryCollection)

32.                {

33.                  for(inti=0;i<(pGeometryasIGeometryCollection).GeometryCount;i++)

34.                  {

35.                      pSpatialFilter.Geometry=(pGeometryasIGeometryCollection).get_Geometry(i);

36.                      pFeatureSelection.SelectFeatures(pQueryFilter,esriSelectionResultEnum.esriSelectionResultAdd,false);

37.                  }

38.                }

39.              }            

40.              IFeatureLayerDefinitionpFLDefinition=pFeatureLayerasIFeatureLayerDefinition;

41.              IFeatureLayerpNewFeatureLayer=pFLDefinition.CreateSelectionLayer(pFeatureLayer.Name,true,null,null);

42.              pNewFeatureLayer.MaximumScale=pFeatureLayer.MaximumScale;

43.              pNewFeatureLayer.MinimumScale=pFeatureLayer.MinimumScale;

44.              pNewFeatureLayer.Selectable=pFeatureLayer.Selectable;

45.              pNewFeatureLayer.Visible=pFeatureLayer.Visible;

46.              pNewFeatureLayer.ScaleSymbols=pFeatureLayer.ScaleSymbols;

47.              returnpNewFeatureLayer;

48.          }

49.          else

50.          {

51.              returnnull;

52.          }

53.        }

54.        catch(ExceptionErr)

55.        {

56.          MessageBox.Show(Err.Message,"获取SelectionLayer",MessageBoxButtons.OK,MessageBoxIcon.Information);

57.          returnnull;

58.        }

59.      }

复制代码

IIdentify接口定义了获得要素图层单个要素的属性的

ILayerFields接口可以直接获取一个要素图层的要素类字段集合

ILayerEffects接口用来设置一个要素图层的透明度,对比度,对比度。

以下代码片段演示如何设置要素图层特效:

1.

2.  ///

3.      ///设置图层特效

4.      ///

5.      ///要素图层

6.      ///亮度

7.      ///对比度

8.      ///透明度

9.      privatestaticvoidSetLayerEffects(IFeatureLayerpFeatureLayer,shortbrightness,shortcontrast,shorttransparency)

10.      {

11.        ILayerEffectspLayerEffect=pFeatureLayerasILayerEffects;

12.        pLayerEffect.Brightness=brightness;

13.        pLayerEffect.Contrast=contrast;

14.        pLayerEffect.Transparency=transparency;

15.      }

复制代码

3.2地图布局

3.2.1PageLayout对象

PageLayout用以显示地图数据,并通过对地图数据进行整饰以便对地图打印输出满足不同行业对GIS出图功能的需求。

PageLayout和Map这两个对象看起来非常相似,它们都是视图对象,可以显示地图;也都是图形元素的容器,可以容纳图形元素(GraphicsElement)。

但是所能够保存的图形类型却是有差别的。

PageLayout除了保存图形元素外,还可以保存诸如MapFrame的框架元素(FrameElement)。

PageLayout控件上的Map对象被PageLayout的MapFrame对象所管理的。

PageLayout类主要实现了IPageLayout接口,它定义了用于修改页面版式(layout)的方法和属性。

IPageLayout的方法ZoomToWhole方法可以让PageLayout以最大尺寸显示;

IPageLayout的ZoomToPercent方法可以按照输入的比例显示;

IPageLayout的ZoomToWidth方法可以让视图显示的范围匹配控件对象的宽度。

IPageLayout的Page属性用以获取Page对象

IPageLayout的RulerSettings属性用以获取RulerSettings对象

IPageLayout的HorizontalSnapGuides和VerticalSnapGuides属性用以获取SnapGuides对象

如下图所示:

下载(215.78KB)

2009-5-1809:

19

 

图4

3.2.2Page对象

 Page对象主要来管理PageLayout对象中的页面,它用来加载地理数据,但不提供分析和查询功能。

Page类的主要接口是IPage,它除了用于管理Page的颜色,尺寸和方向,还可以管理边框类型和打印区域等。

例如通过IPage的FromID可以直接设置纸张大小类型(A4,A3等)。

 

3.2.3SnapGrid对象

Sna

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1