C#举行MapX二次开发之控件基本操作

上篇介绍了MapX的一些骨干使用代码,包涵加大、缩短、缩放到起来大小(全图)、平移、矩形选取、圆形接纳、箭头、打开图层对话框
、打开ActiveX属性对话框
、添加符号等基本操作代码,本篇继续探索一些控件的基本操作。

图片 1 

MapX提供的业内工具,不相同的工具将会使鼠标可以成功各种职分。例如,若是当前的工具设成
miLabelTool,那么当单击鼠标时,会在此特指的地图对象上放置标签。鼠标光标将依据正利用的工具更改形状。MapX 可用的标准工具列表如下所示:

 工具

常量

描述

 Add Line

MiAddLineTool

向插入图层添加线图元

 Add Point

MiAddPointTool

单击从而向插入图层添加点图元。

 Add Polyline

MiAddPolyLineTool

添加折线图元到插入图层。

 Add Region

MiAddRegionTool

添加区域图元到插入图层。

 Arrow

MiArrowTool

单击标题或注释。并且,它也可用在可编辑的图层中移动选中的图元或者改变其大小。

 Center

MiCenterTool

单击鼠标使地图居中显示。

 Label

miLabelTool

单击图元进行标注。

 Pan

MiPanTool

拖动地图并重定位地图的中心。

 Polygon Select

MiPolygonSelectTool

单击鼠标画多边形;在多边形内的对象被选中。

 Radius Select

MiRadiusSelectTool

拖动鼠标并选中在拖动半径内的图元。

 Rect Select

MiRectSelectTool

拖动鼠标选中在矩形内的图元。

 Select Tool

miSelectTool

单击选择图元。

 Symbol

miSymbolTool

放置符号注释。

 Text

miTextTool

放置文本注释。

 Zoom In

miZoomInTool

放大。

 Zoom Out

miZoomOutTool

缩小。

==========================

 

