坐标转化

地图的空间参考分为地理坐标和投影坐标。地图有可能没有投影坐标,而只有地理坐标。Beijing_1954_3_Degree_GK_CM_1215EProjection: Gauss_KrugerFalse_Easting: 100000.000000False_Northing: -3100000.000000Central_Meridian: 121.500000Scale_Factor: 1.000000Latitude_Of_Origin: 0.000000Linear Unit: MeterGCS_Beijing_1954Datum: D_Beijing_1954上面是地图数据的参考信息。IProjectedCoordinateSystem prj = axMapControl1.Map.SpatialReference as IProjectedCoordinateSystem;            if(prj != null)//需要判断是否存在            {                string sss= prj.CoordinateUnit.Name;//取得Linear Unit: Meter        //prj.GeographicCoordinateSystem投影坐标可以取得里面的地理坐标            WKSPoint pnt = new WKSPoint();            pnt.X = e.mapX; //这里mapx坐标是米            pnt.Y = e.mapY;            prj.Inverse(1,ref pnt); //转化为地理坐标经纬度,forward是相反的转化            }另一个世界地图sample的数据GCS_WGS_1984Datum: D_WGS_1984axMapControl1.Map.SpatialReference取得名字GCS_WGS_1984如何转化为平面坐标呢?因为没有投影坐标,所以这里可以自己创建一个投影坐标                      ISpatialReferenceFactory2 spatRefFact = new SpatialReferenceEnvironmentClass();            IProjectedCoordinateSystem ProjectedCoordinateSystem = spatRefFact.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_World_Mollweide);            IProjectedCoordinateSystem prj = axMapControl1.Map.SpatialReference as IProjectedCoordinateSystem;                  方法1:   /*            WKSPoint pnt = new WKSPoint();                pnt.X = e.mapX;//坐标是经纬度                pnt.Y = e.mapY;                ProjectedCoordinateSystem.Forward(1, ref pnt);    //转为平面坐标                            label1.Text = pUnitConverter.ConvertUnits(pnt.X, esriUnits.esriMeters, esriUnits.esriKilometers).ToString();*/方法2                IPoint point = new PointClass();                //Set the points x and y coordinates                point.PutCoords(e.mapX, e.mapY);                //Set the points spatial reference - WHERE the point is coming FROM                point.SpatialReference = axMapControl1.Map.SpatialReference;//设置点的地理坐标是经纬度GCS_WGS_1984                //Project the point onto the displays current spatial reference - WHERE the point is going TO                point.Project(ProjectedCoordinateSystem);// 投影到Mollweide坐标系 IUnitConverter pUnitConverter = new UnitConverterClass();             //转化为公里                  label1.Text = pUnitConverter.ConvertUnits(pnt.X, esriUnits.esriMeters, esriUnits.esriKilometers).ToString();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值