MapXtreme 坐标系统之间转换
CoordSys 对象包含关于 X 和 Y 坐标如何与其在 Earth 上的位置相关联的基本信息。 每个 Geometry 或 Map 对象都有一个关联的坐标系。 CoordSys 对象包含对坐标系的详细说明。 CoordSysFactory 类提供了各种用于创建不同 CoordSys 对象的方法。 所有 CoordSys 对象都是只读的,无法修改。
private void mapControl1_MouseMove(object sender, MouseEventArgs e)
{
System.Drawing.PointF DisplayPoint = new PointF(e.X, e.Y);
MapInfo.Geometry.DPoint MapPoint = new MapInfo.Geometry.DPoint();
MapInfo.Geometry.DisplayTransform converter = this.mapControl1.Map.DisplayTransform;
converter.FromDisplay(DisplayPoint, out MapPoint);
statusStrip1.Items[1].Text = "经纬度:" + MapPoint.x.ToString() + ", " + MapPoint.y.ToString();
//利用坐标转换显示经纬度坐标
CoordSysFactory factory = Session.Current.CoordSysFactory;
//创建Google坐标系统
CoordSys csysGOOGLE = factory.CreateCoordSys("EPSG:3857");
//创建经纬度坐标系统
CoordSys csysLONLAT = factory.CreateCoordSys("EPSG:4326");
//CoordSys csysLONLAT = factory.CreateFromPrjString("1, 104");
//CoordSys csysLONLAT = factory.CreateFromPrjString("1, 0");
// create CoordinateTransform object
CoordinateTransform transform = new CoordinateTransform(csysGOOGLE, csysLONLAT);
// 转换点从Google到经纬度坐标系统
DPoint pntDest = transform.CoordSys1ToCoordSys2(MapPoint);
statusStrip1.Items[2].Text = "转换:" + pntDest.x.ToString() + ", " + pntDest.y.ToString();
//通过计算显示经纬度坐标(特定Google投影)
double lon = (MapPoint.x / 20037508.342789244) * 180.0;
double lat = (MapPoint.y / 20037508.342789244) * 180.0;
lat = 180 / Math.PI * (2 * Math.Atan(Math.Exp(lat * Math.PI / 180.0)) - Math.PI / 2.0);
statusStrip1.Items[3].Text = "计算:" + pntDest.x.ToString() + ", " + pntDest.y.ToString();
}