隨筆-348  評(píng)論-598  文章-0  trackbacks-0

          添加相應(yīng)工具

                      //添加自定義測(cè)量距離
                      mapControl.Tools.Add("DistanceTool"new CustomPolylineMapTool(truetruetrue, mapControl.Viewer, mapControl.Handle.ToInt32(), mapControl.Tools, mapControl.Tools.MouseToolProperties, mapControl.Tools.MapToolProperties));

                      
          //添加自定義測(cè)量面積
                      mapControl.Tools.Add("AreaTool"new CustomPolygonMapTool(truetruetrue, mapControl.Viewer, mapControl.Handle.ToInt32(), mapControl.Tools, mapControl.Tools.MouseToolProperties, mapControl.Tools.MapToolProperties));

          在工具條上添加相應(yīng)的按鈕,并捕捉當(dāng)前按鈕
                  /// <summary>
                  
          /// 當(dāng)點(diǎn)擊工具欄上的按鈕時(shí)
                  
          /// </summary>
                  
          /// <param name="sender"></param>
                  
          /// <param name="e"></param>

                  private void mapToolBar_ButtonClick(object sender, ToolBarButtonClickEventArgs e)
                  
          {
                      
          try {
                          
          string btnName = e.Button.Name;
                          
          switch (btnName)
                          
          {
                              
          case "toolBarButtonDistanceTool"://當(dāng)點(diǎn)擊“測(cè)量距離”按鈕時(shí)
                                  mapControl.Tools.LeftButtonTool = CustomMapTools.DistanceTool;
                                  
          break;
                              
          case "toolBarButtonAreaTool"://當(dāng)點(diǎn)擊“測(cè)量面積”按鈕時(shí)
                                  mapControl.Tools.LeftButtonTool = CustomMapTools.AreaTool;
                                  
          break;
                              
          case "toolBarButtonFullScreen":
                                  SetFullScreen(
          true);
                                  
          break;
                              
          case "toolBarButtonNormalScreen":
                                  SetFullScreen(
          false);
                                  
          break;
                              
          case "toolBarButtonMapEye":
                                  SetViewMenuItemChecked(eyeUserMapControl, 
          !鷹眼欄ToolStripMenuItem.Checked);
                                  
          break;
                              
          default:
                                  
          break;

                          }

                      }
          catch(Exception ex) {
                          GlobalHelper.ShowError(ex.Message);
                      }

                  }

          當(dāng)鼠標(biāo)移到地圖上的時(shí)候,相應(yīng)功能開始工作
                  /// <summary>
                  
          /// 當(dāng)選擇相應(yīng)工具在地圖控件上進(jìn)行操作時(shí)
                  
          /// </summary>
                  
          /// <param name="sender"></param>
                  
          /// <param name="e"></param>

                  private void Tools_Used(object sender, MapInfo.Tools.ToolUsedEventArgs e)
                  
          {
                      
          try
                      
          {
                          
          switch (e.ToolName)
                          
          {
                              
          //測(cè)量距離
                              case CustomMapTools.DistanceTool:
                                  
          switch (e.ToolStatus)
                                  
          {
                                      
          case ToolStatus.Start:
                                          dblDistance 
          = 0;
                                          dptStart 
          = e.MapCoordinate;
                                          
          break;
                                      
          case ToolStatus.InProgress:
                                          dblDistance 
          += CoordSys.Distance(DistanceType.Spherical, map.Zoom.Unit, map.GetDisplayCoordSys(), dptStart, e.MapCoordinate);
                                          SetStatusStripMessage(
          "總長(zhǎng)度為:" + string.Format("{0:F3}", dblDistance) + " " + CoordSys.DistanceUnitAbbreviation(map.Zoom.Unit).ToString());
                                          dptStart 
          = e.MapCoordinate;
                                          
          break;
                                      
          case ToolStatus.End:
                                          dblDistance 
          += CoordSys.Distance(DistanceType.Spherical, map.Zoom.Unit, map.GetDisplayCoordSys(), dptStart, e.MapCoordinate);
                                          SetStatusStripMessage(
          "總長(zhǎng)度為:" + string.Format("{0:F3}", dblDistance) + " " + CoordSys.DistanceUnitAbbreviation(map.Zoom.Unit).ToString());
                                          map.Invalidate(
          true);
                                          
          break;
                                      
          default:
                                          
          break;
                                  }

                                  
          break;
                              
          //測(cè)量面積
                              case CustomMapTools.AreaTool:
                                  
          switch (e.ToolStatus)
                                  
          {
                                      
          case ToolStatus.Start:
                                          arrlstPoints.Clear();
                                          dptFirstPoint 
          = e.MapCoordinate;
                                          arrlstPoints.Add(e.MapCoordinate);
                                          
          break;
                                      
          case ToolStatus.InProgress:
                                          arrlstPoints.Add(e.MapCoordinate);
                                          
          break;
                                      
          case ToolStatus.End:
                                          
          //構(gòu)造一個(gè)閉合環(huán)
                                          arrlstPoints.Add(e.MapCoordinate);
                                          
          int intCount = arrlstPoints.Count;
                                          
          if (intCount <= 3)
                                          
          {
                                              SetStatusStripMessage(
          "請(qǐng)畫3個(gè)以上的點(diǎn)形成面來(lái)測(cè)量你所要的面積");
                                              
          return;
                                          }

                                          DPoint[] dptPoints 
          = new DPoint[intCount];
                                          
          for (int i = 0; i <= intCount - 1; i++)
                                          
          {
                                              dptPoints[i] 
          = (DPoint)arrlstPoints[i];

                                          }

                                          dptPoints[intCount 
          - 1= dptFirstPoint;

                                          
          //用閉合的環(huán)構(gòu)造一個(gè)面        
                                          AreaUnit costAreaUnit;
                                          costAreaUnit 
          = CoordSys.GetAreaUnitCounterpart(map.Zoom.Unit);
                                          CoordSys objCoordSys 
          = this.map.GetDisplayCoordSys();
                                          Polygon objPolygon 
          = new Polygon(objCoordSys, CurveSegmentType.Linear, dptPoints);
                                          
          //if (objPolygon == null)
                                          
          //    return;
                                          SetStatusStripMessage("總面積為:" + string.Format("{0:F3}", objPolygon.Area(costAreaUnit)) + "  " + CoordSys.AreaUnitAbbreviation(costAreaUnit));
                                          map.Invalidate(
          true);
                                          
          break;
                                      
          default:
                                          
          break;
                                  }

                                  
          break;
                              
          //可以添加其他的用戶自定義Tool
                              default:
                                  
          break;
                          }

                      }

                      
          catch (Exception Ex)
                      
          {
                          GlobalHelper.ShowError(
          "測(cè)量錯(cuò)誤:" + Ex.Message.ToString());
                      }
                      
                  }


          ---------------------------------------------------------
          專注移動(dòng)開發(fā)

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2008-02-25 14:30 TiGERTiAN 閱讀(2639) 評(píng)論(3)  編輯  收藏 所屬分類: DotNet 、MapXtreme

          評(píng)論:
          # re: Mapxtreme 添加自定義工具,測(cè)量距離,測(cè)量面積等等 2010-02-22 13:27 | eee
          您好,請(qǐng)問(wèn)CustomMapTools是命名空間嗎?需要引用那個(gè)呢  回復(fù)  更多評(píng)論
            
          # re: Mapxtreme 添加自定義工具,測(cè)量距離,測(cè)量面積等等 2010-02-22 14:12 | TiGERTiAN
          @eee
          是一個(gè)類或枚舉的名稱  回復(fù)  更多評(píng)論
            
          # re: Mapxtreme 添加自定義工具,測(cè)量距離,測(cè)量面積等等 2011-01-26 10:52 | 東方未明
          好文章,幫大忙了,頂一下!
          此外,CustomMapTools我也不太清楚樓主是什么意思,好像MapXtream中沒(méi)有此命名空間或類,我采用下面的調(diào)用方法也可以正常工作:
          mapControl.Tools.LeftButtonTool = "DistanceTool"; // MapControl mapControl  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 玉环县| 广昌县| 仁寿县| 杭州市| 天台县| 昌江| 靖西县| 临西县| 瓦房店市| 仙居县| 宁海县| 海丰县| 桂阳县| 黎平县| 井研县| 凉城县| 乌什县| 和田市| 景泰县| 万全县| 芷江| 城步| 宣汉县| 安达市| 久治县| 普格县| 福鼎市| 阿拉善右旗| 乐昌市| 曲周县| 安化县| 东光县| 泰安市| 大方县| 时尚| 梨树县| 三亚市| 永靖县| 鸡东县| 石台县| 佳木斯市|