精华内容
下载资源
问答
  • GIS地图布局设置总结

    千次阅读 2019-01-18 12:23:17
    GIS地图布局设置总结 开发工具与关键技术:SuperMap iDesktop 作者:陈希雄 撰写时间:2019/1/18 大家好!我今天要给大家分享一个简单的地图布局设置的操作,我相信大家在日常生活中也看过不少的地图吧!一般的...

    GIS地图布局设置总结

    开发工具与关键技术:SuperMap iDesktop
    作者:陈希雄
    撰写时间:2019/1/18

    大家好!我今天要给大家分享一个简单的地图布局设置的操作,我相信大家在日常生活中也看过不少的地图吧!一般的地图布局它除了地图图片本身之外还有比例尺、图例、指北针等等
    使用到的开发工具:SuperMap iDesktop 9D
    第一步:先创建一个地图
    在这里插入图片描述
    第二步:在“开始”选项卡的“浏览”组中找到布局
    在这里插入图片描述
    第三部:在“对象操作”选项卡的“对象绘制”组中找到地图在这里插入图片描述
    点击选择自己喜欢的形状
    在这里插入图片描述
    选择点击图形,把鼠标移到这个布局图上面,然后选择合适的位置,按下左键拖动再放开再按下左键
    在这里插入图片描述
    会出现这个框,这个是选择自己建好的地图
    在这里插入图片描述
    如果需要调整地图的位置可以选中地图,在“布局”选项卡的“地图操作”组中找到锁定地图,锁定地图旁边有对应的工具可以操作,操作完后再点击锁定地图,即可取消锁定地图

    在“对象操作”选项卡的“对象绘制”组中,可以给地图添加比例尺、图例、指北针等等
    比如说:先选中地图,再点击比例尺,即可选中比例尺,把鼠标移到布局地图上,按下左键移动放开左键再按下左键
    在这里插入图片描述
    布局完成后的地图在这里插入图片描述
    第四部:在“布局”选项卡的“文件操作”组中找到打印,点击打印
    在这里插入图片描述
    打印出来的图片
    在这里插入图片描述

    展开全文
  • SuperMap 9D地图布局

    2020-05-18 16:53:50
    布局,就是将一幅或者多幅地图放置在布局窗口中,并添加其他辅助制图要素,如:图名、图例、地图比例尺等,就成为了布局。但是布局的保存也是依赖工作空间的保存。我们来试试,在“工作空间管理器”右键“布局”,...
    开发工具与关键技术:SuperMap iDesktop 9D、SuperMap GIS
    作者:茅凯翔
    撰写时间:2020年5月18日
    

    应该见过地图角落有小小的框吧,那个是用来介绍地图里面很小的东西,也就是“布局”。布局,就是将一幅或者多幅地图放置在布局窗口中,并添加其他辅助制图要素,如:图名、图例、地图比例尺等,就成为了布局。但是布局的保存也是依赖工作空间的保存。我们来试试,在“工作空间管理器”右键“布局”,然后选择“新建布局窗口”,然后点击上方的“对象操作”,再点击地图,选择你想要的布局的形状。选择好了在布局里面画出来就会让你选择所导入的地图。地图但进去了,你可通过啊上方的“布局”选择锁定地图,这样你就可以使用以下的地图操作:
    在这里插入图片描述
    开始添加比例尺、图例、指北针。比例尺是所有地图上常见的东西,比例尺是百世图上距离与实地距离缩小程度,因此也叫缩尺。双击比例尺,它的属性会显示在右边,你可以通过比例尺类型调整类型,还有比例尺单位,可以任意调用,调到你喜欢的形式。
    在这里插入图片描述
    接下来的是图例,图例是几种于地图一角或者一侧的地图上各种符号和颜色所代表的内容与指标的说明,有助于更好的认识地图。它具有双重任务,在编写地图时作为图解表示地图内容的准绳,使用地图时作为必不可少的阅读指南。图例应符合完备性和一致性的原则。
    在这里插入图片描述
    最后的是指北针。指北针是一种用于指示方向的工具,在地图上起了很重要的作用,在工具上是利用地球的磁场作用,在地图上可提供你准确的方向。指北针顾名思义指向北方方位,但是必须配合地图运球相对位置才能知道身处的位置,广泛应用于各种方向判读,譬如航海、野外探险、城市道路地图阅读等领域。指北针与指南针的作用一样,磁针的北极指向地理的北极,利用这一性能可以辨别指示方向。在世界一些地方,指南针也叫做指北针。这个是编写地图上的指北针。
    在这里插入图片描述

    展开全文
  • 04-地图布局-源码

    2021-02-15 17:51:54
    背景与目标 像在演讲中一样构建。... 您将需要在pages/map.css文件中实现... 要显示MapBox地图,您将需要,并确保将自己的密钥添加到#map图像元素的src属性中的url中。 要测试代码并在浏览器中查看页面,请使用以下命令启
  • 地图布局图例

    2012-09-12 00:13:48
    图例的排序,不打印组信息,判断是否单一符号!
  • 地图布局与报表

    2014-09-03 16:27:04
    充分利用arcgis等各个模块功能,制作地图与报表。
  • 地图布局输出为PDF

    千次阅读 2018-09-20 15:42:03
    SuperMap GIS 9D(2019) 提供了地图布局输出为PDF文件的功能。PDF文件,是一种广泛使用的地图输出方式,其优势在于: 一、 可以方便地将地图共享给非GIS用户,只需目标机器安装PDF阅读器; 二、 保留矢量图形,...

    SuperMap GIS 9D(2019) 提供了地图和布局输出为PDF文件的功能。PDF文件,是一种广泛使用的地图输出方式,其优势在于:
    一、    可以方便地将地图共享给非GIS用户,只需目标机器安装PDF阅读器;
    二、    保留矢量图形,提供高质量的地图打印素材;
    三、    地图和布局输出为PDF文件,有效解决了大幅出图的问题。

    SuperMap地图或布局输出为PDF的效果如下图所示,矢量和影像地图都支持输出为PDF,且输出的内容和显示效果与地图或布局基本保持一致,本文结尾部分列举了目前暂不支持输出到PDF的地图效果,您可以采用所提供的替代方案修改地图,进而获得正确的输出效果。

    地图/布局  PDF文件
    网格聚合图
    热力图
    交通线路图
    POI
    影像地图
    专题图

    地图和布局输出为PDF后,PDF中保留了地图图层树结构与图层名称,且仍可控制图层的可见性。然而,在PDF中图层顺序与地图的相反,原因在于地图绘制图层的顺序为从下到上,而PDF绘制图层的顺序为从上到下。


     

    图:地图输出为PDF
    SuperMap将地图或布局输出为PDF时,可以控制输出范围、地图比例尺以及输出分辨率。
    关于输出范围,对于地图,输出范围可以是整幅地图或当前地图窗口范围,输出到PDF中的地图的比例尺为当前地图比例尺;对于布局,输出范围始终为布局页面,并将按照布局100%显示状态下的内容输出。
    关于输出分辨率DPI(每英寸点数),该值越高输出PDF的结果越清晰,但随着DPI值的增大,输出PDF的文件大小和处理时间也会显著增加。默认情况下,输出DPI值为96。
    另外,SuperMap输出PDF使用的颜色模式,目前,暂时只支持RGB颜色模式,这种模式适合在屏幕上查看以及通过喷墨打印机或激光打印机打印。
     
    图:地图输出为PDF参数设置
     
    图:布局输出为PDF参数设置

    • 补充说明:

    地图或布局中的地图内容基本都可以正确输出到PDF文件中,并且为“所见即所得”的输出方式,即当前地图对象中显示的内容与输出的PDF中的地图内容一致(对于布局,布局100%显示状态下的内容与输出的PDF内容一致。)。
    目前,个别地图效果暂不支持输出到PDF中,具体如下:


    表格: 以下地图风格暂不支持输出到PDF中

      地图/布局 PDF 替代方案
    特殊形状的地图对象
    (圆角矩形、圆形、椭圆、多边形)
    图层透明度 使用了图层透明度 矢量图层的图层透明度丢失,栅格和影像的图层透明度有效 使用颜色透明度制作出图层透明的效果。
    栅格/影像数据集设置显示范围

    栅格或者影像数据集通过如下方式设置了显示范围。

    显示范围设置无效

    通过分析方法对数据集进行裁剪,提取显示范围区域。

    系统线型System1-4

     

    使用自定义线型制作不支持的系统符号。

    文字效果

    文字设置了粗体和斜体效果

    若本地计算机存在相应字体的粗体和斜体字库,显示正常;否则粗体和斜体效果无效。

    本地计算机安装相应字体的粗体和斜体字库。例如:文字使用了微软雅黑字体,并设置加粗和斜体,那么您的电脑中要同时具有微软雅黑粗体字库和微软雅黑斜体字库。

    多语言文字

    显示正常

     

    可能会出现乱码

     

    本地计算机安装相应语言文字的字体库。

     

    展开全文
  • 转自http://bbs.esrichina-bj.cn/ESRI/thread-46577-1-1.html<br />  ESRI BBS GIS大讲堂首发,转载请注明出处 <br />本章是ArcGIS Engine... <br />3地图和地图布局 <br />3.1地图

    转自http://bbs.esrichina-bj.cn/ESRI/thread-46577-1-1.html

     

    ESRI BBS GIS大讲堂首发,转载请注明出处

    本章是ArcGIS Engine基础开发教程的第三章,主要给大家大致讲解了,地图和地图布局的相关对象。这些对象非常重要,如果这些基本对象都不熟悉就开始搞ArcGIS Engine开发是不科学的也走不远的。

    3地图和地图布局

    3.1地图

    3.1.1Map对象 

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

    在Map对象上能显示的图形有两类一类是地理数据,一类是元素。地理数据包括矢量类型的要素数据,栅格数据,Tin等表面数据等,这些数据都保存在Geodatabase或数据文件如shapefile中,它们是用于GIS分析制图的源数据;
    image001.png

    图1


    而元素是另一种可以显示在Map上的对象,它分为两部分一类是图形元素,一类是框架元素,图形元素可以显示出来,而框架元素充当了“容器”的角色。在ArcMap中可以使用“Draw”工具在Map上直接绘制一个矩形,圆形,文本等对象,在布局视图上也可以给地图添加指北针,图例,比例尺等图形对象,这些都是图形元素。

    image003.png



    图2


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

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

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

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

    Map对象可以显示图形元素(Graphics Element),Map对象通过IGraphicsContainer接口来管理这些元素对象,包括图形元素和框架元素。IGraphicsContainer返回的是Map对象中处于活动状态的Graphics layer引用指针,它可以是一个Basicgraphicslayer,也可以是CompositeGraphicsLayer中的一个图层,或者是一个FDOGraphicsLayer注记图层。

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

     

    1.    ///
    2. <summary>
    3. ///添加临时元素到地图窗口上
    4. ///</summary>
    5. ///<param name="pMapCtrl">地图控件</param>
    6. ///<param name="pEle">单个元素</param>
    7. ///<param name="pEleColl">元素集合</param>
    8. public static void AddTempElement(AxMapControl pMapCtrl, IElement pEle, IElementCollection pEleColl)
    9. {
    10. try
    11. {
    12. IMap pMap = pMapCtrl.Map;
    13. IGraphicsContainer pGCs = pMap as IGraphicsContainer;
    14. if (pEle != null)
    15. pGCs.AddElement(pEle, 0);
    16. if (pEleColl != null)
    17.    if (pEleColl.Count > 0)
    18.       pGCs.AddElements(pEleColl, 0);
    19.       IActiveView pAV = (IActiveView)pMap;
    20.      //需要刷新才能即时显示
    21.     pAV.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, pAV.Extent);
    22. }
    23. catch (Exception Err)
    24. {
    25. MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    26. }
    27. }
    复制代码

     

    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。

    image005.png





    图3


    IFeatureLayer接口主要用于设置要素图层的数据源(FeatureClass), IFeatureLayer的DataSourceType获取FeatureLayer对象的数据源类型。此外通过IFeatureLayer的Search方法可以查询要素图层上符号某一条件的要素集。

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

    IGeoDataset接口仅有两个属性,它们用于管理地理要素集。Extent可以返回当前数据集的范围,是一个IEnvelope类型的对象;
    SpatialReference属性则可以让用户获得这个数据集的空间参考。

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

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

    1. /// /// <summary>
    2.         /// 获取要素图层符合条件获取选择集
    3.         /// </summary>
    4.         /// <param name="pFeatureLayer">要素图层</param>
    5.         /// <param name="WhereClause">过滤条件</param>
    6.         /// <returns>返回选择集</returns>
    7.         private IFeatureSelection SelectLayersFeatures(IFeatureLayer pFeatureLayer, string WhereClause)
    8.         {
    9.             IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
    10.             if (pFeatureSelection == null) return null;
    11.             IQueryFilter pQueryFilter = new QueryFilterClass();
    12.             pQueryFilter.WhereClause = WhereClause;
    13.             pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
    14.             return pFeatureSelection;
    15.         }
    复制代码

     

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


    3.1.4矢量图层操作实例


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


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


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

    1.          /// <summary>
    2.         /// 按行政区范围创建行政区范围的图层
    3.         /// </summary>
    4.         /// <param name="pFeatureLayer">源数据图层</param>
    5.         /// <param name="pGeometry">行政区范围</param>
    6.         /// <param name="bXZQ">图层是否为行政区</param>
    7.         /// <returns>新创建的图层</returns>
    8.         private IFeatureLayer  GetSelectionLayer(IFeatureLayer pFeatureLayer, IGeometry pGeometry,bool bXZQ)
    9.         {
    10.             try
    11.             {
    12.                 if (pFeatureLayer != null && pGeometry != null)
    13.                 {
    14.                     IQueryFilter pQueryFilter;
    15.                     ISpatialFilter pSpatialFilter = new SpatialFilterClass();
    16.                     IFeatureSelection pFeatureSelection = pFeatureLayer as IFeatureSelection;
    17.                     pSpatialFilter.GeometryField = pFeatureLayer.FeatureClass.ShapeFieldName;
    18.                     pFeatureSelection.Clear();                  
    19.                     if (!bXZQ)
    20.                     {
    21.                         pSpatialFilter.Geometry = pGeometry;                      
    22.                         pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
    23.                         pQueryFilter = pSpatialFilter;                       
    24.                         pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, false);
    25.                     }
    26.                     else
    27.                     {
    28.                         pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
    29.                         pQueryFilter = pSpatialFilter;                       
    30.                         if(pGeometry is IGeometryCollection)
    31.                         {
    32.                             for (int i = 0; i < (pGeometry as IGeometryCollection).GeometryCount; i++)
    33.                             {
    34.                                 pSpatialFilter.Geometry = (pGeometry as IGeometryCollection).get_Geometry(i); 
    35.                                 pFeatureSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultAdd, false);
    36.                             }
    37.                         }
    38.                     }                 
    39.                     IFeatureLayerDefinition pFLDefinition = pFeatureLayer as IFeatureLayerDefinition;
    40.                     IFeatureLayer pNewFeatureLayer = pFLDefinition.CreateSelectionLayer(pFeatureLayer.Name ,true, null, null);
    41.                     pNewFeatureLayer.MaximumScale = pFeatureLayer.MaximumScale;
    42.                     pNewFeatureLayer.MinimumScale = pFeatureLayer.MinimumScale;
    43.                     pNewFeatureLayer.Selectable = pFeatureLayer.Selectable;
    44.                     pNewFeatureLayer.Visible = pFeatureLayer.Visible;
    45.                     pNewFeatureLayer.ScaleSymbols = pFeatureLayer.ScaleSymbols;
    46.                     return pNewFeatureLayer;
    47.                 }
    48.                 else
    49.                 {
    50.                     return null;
    51.                 }
    52.             }
    53.             catch (Exception Err)
    54.             {
    55.                 MessageBox.Show(Err.Message, "获取SelectionLayer", MessageBoxButtons.OK, MessageBoxIcon.Information);
    56.                 return null;
    57.             }
    58.         }
    复制代码



     

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


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


    ILayerEffects接口用来设置一个要素图层的透明度,对比度,对比度。以下代码片段演示如何设置要素图层特效:


    1.   /// <summary>
    2.         /// 设置图层特效
    3.         /// </summary>
    4.         /// <param name="pFeatureLayer">要素图层</param>
    5.         /// <param name="brightness">亮度</param>
    6.         /// <param name="contrast">对比度</param>
    7.         /// <param name="transparency">透明度</param>
    8.         private static void SetLayerEffects(IFeatureLayer pFeatureLayer, short brightness, short contrast, short transparency)
    9.         {
    10.             ILayerEffects pLayerEffect = pFeatureLayer as ILayerEffects;
    11.             pLayerEffect.Brightness = brightness;
    12.             pLayerEffect.Contrast = contrast;
    13.             pLayerEffect.Transparency = transparency;
    14.         }
    复制代码

     

    3.2地图布局


    3.2.1PageLayout对象


    PageLayout用以显示地图数据,并通过对地图数据进行整饰以便对地图打印输出满足不同行业对GIS出图功能的需求。PageLayout和Map这两个对象看起来非常相似,它们都是视图对象,可以显示地图;也都是图形元素的容器,可以容纳图形元素(Graphics Element)。但是所能够保存的图形类型却是有差别的。PageLayout除了保存图形元素外,还可以保存诸如MapFrame的框架元素(Frame Element)。PageLayout控件上的Map对象被PageLayout的MapFrame对象所管理的。


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


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


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


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


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


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


    IPageLayout的HorizontalSnapGuides和VerticalSnapGuides属性用以获取SnapGuides对象
    如下图所示:

    image007.png



     


    图4


    3.2.2Page对象

     Page对象主要来管理PageLayout对象中的页面,它用来加载地理数据,但不提供分析和查询功能。Page类的主要接口是IPage,它除了用于管理Page的颜色,尺寸和方向,还可以管理边框类型和打印区域等。例如通过IPage的FromID可以直接设置纸张大小类型(A4,A3等)。 

    3.2.3SnapGrid对象

    SnapGrid是PageLayout上用于摆放元素而设置的辅助点如图所示,这些点有规则呈网状排列,便于使用者对其元素,它可以直接通过IPageLayout的SnapGrid属性获得当前PageLayout使用的SnapGrid对象的引用。

    SnapGrid类主要实现了ISnapGrid接口用于设置SnapGrid对象的属性,ISnapGrid的HorizontalSpacing 和VerticalSpacing属性用于设置网点之间的水平距离和垂直距离,ISnapGrid的Visible属性决定了这些网点是否可见,Draw方法将用于在Page对象上绘制一个SnapGrid对象。

    以下代码片段演示如何在设置PageLayout控件上SnapGrid:

    1.        /// <summary>
    2.         /// 设置PageLayout上SnapGrid
    3.         /// </summary>
    4.         /// <param name="pPageLayout">PangeLayout对象</param>
    5.         private void SetwSnapGridOnPageLayout(IPageLayout pPageLayout)
    6.         {
    7.           
    8.            if(pPageLayout !=null)
    9.            {
    10.            ISnapGrid pSnapGrid=pPageLayout.SnapGrid;
    11.            pSnapGrid.VerticalSpacing =2;
    12.            pSnapGrid.HorizontalSpacing =2;
    13.            pSnapGrid.IsVisible =true;
    14.            IActiveView pActiveView=pPageLayout as IActiveView;
    15.            pActiveView.Refresh();
    16.            }           
    17.     }
    复制代码

    3.2.4SnapGuides对象

     SnapGuides是为了更好的放置地图而在Pagelayout上设置的辅助线如图所示,SnapGuides分为两种类型一种是水平辅助线通过IPageLayout的HorizontalSnapGuides属性获得,另一种是垂直辅助线通过IPageLayout的VerticalSnapGuides属性获得。每个SnapGuides都管理着一个Guide集合,即不同的类型的辅助线可以同时存在多条。

    SnapGuides都实现了ISnapGuides接口,它定义了管理SnapGuide的属性和方法。

    ISnapGuides的AreVisible设定SnapGuides是否可见。

    ISnapGuides的GuideCount属性返回一个SnapGuides对象中的Guide的个数。而使用
    ISnapGuides的Guide属性可以按索引值获得某个具体的Guide对象。

    ISnapGuides的AddGuide方法将一个Guide放在指定位置上。

    ISnapGuides的RemoveAllGuides和RemoveGuide方法分别可以清楚所有的Guide和按索引值清除Guide.

    以下代码片段演示如何为PageLayout对象添加辅助线:

    1.        /// <summary>
    2.         /// 向PageLayout上指定位置添加辅助线
    3.         /// </summary>
    4.         /// <param name="pPageLayout">PageLayout对象</param>
    5.         /// <param name="pPoistion">位置</param>
    6.         /// <param name="bHorizontal">true为水平方向辅助线,False为垂直方向辅助线</param>
    7.         private void AddGuideOnPageLayout(IPageLayout pPageLayout,double pPoistion,bool bHorizontal)
    8.         {
    9.            try
    10.            {
    11.               if(pPageLayout !=null)
    12.               {
    13.                   ISnapGuides pSnapGuides=null;
    14.                   //如果是水平辅助线
    15.                   if(bHorizontal)
    16.                   {
    17.                      pSnapGuides=pPageLayout.HorizontalSnapGuides;
    18.                   }
    19.                   //如果是垂直辅助线
    20.                   else
    21.                   {
    22.                      pSnapGuides=pPageLayout.VerticalSnapGuides; 
    23.                   }
    24.                   if(pSnapGuides!=null)
    25.                   {
    26.                       //向PageLayout上添加辅助线
    27.                      pSnapGuides.AddGuide(pPoistion);
    28.                   }
    29.               }
    30.            }
    31.             catch(Exception Err)
    32.            {
    33.               MessageBox.Show(Err.Message,"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    34.             }
    35. }
    复制代码


    3.2.5RulerSettings对象

    标尺对象是为了辅助图形元素的放置而出现在PageLayout对象上方和左方的辅助尺如图所示,通过IPageLayout的RulerSettings属性可以获得PageLayout上的RulerSettings对象.

    RulerSettings对象主要实现了IRulerSettings接口它只有一个SmallestDivision属性用于设置RulerSettings对象的最小刻度值属性。

    3.2.6Element对象

    在Map对象和PageLayout对象显示的数据除了地理数据之外,另一种即为元素数据如下图5所示。

    image009.png



     


    图5


    Element是一个非常庞大复杂的对象集合如图6所示,它主要分为两大部分:图形元素(GraphicElement)和框架元素(Frame Element)。

    图形元素(GraphicElement)包LineElement, MarkerElement, TextElement, GroupElement, FillshapElement,PictureElement,MultiPatchElement等。它们都是作为图形的形式而存在,在地图视图或者PageLayout视图上时可见的。框架元素(Frame Element)包括MapFrameElement, MapSurroundElement等它们是作为不可见的容器而存在的。

    Map对象或者PageLayout对象可以通过IGraphicsContainer接口来管理这些元素,使用IGraphicsContainer接口可以添加,删除和更新位于Map或PageLayout上的元素。使用GroupElement对象还可以将多个元素编组为单个实体来给用户使用。

    IElement是所有图形元素(GraphicElement)和框架元素(Frame Element)都实现的接口,通过IElement接口可以确定Element对象的Geometry属性,同时IElment接口也提供了用于查找和绘制元素的方法。Element是个抽象类,在开发中必须明确指定使用的Element的类型。另外IElement和ILineElement, ITextElement等并不是父子关系,后者没有Geometry属性。

    image011.png


     


    图6


    3.2.7MapGrid对象

    MapGrid是布局视图中的一系列参考线和参考点用来帮助地图使用者快速地确定地图要素的位置如图7中的公里格网,MapGridBorder,MapGridLabel。MapGrid等。MapGrid对象由MapGrids来管理,一个MapGrids可以包含多个MapGrid对象。


    image013.png

     


     


     


    图7


    MapGrid是一个抽象类,它的子类有MeasuredGrid,IndexGrid,MgrsGrid,Graticule和CustomOverlayGrid五种,这些子类的对象由MapGridFactory对象创建。MapGride对象模型图如图8和图9所示
    image015.png

     


    图8


    image017.png

     


     


    图9


     


    1.           /// <summary>
    2.         /// 为PageLayout对象添加格网对象
    3.         /// </summary>
    4.         /// <param name="pPageLayout"></param>
    5.         private void AddMeasuredGridToPageLayout(IPageLayout pPageLayout)
    6.         {
    7.           try
    8.           {
    9.                //获取MapFrame对象
    10.                 IActiveView pAcitiveView= pPageLayout as IActiveView;
    11.                 IMap pMap = pAcitiveView.FocusMap;                      
    12.                 IGraphicsContainer pGraphicsContainer=pAcitiveView as IGraphicsContainer;
    13.                 IMapFrame pMapFrame = pGraphicsContainer.FindFrame(pMap) as IMapFrame;
    14.                 IMapGrids pMapGrids = pMapFrame as IMapGrids;
    15.                //创建一个MeasuredGrid对象
    16.                 IMeasuredGrid pMeasureGrid = new MeasuredGridClass();
    17.                 IMapGrid  pMapGrid = pMeasureGrid as IMapGrid;
    18.                 pMeasureGrid.FixedOrigin = true;
    19.                 pMeasureGrid.Units = pMap.MapUnits;
    20.                 pMeasureGrid.XIntervalSize = 1000;
    21.                 pMeasureGrid.YIntervalSize = 1000;
    22.                 pMeasureGrid.XOrigin = -180;
    23.                 pMeasureGrid.YOrigin = -90;
    24.                 //设置MeasuredGride投影属性
    25.                 IProjectedGrid pProGrid = pMeasureGrid as IProjectedGrid;
    26.                 pProGrid.SpatialReference = pMap.SpatialReference;
    27.                 pMapGrid.Name = "Measured Grid";
    28.                //创建一个CalibratedMapGridBorder对象并设置为pMapGrid的Border属性
    29.                 ICalibratedMapGridBorder pCalibratedBorder = new CalibratedMapGridBorderClass();
    30.                 pCalibratedBorder.BackgroundColor = GetRgbColor(255, 255, 255);
    31.                 pCalibratedBorder.ForegroundColor = GetRgbColor(0, 0, 0);
    32.                 pCalibratedBorder.BorderWidth = 0.1;
    33.                 pCalibratedBorder.Interval = 72;
    34.                 pCalibratedBorder.Alternating = true;
    35.                 pMapGrid.Border = pCalibratedBorder as IMapGridBorder;
    36.                //创建一个FormattedGridLabel对象
    37.                 IFormattedGridLabel pFormattedGridLabel = new FormattedGridLabelClass();
    38.                 IGridLabel pGridLabel = pFormattedGridLabel as IGridLabel;
    39.                 stdole.StdFont pFont = new stdole.StdFont();
    40.                 pFont.Name = "Arial";
    41.                 pFont.Size = 6;
    42.                 pGridLabel.Font = pFont as stdole.IFontDisp; ;
    43.                 pGridLabel.Color = GetRgbColor(0, 0, 0);
    44.                 pGridLabel.LabelOffset = 4;
    45.                 pGridLabel.set_LabelAlignment(esriGridAxisEnum.esriGridAxisLeft, false);
    46.                 pGridLabel.set_LabelAlignment(esriGridAxisEnum.esriGridAxisRight, false);
    47.                 INumericFormat pNumericFormat = new NumericFormatClass();
    48.                 pNumericFormat.AlignmentOption = esriNumericAlignmentEnum.esriAlignRight;
    49.                 pNumericFormat.RoundingOption = esriRoundingOptionEnum.esriRoundNumberOfSignificantDigits;
    50.                 pNumericFormat.RoundingValue = 0;
    51.                 pNumericFormat.ShowPlusSign = false;                
    52.                 pNumericFormat.ZeroPad = true;
    53.                pFormattedGridLabel.Format = pNumericFormat as INumberFormat;
    54.                 //设置pMapGrid的LabelFormat属性
    55.                 pMapGrid.LabelFormat = pGridLabel;
    56.                //添加格网
    57.                 pMapGrids.AddMapGrid(pMapGrid);
    58.           }
    59.           catch(Exception Err)
    60.           {
    61.              MessageBox.Show(Err.Message,"提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    62.           }
    63.            
    64.         }
    复制代码

     

    3.2.8MapSurround对象


    MapSurround对象是与一个地图对象关联的用于修饰地图的辅助图形元素对象如图所示。它的形状或内容会随着Map属性的变化而自动改变。如Map视图范围改变后比例尺(ScaleBar)也会自动调整比例,比例尺文本(ScaleBarText)也会相应改变它的比例值。


    MapSurround对象由MapSurroundFrame 对象管理,所有的MapSurround对象添加在布局视图上,每一个MapSurround对象可以通过IMap接口的MapSurrounds属性的索引值所获取。也可以通过IMap接口的MapSurroundCount来遍历布局视图上的所有MapSurround对象。


    所有的MapSurround对象都实现IMapSurround接口,使用IMapSurround接口的Name属性可以获得MapSurround对象的名称,通过IMapSurround的FitToBound方法可以设置一个MapSurround对象的大小。


    同时MapSurround类也实现了IMapSurroundEvents接口,可以用来触发MapSounrround相关事件如:AfterDraw,BeforeDraw,ContensChanged。


     


    image019.png

     


    10


    下图是MapSurround对象模型


     


    image021.png

     


    11


    如下代码演示如何为PageLayout添加Legend:


    1. /// <summary>
    2.        /// 为PageLayout对象添加图例对象
    3.        /// </summary>
    4.        /// <param name="pPageLayout">PageLayout对象</param>
    5.        /// <param name="pEnvelope">图例添加的位置</param>
    6.        private void AddLegendToPageLayout(IPageLayout pPageLayout,IEnvelope pEnvelope)
    7.        {
    8.          try
    9.          {
    10.             IActiveView pActiveView=pPageLayout as IActiveView;
    11.             IMap pMap = pActiveView.FocusMap;                      
    12.             IGraphicsContainer pGraphicsContainer=pActiveView as IGraphicsContainer;
    13.             IMapFrame pMapFrame = pGraphicsContainer.FindFrame(pMap) as IMapFrame;
    14.             UID pUID = new UID(); 
    15.             pUID.Value = "{7A3F91E4-B9E3-11d1-8756-0000F8751720}";
    16.             ISymbolBackground pSymbolBackground = new SymbolBackgroundClass();
    17.             IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
    18.             ILineSymbol pLineSymbol = new SimpleLineSymbolClass();
    19.             pFillSymbol.Color = GetRgbColor(255, 255, 255);
    20.             pLineSymbol.Color = GetRgbColor(255, 255, 255);
    21.             pFillSymbol.Outline = pLineSymbol;
    22.             pSymbolBackground.FillSymbol = pFillSymbol;
    23.             IMapSurroundFrame pMapSurroundFrame = pMapFrame.CreateSurroundFrame(pUID, null);
    24.             pMapSurroundFrame.Background = pSymbolBackground;
    25.             IElement pElement = pMapSurroundFrame as IElement;
    26.             pElement.Geometry = pEnvelope;
    27.             IMapSurround pMapSurround = pMapSurroundFrame.MapSurround;
    28.             ILegend pLegend = pMapSurround as ILegend;
    29.             pLegend.ClearItems();
    30.             pLegend.Title = "图例";
    31.             ITextSymbol pTextSymbol = new TextSymbolClass();
    32.             pTextSymbol.Size = 10;
    33.             pTextSymbol.HorizontalAlignment = esriTextHorizontalAlignment.esriTHALeft;
    34.             ILegendItem pLegendItem = null;
    35.             
    36.             for (int i = 0; i < pActiveView.FocusMap.LayerCount; i++)
    37.             {
    38.                 ILayer pLayer = pActiveView.FocusMap.get_Layer(i);
    39.                 if (pLayer is IFeatureLayer)
    40.                 {
    41.                     IFeatureLayer pFLayer = pLayer as IFeatureLayer;
    42.                     IFeatureClass pFeatureClass = pFLayer.FeatureClass;
    43.                     if (pFeatureClass.FeatureType == esriFeatureType.esriFTAnnotation)
    44.                     {
    45.                         continue;
    46.                     }
    47.                     else
    48.                     {
    49.                         pLegendItem = new HorizontalLegendItemClass();
    50.                         pLegendItem.Layer = pLayer;
    51.                         pLegendItem.Columns = 1;
    52.                         pLegendItem.ShowDescriptions = false;
    53.                         pLegendItem.ShowHeading = false;
    54.                         pLegendItem.ShowLabels = true;
    55.                         pLegendItem.LayerNameSymbol = pTextSymbol;
    56.                         pLegend.AddItem(pLegendItem);
    57.                     }
    58.                 }
    59.             }                         
    60.          }        
    61.          catch(Exception Err)
    62.          {
    63.            
    64.          }
    65.        }
    复制代码

     

     

    结果如下图所示:

     


     


    image023.png

     


    12

    展开全文
  • 本章是ArcGIS Engine基础开发教程的第三章,主要给大家大致讲解了,地图和地图布局的相关对象。这些对象非常重要,如果这些基本对象都不熟悉就开始搞ArcGIS Engine开发是不科学的也走不远的。 3地图和地图布局 3.
  • js左右分栏效果,并加载有地图,点击伸缩按钮,实现类似百度地图分栏效果,希望对你有帮助
  • 看一下工作空间下面的一级结点,数据源、地图,下一个是 布局; 新建一个 布局 窗口; 单击 对象绘制 菜单组的 地图 下拉按钮,选择矩形,如下图; 在布局上画一个矩形;弹出对话框让你选择填入此矩形的地图...
  • NULL 博文链接:https://wyknihao.iteye.com/blog/1278101
  • 3.2 地图布局&#13; 3.2.1 PageLayout对象&#13;  PageLayout用于显示地图数据,并通过对地图数据进行整饰以便对地图打印输出满足不同行业对GIS出图功能的需求。 PageLayout和Map这两个对象看起来非常...
  • PageLayout 用以显示地图数据,并通过对地图数据进行整饰以便对地图打印输出满足不同行业对GIS 出图功能的需求。PageLayout 和Map 这两个对象看起来非常相似,它们都是视图对象,可以显示地图;也都是图形元素的容器...
  • 上一节给大家讲解了如何在四边形单元格基础上构建SLG地图场景,并实现移动、战斗的基础框架;热爱SLG的朋友一定非常清楚,绝大多数的SLG游戏地形单元格都可归为四类:四边四向、四边八向和四边六向、六边六向: ...
  • 上一节给大家讲解了如何在四边形单元格基础上构建SLG地图场景,并实现移动、战斗的基础框架;热爱SLG的朋友一定非常清楚,绝大多数的SLG游戏地形单元格都可归为四类:四边四向、四边八向和四边六向、六边六向: ...
  • 【转】CSS实现div的高度填满剩余空间 ...高度自适应问题,我很抵触用js去解决,因为不好维护,也不够自然,但是纯用CSS,难度不小,比如下面我要说的例子。...地图窗口常会遇到类似问题
  • Even though the earth has mostly been the same since those 地图很酷 。 即使自 Pangaea days, we humans make and remake maps constantly. It might be that old maps remind us of how things used to be ...
  • 地图布局效果图: 源码分析: //MapLayer场景数据、UI初始化 bool MapLayer::init() { int w=0; if (wSize.width==1136 && wSize.height==640) { w=497*2-40; } else { w=...
  • 3.1 地图 3.1.1 Map 对象  Map对象:在Map对象上能显示的图形有两类,一类是 地理数据,一类是 元素。 地理数据包括 矢量类型的要素数据、栅格数据、Tin等表面数据等;这些数据都保存在Geodatabase或数据文件如...
  • 上一节给大家讲解了如何在四边形单元格基础上构建SLG地图场景,并实现移动、战斗的基础框架;热爱SLG的朋友一定非常清楚,绝大多数的SLG游戏地形单元格都可归为四类:四边四向、四边八向和四边六向、六边六向:粗看...
  • 上一节给大家讲解了如何在四边形单元格基础上构建SLG地图场景,并实现移动、战斗的基础框架;热爱SLG的朋友一定非常清楚,绝大多数的SLG游戏地形单元格都可归为四类:四边四向、四边八向和四边六向、六边六向: ...
  • jquery 布局中国地图鼠标经过地图区域当前高亮显示。
  • jquery div css布局中国地图鼠标经过地图区域当前高亮 jquery div css布局中国地图鼠标经过地图区域当前高亮

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,741
精华内容 1,096
关键字:

地图布局