添加相應(yīng)工具
//添加自定義測(cè)量距離
mapControl.Tools.Add("DistanceTool", new CustomPolylineMapTool(true, true, true, mapControl.Viewer, mapControl.Handle.ToInt32(), mapControl.Tools, mapControl.Tools.MouseToolProperties, mapControl.Tools.MapToolProperties));

//添加自定義測(cè)量面積
mapControl.Tools.Add("AreaTool", new CustomPolygonMapTool(true, true, true, 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)功能開(kāi)始工作

/**//// <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)開(kāi)發(fā)
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2008-02-25 14:30
TiGERTiAN 閱讀(2633)
評(píng)論(3) 編輯 收藏 所屬分類:
DotNet 、
MapXtreme