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();

 

}

posted on 2013-02-26 12:37  读懂洋字码  阅读(292)  评论(0编辑  收藏  举报