地图的空间参考分为地理坐标和投影坐标。地图有可能没有投影坐标,而只有地理坐标。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();
坐标转化
最新推荐文章于 2016-10-31 19:59:32 发布