Arc Engine 中添加气泡提示框

一、在ArcMap中的定位操作

已知若干点的经纬度坐标,要求在地图中进行定位:

1.通过Tool 》Add X Y data 定位点,注意选择地理坐标系下的wgs 1984坐标系;

2.定位后的点不能执行查询、分析等操作,需要重新export data;

3.导出的数据最好转换成投影坐标,以便于计算。可首先把已知投影坐标的图层加载到地图中,然后加入第二步产生的点图层,然后将点图层export data,注意坐标系统选择“the data frame”

二、在ArcObject开发时定位的代码示例

2.1 代码参考1

 private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
        {

            if (i >= 3)//测试目的
                return;
            i++;

            ITextElement te = createTextElement(e.mapX,e.mapY,"魁x");
            axMapControl1.ActiveView.GraphicsContainer.AddElement(te as IElement, 1);
            axMapControl1.Refresh(esriViewDrawPhase.esriViewGraphics, null, null);

        }
        int i;

        public IBalloonCallout createBalloonCallout(double x, double y)
        {
            IRgbColor rgb = new RgbColorClass();
            {
                rgb.Red = 255;
                rgb.Green = 255;
                rgb.Blue = 200;

            }
            ISimpleFillSymbol sfs = new SimpleFillSymbolClass();
            {
                sfs.Color = rgb;
                sfs.Style = esriSimpleFillStyle.esriSFSSolid;
            }

            IPoint p = new PointClass();
            {
                p.PutCoords(x, y);
            }

            IBalloonCallout bc = new BalloonCalloutClass();
            {
                bc.Style = esriBalloonCalloutStyle.esriBCSRoundedRectangle;
                //
                bc.Symbol = sfs;
                //
                bc.LeaderTolerance = 10;
                //1

                bc.AnchorPoint = p;
            }

            return bc;
        }

        public ITextElement createTextElement(double x, double y, string text)
        {
            IBalloonCallout bc = createBalloonCallout(x, y);

            IRgbColor rgb = new RgbColorClass();
            {
                //rgb.Red = 255;
                rgb.Green = 255;
            }
            ITextSymbol ts = new TextSymbolClass();
            {
                ts.Color = rgb;
            }

            IFormattedTextSymbol fts = ts as IFormattedTextSymbol;
            {
                fts.Background = bc as ITextBackground;
            }
            //fts.Size = 8;
            ts.Size = 8;

            IPoint point = new PointClass();
            {
                double width = axMapControl1.Extent.Width / 13;
                double height = axMapControl1.Extent.Height / 20;
                point.PutCoords(x + width, y + height);
            }

            ITextElement te = new TextElementClass();
            //IMarkerElement me = new MarkerElementClass();
            {
                te.Symbol = ts;
                //ts.Text = text;
                te.Text = text;
            }

            IElement e = te as IElement;
            {
                e.Geometry = point;
            }
            return te;

        }
    }

2.2 地图中添加label以标注地图

有多种方法:

1.使用TextElement

2.使用Label属性或与lyr文件或mxd文件结合进行标注

3.使用AnnotateLayerPropertiesCollection对象进行复杂标注

其中,第二种方法的代码为:

    private void AddLabel2Map(string strField)
           {
               IGeoFeatureLayer pGeoFeatureLayer;
               ILineLabelPosition pLineLabelPosition;
               ILabelEngineLayerProperties pLabelEngineLayerProperties;
               IAnnotateLayerProperties pAnnotateLayerProperties;  

               pGeoFeatureLayer = (IGeoFeatureLayer)pMapControl.get_Layer(0);
               pGeoFeatureLayer.AnnotationProperties.Clear();  

               pLineLabelPosition = new LineLabelPositionClass();
               pLineLabelPosition.Above = false;
               pLineLabelPosition.AtEnd = false;
               pLineLabelPosition.Below = false;
               pLineLabelPosition.Horizontal = false;
               pLineLabelPosition.InLine = true;
               pLineLabelPosition.OnTop = true;
               pLineLabelPosition.Parallel = true;
               pLineLabelPosition.ProduceCurvedLabels = true;  

               pLabelEngineLayerProperties = new LabelEngineLayerPropertiesClass();
               pLabelEngineLayerProperties.Symbol = new TextSymbolClass();
               pLabelEngineLayerProperties.IsExpressionSimple = true;
               pLabelEngineLayerProperties.Expression = "[" + strField + "]";//需要中括号
               pLabelEngineLayerProperties.BasicOverposterLayerProperties.LineLabelPosition = pLineLabelPosition;  

               pAnnotateLayerProperties = (IAnnotateLayerProperties)pLabelEngineLayerProperties;
               pAnnotateLayerProperties.DisplayAnnotation = true;
               pAnnotateLayerProperties.FeatureLayer = pGeoFeatureLayer;  

               pAnnotateLayerProperties.LabelWhichFeatures = esriLabelWhichFeatures.esriAllFeatures;
               pAnnotateLayerProperties.WhereClause = "";  

               pGeoFeatureLayer.AnnotationProperties.Add(pAnnotateLayerProperties);
               pGeoFeatureLayer.DisplayAnnotation = true;
               pMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
           }  

