ArcEngine+C#二次开发GIS 如何获得鼠标当前指的点的经纬度信息 ? 5
利用Mapcontrol控件加载了一幅地图想在状态栏中显示鼠标移动时所指的点的经纬度位置。看书上状态栏获取位置代码如下CoordinateLabel.Text="当前坐标...
利用Mapcontrol控件加载了一幅地图 想在状态栏中显示鼠标移动时 所指的点的经纬度位置。
看书上状态栏获取位置代码如下
CoordinateLabel.Text = "当前坐标 X =" + e.mapX.ToString() + " Y = " + e.mapY.ToString() ;
但是获取的不是经纬度。求大神指导。 展开
看书上状态栏获取位置代码如下
CoordinateLabel.Text = "当前坐标 X =" + e.mapX.ToString() + " Y = " + e.mapY.ToString() ;
但是获取的不是经纬度。求大神指导。 展开
2个回答
展开全部
你这里的代码显示的坐标是直接从地图获取的六七位的平面坐标,要转换为经纬度坐标,肯定需要坐标系的转换啊,在地图控件的点击事件中写如下代码:
private void axMapControl1_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
{
//当前比例尺
barStaticItem1.Caption = " 1:" + ((long)axMapControl1.MapScale).ToString() + " ";
IProjectedCoordinateSystem pcs = this.axMapControl1.SpatialReference as IProjectedCoordinateSystem;
//定义点
WKSPoint pt = new WKSPoint(); //不能用IPoint pt = new PointClass();因为后面的方法只支持WKSPoint
pt.X = e.mapX;
pt.Y = e.mapY;
double d1, n1, m1, L1, d2, n2, m2, L2;
pcs.Inverse(1, ref pt); //将平面坐标转换为地理坐标
d1 = pt.X / 1;//度的整数部分
n1 = pt.X % 1;//度的小数部分
m1 = (n1 * 60) / 1;//分
L1 = ((n1 * 60) % 1) * 60;//秒
d2 = pt.Y / 1;//纬度的整数部分
n2 = pt.Y % 1;//度的小数部分
m2 = (n2 * 60) / 1;//分
string m22;
if (m2 < 10)
m22 = "0" + m2.ToString();
else
m22 = m2.ToString();
L2 = ((n2 * 60) % 1) * 60;//秒
try
{
barEditItem_X.EditValue = d1.ToString().Remove(3) + "°" + m1.ToString().Remove(2) + " '" + L1.ToString().Remove(6) + "\"" + "E ";
barEditItem_Y.EditValue = d2.ToString().Remove(2) + "°" + m22.Remove(2) + " '" + L2.ToString().Remove(6) + "\"" + "N ";
}
catch (Exception)
{
barEditItem_X.EditValue = "0";
barEditItem_Y.EditValue = "0";
}
}
注意:这里的barEditItem_X之类的是状态栏显示坐标的文本控件,换成自己的即可。
满意请采纳!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
估计你的地图坐标系不是经纬度的。要么,你地图坐标系换一下,要么,把当前点做投影。
追问
请问如何转换呢 需要代码转换还是简单设置 刚接触 不太懂啊
追答
设投影比较简单,软件操作一下即可;做点投影的话,有相应的接口。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询