hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

ArcGIS Engine增加舆图元素的完成

2019-11-18杂谈搜奇网26°c
A+ A-

在ArcGIS中,我们运用的制图控件除了MapControl以外,另有PageLayoutControl,用于页面规划和制图,生成一幅制品舆图

PageLayoutControl 封装了PageLayout对象,供应规划视图中掌握元素的属性和要领,个中包括图形的位置属性、标尺和对齐网格的设置,以及肯定页面显如今屏幕上的要领。

我们将实如今规划视图下的增加图例、指北针、比例尺和文本的操纵

 

增加舆图元素

 

/// <summary>
/// 增加舆图元素
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 增加舆图元素ToolStripMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    //消除数据视图下不能插进去
    if (tabControl1.SelectedIndex == 0)
    {
        return;
    }
    //运用UID辨认操纵敕令
    UID uid = new UIDClass();
    if (e.ClickedItem.Text != "")
    {
        //e是鼠标操纵所返回的对象, 携带了相干的操纵信息
        switch (e.ClickedItem.Text)
        {
            case "图例":
                //定义好UID的款式为Carto.legend
                uid.Value = "ESRICarto.legend";
                //挪用自定义要领AddElementInpageLayer, 下同
                AddElementInPageLayer(uid);
                break;
            case "指北针":
                //定义好UID的款式为Carto.MarkerNorthArrow
                uid.Value = "ESRICarto.MarkerNorthArrow";
                AddElementInPageLayer(uid);
                break;
            case "比例尺":
                //定义好UID的款式为ESRICarto.ScaleLine ??
                AddScalebar(axPageLayoutControl1.PageLayout, axPageLayoutControl1.ActiveView.FocusMap);
                break;
            case "文本":
                TextInput txtInput = new TextInput();
                txtInput.ShowDialog();
                //挪用自定义要领到场图名
                AddTextElement(axPageLayoutControl1, txtInput.Fontsize, txtInput.ThimaticMapName);
                break;
            default:
                break;
        }
    }
}

 

 

1、图例或指北针

 

/// <summary>
/// 增加图例或指北针——依据UID元素增加响应的元素
/// </summary>
/// <param name="uid"></param>
private void AddElementInPageLayer(UID uid)
{
    //供应对掌握图形容器的成员的接见。
    IGraphicsContainer graphicsContainer = axPageLayoutControl1.PageLayout as IGraphicsContainer;
    //供应对成员的接见, 掌握map元素的对象, IMapFrame是舆图阅读栏对象的默许接口
    //经由过程FindFrame要领, 查找axPageLayoutControl1中屏幕包括指定对象的框架
    IMapFrame mapFrame = graphicsContainer.FindFrame(axPageLayoutControl1.ActiveView.FocusMap) as IMapFrame;
    //供应对成员的接见, 掌握舆图围绕元素映照的接口, 是附属物框架的对象的默许接口
    //经由过程CreateSurroundFrame要领建立基于当前舆图框下的一个新舆图围绕元素(如图例、指北针)
    IMapSurroundFrame mapSurroundFrame = mapFrame.CreateSurroundFrame(uid, null);
    //IElement是一切图形元素和框架元素类都要完成的接口
    //将mapSurroundFrame强转成IElement范例
    IElement element = mapSurroundFrame as IElement;
    //实例化一个包络线
    IEnvelope envelope = new EnvelopeClass();
    //设定坐标
    envelope.PutCoords(1, 1, 2, 2);
    //设置元素中的多少外形
    element.Geometry = envelope;
    try
    {
        //供应对掌握图例的成员的接见。
        ILegend legend = (ILegend)mapSurroundFrame.MapSurround;
        legend.Title = "图例";
    }
    catch
    { }
    graphicsContainer.AddElement(element, 0);
    //设置元素将在axPageLayoutControl屏幕上显现图形
    element.Activate(axPageLayoutControl1.ActiveView.ScreenDisplay);
    //部份革新
    axPageLayoutControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
}

 

 

2、比例尺