导出地图为图片的操作代码:

            if (axMap1.GeoSet.Length < 1)
            {
                MessageBox.Show(“未加载地图,不只怕导出!”);
                return;
            }
            SaveFileDialog exportFD = new SaveFileDialog();
            exportFD.Title = “导出当前地图”;
            exportFD.Filter = “windows bitmap(*.bmp)|*.bmp|GIF (*.GIF)|*.gif|JPEG (*.JPG;JPEG;JPE)|*.JPG|PNG (*.PNG)|*.PNG|PSD (*.PSD)|*.PSD|TIFF (*.TIF)|*.TIF”;
            if (exportFD.ShowDialog() == DialogResult.OK && (exportFD.FileName) != null)
            {
                try
                {
                    axMap1.ExportSelection = true;
                    switch (exportFD.FilterIndex)
                    {
                        case 1:
                            axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatBMP, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
                            break;
                        case 2:
                            axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatGIF, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
                            break;
                        case 3:
                            axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatJPEG, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
                            break;
                        case 4:
                            axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatPNG, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
                            break;
                        case 5:
                            axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatPSD, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
                            break;
                        case 6:
                            axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatTIF, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
                            break;
                        case 7:
                            axMap1.ExportMap(exportFD.FileName, MapXLib.ExportFormatConstants.miFormatWMF, axMap1.MapPaperWidth, axMap1.MapPaperHeight);
                            break;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

 

添加图层的操作代码 

            OpenFileDialog openFile = new OpenFileDialog();
            if (openFile.ShowDialog() == DialogResult.OK)
            {
                axMap1.Layers.Add(openFile.FileName, 0);//暗许值为0,C#调用不可以省略专擅认同值,图层的职责
                MapXLib.LayerInfo liinfo;
                liinfo = new MapXLib.LayerInfoClass();
                liinfo.Type = MapXLib.LayerInfoTypeConstants.miLayerInfoTypeTab;

                liinfo.AddParameter(“AutoCreateDataset”, true);
            }

 

摸索图元新闻:

            MapXLib.Features mX;
            mX = this.axMap1.Layers[1].AllFeatures;
            this.listView1.Items.Clear();

            foreach (MapXLib.Feature mY in mX)
            {
                ListViewItem mZ = new ListViewItem(mY._FeatureID.ToString());
                mZ.SubItems.Add(mY.Name.ToString());
                this.listView1.Items.Add(mZ);
            }

 

搜索图层消息 

            MapXLib.Layers mX;
            mX = this.axMap1.Layers;
            this.listView1.Items.Clear();

            foreach (MapXLib.Layer mY in mX)
            {
                ListViewItem mZ = new ListViewItem(mY._Name);
                this.listView1.Items.Add(mZ);
            }

 

得到鼠标移动的坐标

            double x = 0;
            double y = 0;

            axMap1.ConvertCoord(ref e.x, ref  e.y, ref x, ref y, MapXLib.ConversionConstants.miScreenToMap);
            toolStripStatusLabel1.Text = string.Format(“X:{0} Y:{1}”, x, y);

 

 放置点工具操作

            try
            {
                MapXLib.Layer mX;
                mX = this.axMap1.Layers[1];
                mX.Editable = true;
                this.axMap1.Layers.InsertionLayer = mX;
                this.axMap1.CurrentTool = MapXLib.ToolConstants.miAddPointTool;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

 

MapX自定义工具的行使:

如若急需一种
MapX 没有提供的工具栏按钮,可以采纳 Map.CreateCustomTool 方法来成立自定义工具。创设自定义工具时,须求控制创建工具的“类型”,即:就是要挑选此工具是还是不是同意用户单击,或是单击并拖动来画线,或是单击并拖动来画矩形等等。也足以选取使用自定义工具时彰显的光标。 

下边是自定义测量相差和测量面积的操作代码 

        private void Form1_Load(object sender, EventArgs e)
        {
            //记录地图的比例合中央点
            this.MapZoom = axMap1.Zoom;
            this.CenterX = axMap1.CenterX;
            this.CenterY = axMap1.CenterY;

            //创制测量相差的
            axMap1.CreateCustomTool(99, MapXLib.ToolTypeConstants.miToolTypePoly, MapXLib.CursorConstants.miCrossCursor,
                MapXLib.CursorConstants.miCrossCursor, MapXLib.CursorConstants.miCrossCursor, false);

            //创建测量面积的工具
            axMap1.CreateCustomTool(98, MapXLib.ToolTypeConstants.miToolTypePolygon, MapXLib.CursorConstants.miCrossCursor,
                MapXLib.CursorConstants.miCrossCursor, MapXLib.CursorConstants.miCrossCursor, false);

        }

        private void axMap1_PolyToolUsed(object sender, AxMapXLib.CMapXEvents_PolyToolUsedEvent e)
        {
            if (e.toolNum == 99)//测量相差
            {
                MapXLib.Points pts = (MapXLib.Points)e.points;
                MapXLib.Point pt1, pt2;
                double d = 0.0;

                //总计顺序几个点距离,累计得到总距离
                for (int i = 1; i < pts.Count; i++)
                {
                    pt1 = pts[i];
                    pt2 = pts[i + 1];
                    d += axMap1.Distance(pt1.X, pt1.Y, pt2.X, pt2.Y);
                }

                this.Text = “距离:” + d.ToString();
            }
            else if (e.toolNum == 98)//面积
            {
                MapXLib.Points pts = (MapXLib.Points)e.points;
                //偷懒了而是很不错
                MapXLib.FeatureFactory dd = axMap1.FeatureFactory;
                MapXLib.Style style = axMap1.DefaultStyle;
                this.Text = “面积:” + dd.CreateRegion(pts, style).Area.ToString();
            }
        }

        private void btnGetDistance_Click(object sender, EventArgs e)
        {
            //测量距离
            axMap1.CurrentTool = (MapXLib.ToolConstants)99;
        }

        private void btnGetArea_Click(object sender, EventArgs e)
        {
            //测量面积
            axMap1.CurrentTool = (MapXLib.ToolConstants)98;
        }

 

如上代码有一个是事件操作,就算没有运用事件映射的操作,那么要添加上面的代码:

 this.axMap1.PolyToolUsed += new
AxMapXLib.CMapXEvents_PolyToolUsedEventHandler(this.axMap1_PolyToolUsed);

自定义工具类型的ToolTypeConstants 描述当创造一个自定义工具时可利用的工具类型。它们描述工具的作为(例如,miToolTypeLine 使用户可以画线;miToolTypeCircle 使用户可以画圆等)。自定义工具创设将来,须求为该工具实际要做的编制代码。

 常量

行为

 miToolTypePoint

在指定位置显示点。

 miToolTypeLine

画线。

 miToolTypeCircle

画圆。

 miToolTypeMarquee

画选取框,并选在此框中选择地图对象。

 miToolTypePoly

画折线。

 miToolTypePolygon

画多边形。

 

 

相关文章