预览加载中,请您耐心等待几秒...
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
ArcGIS中的投影和坐标转换
1ArcGIS中坐标系统的定义
一般情况下地理数据库(如PersonalGeoDatabase的FeatureDataSet、ShapeFile等)在创建时都具有空间参考的属性,空间参考定义了该数据集的地理坐标系统或投影坐标系统,没有坐标系统的地理数据在生产应用过程中是毫无意义的,但由于在数据格式转换、转库过程中可能造成坐标系统信息丢失,或创建数据库时忽略了坐标系统的定义,因此需要对没有坐标系统信息的数据集进行坐标系统定义。
坐标系统的定义是在不改变当前数据集中特征XY值的情况下对该数据集指定坐标系统信息。
操作方法:运行ArcGIS9中的ArcMap,打开ArcToolBox,打开DataManagementTools->ProjectionsandTransformations->DefineProjection项打开坐标定义对话框。介下来在InputDataSetorFeatureClass栏中输入或点击旁边的按钮选择相应的DataSet或FeatureClass;在CoordinateSystem栏中输入或点击旁边的按钮选择需要为上述DataSet或Feature定义的坐标系统。最后点OK键即可。
例如某点状shape文件中某点P的坐标为X112.2Y43.3,且该shape文件没有带有相应的Prj文件,即没有空间参考信息,也不知道XY的单位。通过坐标系统定义的操作定义其为Beijing1954坐标,那么点P的信息是东经112.2度北纬43.3度。
2ArcGIS中的投影方法
投影的方法可以使带某种坐标信息数据源进行向另一坐标系统做转换,并对源数据中的X和Y值进行修改。我们生产实践中一个典型的例子是利用该方法修正某些旧地图数据中X,Y值前加了带数和分带方法的数值。
操作方法:运行ArcGIS9中的ArcMap,打开ArcToolBox,打开DataManagementTools->ProjectionsandTransformations->Feature->Project项打开投影对话框。在InputDataSetorFeatureClass栏中输入或点击旁边的按钮选择相应的DataSet或FeatureClass(带有空间参考),OutputDataSetorFeatureClass栏中输入或点击旁边的按钮选择目标DataSet或FeatureClass,在OutputCoordinateSystem栏中输入或点击旁边的按钮选择目标数据的坐标系统。最后点OK键即可。
例如某点状shape文件中某点P的坐标为X40705012Y3478021,且该shape文件坐标系统为中央为东经120度的高斯克吕格投影,在数据使用过程中为了将点P的值改为真实值X705012Y478021,首先将源数据的投影参数中False_Easting和False_Northing值分别加上40000000和3000000作为源坐标系统,修改参数前的坐标系统作为投影操作的目标坐标系统,然后通过投影操作后生成一新的Shape文件,且与源文件中点P对应的点的坐标为X705012Y478021。
3编程实现坐标转换和投影
3.1矢量数据投影和坐标转换
相关接口
3.1.1IGeometry.Project方法
该方法声明如下:(C#语法)
publicHYPERLINK"javascript:LinkKwd('frlrfSystemVoidClassTopic')"voidProject(
HYPERLINK"javascript:LinkKwd('eaglrfGeometryISpatialReference')"ISpatialReferencenewReferenceSystem
);
该方法对实现Igeoemtry的对象进行投影操作,参数为目标空间参考.以下代码中实现了对Point对象从一个空间参考到另一个空间参考的投影操作:
//CreateSpatialReferenceFactory
ISpatialReferenceFactorysrFactory=newSpatialReferenceEnvironmentClass();
ISpatialReferencesr1;
//GCStoprojectfrom
IGeographicCoordinateSystemgcs=srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983);
sr1=gcs;
sr1.SetFalseOriginAndUnits(-180,-90,1000000);
//ProjectedCoordinateSys