/// <summary>
/// 增加比例尺
/// </summary>
/// <param name="pageLayout"></param>
/// <param name="map"></param>
private void AddScalebar(IPageLayout pageLayout, IMap map)
{
    if (pageLayout == null || map == null)
    {
        return;//当pageLayerout和map为空时返回
    }
    //实例化一个包络线
    IEnvelope envelope = new EnvelopeClass();
    //设定坐标
    envelope.PutCoords(1, 1, 3, 2);
    //实例化一个uid
    IUID uid = new UIDClass();
    //将uid设置为ESRICarto.scalebar
    uid.Value = "ESRICarto.scalebar";
    //供应对掌握图形容器的成员的接见
    IGraphicsContainer graphicsContainer = pageLayout as IGraphicsContainer;
    //查找map中指定对象的框架
    IMapFrame mapFrame = graphicsContainer.FindFrame(map) as IMapFrame;
    //建立基于当前舆图框下的一个新舆图围绕元素
    IMapSurroundFrame mapSurroundFrame = mapFrame.CreateSurroundFrame(uid as UID, null);
    //元素属性
    IElementProperties pElePro;
    //实例化一个比例尺对象
    IScaleBar markerScaleBar = new AlternatingScaleBarClass();
    //能够有多种比例尺范例
    markerScaleBar.Division = 2;
    markerScaleBar.Divisions = 2;
    markerScaleBar.LabelPosition = esriVertPosEnum.esriAbove;
    markerScaleBar.Map = map;
    markerScaleBar.Subdivisions = 2;
    markerScaleBar.UnitLabel = "";
    markerScaleBar.UnitLabelGap = 4;
    markerScaleBar.UnitLabelPosition = esriScaleBarPos.esriScaleBarAbove; //位于比例尺上方
    markerScaleBar.Units = esriUnits.esriKilometers; //千米
    mapSurroundFrame.MapSurround = markerScaleBar;
    //将mapSurroundFrame强转为IElementProperties
    pElePro = mapSurroundFrame as IElementProperties;
    //设置元素Name属性
    pElePro.Name = "my scale";
    //增加元素至axPageLayoutControl1
    axPageLayoutControl1.AddElement(mapSurroundFrame as IElement, envelope, Type.Missing, Type.Missing, 0);
    //部份革新
    axPageLayoutControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, Type.Missing, null);
}

 

3、文本

/// <summary>
/// 增加文本
/// </summary>
/// <param name="axPageLayoutControl1">目的PageLayoutControl的Name属性</param>
/// <param name="fontsize">字体尺寸</param>
/// <param name="thimaticMapName">图名</param>
private void AddTextElement(AxPageLayoutControl axPageLayoutControl1, decimal fontsize, string thimaticMapName)
{
    //建立PageLayout对象
    IPageLayout pPageLayout = axPageLayoutControl1.PageLayout;
    //将PageLayout强转成IActiveView
    IActiveView pAV = (IActiveView)pPageLayout;
    //将PageLayout强转成IGraphicsContainer
    IGraphicsContainer graphicsContainer = (IGraphicsContainer)pPageLayout;
    //实例化文本元素
    ITextElement pTextElement = new TextElementClass();
    //实例化字体元素
    IFontDisp pFont = new StdFontClass() as IFontDisp;
    pFont.Bold = true;
    pFont.Name = "宋体";
    pFont.Size = fontsize;
    //实例化IRgbColor
    IRgbColor pColor = new RgbColorClass();
    pColor.Red = 0;
    pColor.Green = 0;
    pColor.Blue = 0;
    //实例化文本标记
    ITextSymbol pTextSymbol = new TextSymbolClass();
    pTextSymbol.Color = (IColor)pColor;
    pTextSymbol.Font = pFont;
    //赋值元素文本和标记
    pTextElement.Text = thimaticMapName;
    pTextElement.Symbol = pTextSymbol;
    //实例化一个点
    IPoint pPoint = new PointClass();
    pPoint.X = 1;
    pPoint.Y = 1;
    //实例化一个元素
    IElement pElement = (IElement)pTextElement;
    pElement.Geometry = (IGeometry)pPoint;
    graphicsContainer.AddElement(pElement, 0);
    //真正完成部份革新
    pAV.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
}

 

中心AddElementInPageLayer(UID uid)函数总结:

 感谢寓目!本人初学GIS二次开发,如果有不对的处所,请多多见谅!

 

 

 

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
ArcGIS Engine增加舆图元素的完成

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282254.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>