zoukankan      html  css  js  c++  java
  • C#进行MapX二次开发之控件基本操作

    上篇介绍了MapX的部分基本使用代码,包括放大、缩小、缩放到初始大小(全图)、平移、矩形选择、圆形选择、箭头、打开图层对话框 、打开ActiveX属性对话框 、添加符号等基本操作代码,本篇继续探讨一些控件的基本操作。

     

    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

    画多边形。

     

    主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
    专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
  • 相关阅读:
    Android开发经验一判断当前屏幕是全屏还是非全屏
    Android得到控件在屏幕中的坐标
    MyBatis简单的增删改查以及简单的分页查询实现
    Coreseek:第二步建索引及測试
    极静之渊
    统计电影票房排名前10的电影并存入还有一个文件
    AAA
    FreeLink开源呼叫中心设计思想
    树后台数据存储(採用webmethod)
    [乐意黎原创] 百度统计这个坑爹货
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/1511563.html
Copyright © 2011-2022 走看看