坐标转化

来源:互联网 发布:苹果商城软件下载 编辑:程序博客网 时间:2024/06/02 15:08
地图的空间参考分为地理坐标和投影坐标。地图有可能没有投影坐标,而只有地理坐标。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();
原创粉丝点击