这种方法的一个简化是,在ArcMap中事先设定好图层标记的属性,保存为mxd或lyr文件,程序中只使用

pGeoFeatureLayer.DisplayAnnotation和pGeoFeatureLayer.DisplayField设定显示的字段以及是否显示。

在ArcMap中设定的一些细节为:

1.设定标记是否重复、是否每个图元一个标记、或每个图元的每一部分都有一个标记,如图:

2.如何设定label只保留两位小数,如图:

还可以设置其他更为丰富的格式。

参考文章

1. 风过 无痕.arcEngine经典代码-添加气泡提示框(标注,文本,). 2008-8.

2. 丛晓男. 在地图中添加label以标注地图. 2010-6.

时间: 2024-12-25 19:27:34

Arc Engine 中添加气泡提示框的相关文章

MFC中添加ToolTip提示框

PART 1 MFC 对话框中的 Buttton添加提示 例如我们想在一个对话框中的一个button控件添加tooltip,实现的方法如下: 1. 在该对话框的类中添加一个CToolTipCtrl类型成员,并在适当的地方将其初始化如下: m_ToolTipCtrl.Create(this); m_ToolTipCtrl.AddTool(GetDlgItem(IDC_BUTTON1), _T("This is ToolTip")); m_ToolTipCtrl.SetMaxTipWidt

纯CSS实现的气泡提示框

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <html> <head> <meta charset=&quo

ArcGIS Engine中添加点、线、面元素

转自原文ArcGIS Engine中添加点.线.面元素 //画点 IPoint pt = axMapControl1.ToMapPoint(e.x, e.y); IMarkerElement pMarkerElement = new MarkerElementClass(); IElement pElement = pMarkerElement as IElement; pElement.Geometry = pt; IGraphicsContainer pGraphicsContainer =

可自定义配置箭头的CSS3气泡提示框

今天我们要来分享一款基于纯CSS的气泡提示框,和之前分享的一款jQuery消息提示框插件Tipso类似,整个提示框由箭头和矩形框组成,并且气泡提示框的箭头可以有不同的方向.这款CSS气泡提示框由纯CSS完成,最大的特点就是可以自定义配置,包括文字颜色.背景颜色和箭头方向等.效果图如下: 在线预览   源码下载 实现的代码. css代码: .arrow_box { position: relative; background: #88b7d5; border: 4px solid #c2e1f5;

LinkButton中添加删除确认框

LinkButton1.Attributes.Add("onclick", "javascript:return confirml('确认删除?');"); LinkButton中添加删除确认框

NPOI操作Excel 004:写入空Excel(添加保存提示框)

前文说道写入excel的样例,当中保存Excle后须要添加提示框.让用户自己选择保存路径,做改动例如以下. 引用的dll等前面已经说过了, 直接看代码: protected void Btn_WriteExcel(object sender, EventArgs e) { //要保存的内容,此处用代码生成的内容.而在实际中能够是数据库读取的, //亦或是页面输入的内容 DataTable dt = new DataTable(); dt.Columns.Add("序号"); dt.Co

(RPA学习)使用多线程点击 VBA 运行中的消息提示框

艺赛旗RPA全面免费下载中点击下载http://www.i-search.com.cn/index.html?from=line27 业务场景使用 win32com 运行 Excel 中的宏运算(VBA),会遇到 VBA 运行的最后一步会弹出消息提示框,需点击这个消息提示框之后,VBA 才能运行结束,所以在运行 VBA 之后加入 Try 组件去点击时无法点击的,所以考虑使用多线程来实现. 流程代码import ubpa.iautomation as iautomationimport threa

UWP中的消息提示框(一)

不管什么平台,应用内难免会出现一些消息提示框,下面就来聊聊我在UWP里用到的消息提示框. 弹窗也可按是否需要用户操作促发一些逻辑进行分为两大类. 不需要用户干涉的一类: MessageDialog:操作简单,写起来也省事,想具体了解的请参考MSDN 先看看效果 PC上效果: mobile上效果: 再看看代码(●'?'●) 前台: <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" >

js 中如何通过提示框跳转页面

通过提示框跳转页面 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <script> 9 window.onload = function(){ //设置当页面加载时执行 1