1 ArcGIS中坐标系统的定义 坐标系统的定义是在不改变当前数据集中特征X Y值的情况下对该数据集指定坐标系统信息。 操作方法:运行ArcGIS9中的ArcMap,打开ArcToolBox,打开 Data Management Tools ->Projections and Transformations->Define Projection 项打开坐标定义对话框。介下来在Input DataSet or Feature Class栏中输入或点击旁边的按钮选择相应的DataSet或Feature Class;在Coordinate System栏中输入或点击旁边的按钮选择需要为上述DataSet或Feature定义的坐标系统。最后点OK键即可。 例如 某点状shape文件中 某点P的坐标为 X 112.2 Y 43.3 ,且该shape文件没有带有相应的Prj文件,即没有空间参考信息,也不知道X Y 的单位。通过坐标系统定义的操作定义其为Beijing1954坐标,那么点P的信息是东经112.2度 北纬43.3度。 2 ArcGIS中的投影方法 操作方法:运行ArcGIS9中的ArcMap,打开ArcToolBox,打开 Data Management Tools ->Projections and Transformations->Feature->Project 项打开投影对话框。在Input DataSet or Feature Class栏中输入或点击旁边的按钮选择相应的DataSet或Feature Class(带有空间参考),Output DataSet or Feature Class栏中输入或点击旁边的按钮选择目标DataSet或Feature Class,在Output Coordinate System 栏中输入或点击旁边的按钮选择目标数据的坐标系统。最后点OK键即可。 例如 某点状shape文件中 某点P的坐标为 X 40705012 Y 3478021 ,且该shape文件坐标系统为中央为东经120度的高斯克吕格投影,在数据使用过程中为了将点P的值改为真实值X 705012 Y478021,首先将源数据的投影参数中False_Easting和False_Northing值分别加上40000000和3000000作为源坐标系统,修改参数前的坐标系统作为投影操作的目标坐标系统,然后通过投影操作后生成一新的Shape文件,且与源文件中点P对应的点的坐标为X 705012 Y478021。 3 编程实现坐标转换和投影 3.1.1 IGeometry.Project方法 public void Project ( ISpatialReference newReferenceSystem ); 该方法对实现Igeoemtry的对象进行投影操作, 参数为目标空间参考.以下代码中实现了对Point对象从一个空间参考到另一个空间参考的投影操作: //Create Spatial Reference Factory ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironmentClass(); ISpatialReference sr1; //GCS to project from IGeographicCoordinateSystem gcs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983); sr1 = gcs; sr1.SetFalseOriginAndUnits(-180, -90, 1000000); //Projected Coordinate System to project into IProjectedCoordinateSystem pcs = srFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_NAD1983N_AmericaLambert); pcs.SetFalseOriginAndUnits(0, 0, 1000); ISpatialReference sr2; sr2 = pcs; //Point to project IPoint point = new PointClass() as IPoint; point.PutCoords(-117.17, 34.06); //Geometry Interface to do actual project IGeometry geometry; geometry = point; geometry.SpatialReference = sr1; geometry.Project(sr2); point = geometry as IPoint; double x; double y; point.QueryCoords(out x, out y); Debug.Print("X: " + x.ToString()); Debug.Print("Y: " + y.ToString()); IGeometry接口的Project方法提供的投影操作实现了最基本的坐标转换功能. 实际数据处理过程中, 比较明确数据转换前后空间参考信息情况下一般用此方法作坐标转换,不同投影带之间的坐标转换就是一个典型. 3.1.2 ITransform2D接口 public void Transform ( 在该方法中, 参数direction是转换方向, transformation是一个Itransformation接口, 而Itransformation接口由很多类实现,这意味着不同的实现类,所包含的坐标转换数学公式是不一的, 这里面包括二次多项式转换(AffineTransformation2D), AbridgedMolodensky转换(AbridgedMolodenskyTransformation)等。每一种实现类的转换方法这里不再赘述,可参照ArcObjects联机帮助获得更详细的信息,下面举例来说明该方法的使用:(Delphi 代码) procedure Transform_(FromPtColl, ToPtColl: IPointCollection; pGeo as IGeometry); 3.2 影像数据纠正。 public void Warp ( 参数 sourceControlPoints和targetControlPoint定义了控制点信息, transformType定义了坐标转换方法, ipRaster是需要转换的Raster对象. 以下代码是该接口使用的例子: public static void GeoreferenceRaster(IRasterDataset2 rasterDataset, IPointCollection sourcePoints, IPointCollection targetPoints) 此外, 使用IrasterGeometryProc.Wrap方法, 会略微改变影像图的色彩值, 当对一幅影像图前后转换作对比时会发现这种色彩的变化情况. 个人认为,ArcGIS对影像图的处理功能较其他一些专业影像处理软件来讲,还是稍显逊色了些. |