1.程序的状态栏一般用来显示程序的当前状态,及当前所使用的工具。 GIS 应用程序一般也在状态栏(右下角)显示当前光标的坐标、比例尺等信息。
显示效果如下:
2.主要运用的是【工具箱】中的【所有window窗体】的【StatusStrip】:
将其拖动至Form窗体内的边角就行了
3.然后右键调出MapControld的属性:(友情提示:先右击上边空白处调出属性窗口,再点击MapControld的地方)
点击【事件】就是那个小闪电
双击【OnMouseMove】
进入函数编辑界面,下面是显示坐标的代码(两种类型):
1.
private string GetMapUnit(esriUnits _esriMapUnit)
{
string sMapUnits = string.Empty;
switch (_esriMapUnit)
{
case esriUnits.esriCentimeters:
sMapUnits = "厘米";
break;
case esriUnits.esriDecimalDegrees:
sMapUnits = "十进制";
break;
case esriUnits.esriDecimeters:
sMapUnits = "分米";
break;
case esriUnits.esriFeet:
sMapUnits = "尺";
break;
case esriUnits.esriInches:
sMapUnits = "英寸";
break;
case esriUnits.esriKilometers:
sMapUnits = "千米";
break;
case esriUnits.esriMeters:
sMapUnits = "米";
break;
case esriUnits.esriMiles:
sMapUnits = "英里";
break;
case esriUnits.esriMillimeters:
sMapUnits = "毫米";
break;
case esriUnits.esriNauticalMiles:
sMapUnits = "海里";
break;
case esriUnits.esriPoints:
sMapUnits = "点";
break;
case esriUnits.esriUnitsLast:
sMapUnits = "UnitsLast";
break;
case esriUnits.esriUnknownUnits:
sMapUnits = "未知单位";
break;
case esriUnits.esriYards:
sMapUnits = "码";
break;
default:
break;
}
return sMapUnits;
}
//下面的是双击后创建的OnMouseMove的函数
private void axMapControl1_OnMouseMove(object sender, AxESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
{
sMapUnits = GetMapUnit(mainMapControl.Map.MapUnits);
barCoorTxt.Text = String.Format("当前坐标:X = {0:#.###} Y = {1:#.###} {2}", e.mapX, e.mapY, sMapUnits);
pMovePt = (mainMapControl.Map as IActiveView).ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);
}
2.第二种加了个比例尺【ScaleLabel】,第一种也能加(在【OnMouseMove】的主函数里面添加代码:ScaleLabel.Text = "比例尺1:" + ((long)this.axMapControl1.MapScale).ToString();就行。)
private string sMapUnits;
private void axMapControl1_OnMouseMove(object sender, AxESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
{
// 显示当前坐标
barCoorTxt.Text = "当前坐标 X=" + e.mapX.ToString() + " Y = " + e.mapY.ToString() + " " + sMapUnits;
ScaleLabel.Text = "比例尺1:" + ((long)this.axMapControl1.MapScale).ToString();
}
private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e)
{
//修改坐标显示的单位名称
ESRI.ArcGIS.esriSystem.esriUnits mapUnits = axMapControl1.MapUnits;
switch (mapUnits)
{
case ESRI.ArcGIS.esriSystem.esriUnits.esriCentimeters:
sMapUnits = "Centimeters";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriDecimalDegrees:
sMapUnits = "Decimal Degrees";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriDecimeters:
sMapUnits = "Decimeters";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriFeet:
sMapUnits = "Feet";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriInches:
sMapUnits = "Inches";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriKilometers:
sMapUnits = "Kilometers";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriMeters:
sMapUnits = "Meters";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriMiles:
sMapUnits = "Miles";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriMillimeters:
sMapUnits = "Millimeters";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriNauticalMiles:
sMapUnits = "NauticalMiles";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriPoints:
sMapUnits = "Points";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriUnknownUnits:
sMapUnits = "Unknown";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriYards:
sMapUnits = "Yards";
break;
}
}
4.然后关于比例尺【ScaleLabel.text】和当前坐标显示【barCoorTxt.Text 】需要在右键下面的【statusStrip】进入【编辑项】
可以修改其(Name)比例尺【ScaleLabel】和当前坐标显示【barCoorTxt】
以及修改文本: