【转】ArcGIS投影转换与坐标转换

摘要:
1.1ArcGIS中的投影方法投影方法使具有特定坐标信息的数据源能够转换为另一个坐标系,并修改源数据中的X和Y值。操作方法:在ArcGIS9中运行ArcMap,打开ArcToolBox,打开DataManagementTools-˃Projections and Transformations-˃Feature-˃Project,打开投影对话框。坐标系的定义是将坐标系信息分配给数据集,而不改变当前数据集的特征XY值。

1 ArcGIS中的投影方法(从一种投影转换成另一种投影;在已有投影的情况才能用;有些转换限制)

投影的方法可以使带某种坐标信息数据源进行向另一坐标系统做转换,并对源数据中的X和Y值进行修改。我们生产实践中一个典型的例子是利用该方法修正某些旧地图数据中X,Y值前加了带数和分带方法的数值。

操作方法:运行ArcGIS9中的ArcMap,打开ArcToolBox,打开 Data Management Tools ->Projections and Transformations->Feature->Project 项 打开投影对话框。

【转】ArcGIS投影转换与坐标转换第1张

在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。

2 ArcGIS中坐标系统的定义(在没有投影的图层中定义投影系统)

一般情况下地理数据库(如Personal GeoDatabase的 Feature DataSet 、Shape File等)在创建时都具有空间参考的属性,空间参考定义了该数据集的地理坐标系统或投影坐标系统,没有坐标系统的地理数据在生产应用过程中是毫无意义的,但由于在数据格式转换、转库过程中可能造成坐标系统信息丢失,或创建数据库时忽略了坐标系统的定义,因此需要对没有坐标系统信息的数据集进行坐标系统定义。

坐标系统的定义是在不改变当前数据集中特征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度。

3  编程实现坐标转换和投影

3.1 矢量数据投影和坐标转换

相关接口

3.1.1 IGeometry.Project方法

该方法声明如下

public void Project (

ISpatialReference newReferenceSystem

);

该方法对实现Igeoemtry的对象进行投影操作, 参数为目标空间参考.以下代码中实现了对Point对象从一个空间参考到另一个空间参考的投影操作:

//Create Spatial Reference Factory

   ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironmentClass(); 字串9

   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方法提供的投影操作实现了最基本的坐标转换功能. 实际数据处理过程中, 比较明确数据转换前后空间参考信息情况下一般用此方法作坐标转换,不同投影带之间的坐标转换就是一个典型. 字串9

3.1.2 ITransform2D接口

ITransform2D接口不仅提供了图形平移, 旋转和缩放,还提供了更加强大的坐标转换方法Transform. 其定义如下:(C#语法)

public void Transform (

esriTransformDirection direction,

ITransformation transformation 字串2

);

在该方法中, 参数direction是转换方向, transformation是一个Itransformation接口, 而Itransformation接口由很多类实现,这意味着不同的实现类,所包含的坐标转换数学公式是不一的, 这里面包括二次多项式转换(AffineTransformation2D), AbridgedMolodensky转换(AbridgedMolodenskyTransformation)等。每一种实现类的转换方法这里不再赘述,可参照ArcObjects联机帮助获得更详细的信息,下面举例来说明该方法的使用:(Delphi 代码)

procedure Transform_(FromPtColl, ToPtColl: IPointCollection; pGeo as IGeometry); 字串3

var

pAffineTransformation2D: IAffineTransformation2D;

ControlPtCnt: integer;

FormPtArray: array of IPoint;

ToPtArray: array of IPoint;

i: integer;

pTransform2D: ITransform2D;

begin

//判断给定的控制点是否合法 字串5

if FromPtColl.PointCount <> ToPtColl.PointCount then

begin

//控制点不成对错误

exit;

end;

if FromPtColl.PointCount < 4 then

begin

//控制点不能少于4个

exit;

end;

ControlPtCnt := FromPtColl.PointCount; 字串6

SetLength(FormPtArray, ControlPtCnt);

SetLength(ToPtArray, ControlPtCnt); 字串8

for i := 0 to ControlPtCnt -1 do

begin

FormPtArray[i] := CoPoint.Create as IPoint; 字串9

FormPtArray[i].PutCoords(FromPtColl.Point[i].X,  FromPtColl.Point[i].Y); 字串9

ToPtArray[i] := CoPoint.Create as IPoint;

ToPtArray[i].PutCoords(ToPtColl.Point[i].X,  ToPtColl.Point[i].Y); 字串4

end;

//创建  AffineTransformation2D 对象

pAffineTransformation2D := CoAffineTransformation2D.Create as IAffineTransformation2D;  字串8

//设置控制点信息

pAffineTransformation2D.DefineFromControlPoints(ControlPtCnt, FormPtArray[0], ToPtArray[0]);  字串1

//转到ITransform2D接口

pTransform2D := pGeo as ITransform2D; 字串1

//坐标转换

pTransform2d.Transform(esriTransformForward, pAffineTransformation2D);

end;

ITransform接口较Igeoemtry提供了更加丰富的坐标转换方法。

3.2 影像数据纠正。

影像数据纠正可以通过IrasterGeometryProc接口实现。该接口提供了影像Clip, Filp, Merge, Mirror以及Mosaic等操作。如果通过控制点的方式对影像进行纠正处理可以通过该接口的wrap方法。该方法声明如下:(C#语法)

public void Warp (

IPointCollection sourceControlPoints,

IPointCollection targetControlPoints,

esriGeoTransTypeEnum transformType,

IRaster ipRaster

);

参数 sourceControlPoints和targetControlPoint定义了控制点信息, transformType定义了坐标转换方法, ipRaster是需要转换的Raster对象. 以下代码是该接口使用的例子:

public static void GeoreferenceRaster(IRasterDataset2 rasterDataset, IPointCollection sourcePoints, IPointCollection targetPoints)

{

//this sample show how to georeference a raster using control points

// sourcePoints: represents source control points

// targetPoints: represents target control points  IRasterGeometryProc rasterPropc = new RasterGeometryProcClass();

IRaster raster = rasterDataset.CreateDefaultRaster();  //set the transformatin

rasterPropc.Warp(sourcePoints, targetPoints, esriGeoTransTypeEnum.esriGeoTransPolyOrder1, raster);  //There are two ways to get the georeferenced result: to save the transformation with the input raster dataset

rasterPropc.Register(raster);  //or save to another new raster dataset

rasterPropc.Rectify(@"c:\temp\georeferencing_output.img", "IMAGINE Image", raster); 字串3

}

免责声明:文章转载自《【转】ArcGIS投影转换与坐标转换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在线浏览PDF文件并直接定位到某页面sqlplus客户端 navicat 使用sqlplus OCI下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

arcengine动态显示所需字段值

需求:实现和GIS桌面端中Identify的类似功能,鼠标滑动的时候可以显示鼠标所在位置的要素的指定字段的值.。 主要操作流程: ①先打开一个对话框,用于选择需要显示的图层和字段名 ②点击确定之后,在mapControl上鼠标滑动的时候利用axMapControl的showTips功能实现实时显示,相对于Identify,取消的点击查看属性,和只能查看所有...

利用Nginx做反向代理搭建ArcGIS 10.1 for Server集群环境

  搭建GIS Server集群环境时,通常不建议在GIS Server之间设置防火墙;而建议在服务器环境的前端设置反向代理来隐藏服务器环境的真实地址及端口,保险起见可将反向代理放入DMZ区(前后都设置防火墙),增加安全性。   ArcGIS 10.1 for Server做出的架构改进使得我们在搭建GIS服务器集群环境时更加容易和省心;Nginx因其高性...

arcgis api的三种查询实现

1. 引言 FindTask:Search a map service exposed by the ArcGIS Server REST API based on a string value. The search can be conducted on a single field of a single layer, on many fields...

CAD数据导入Arcgis10.1的依赖关系

这段时间在做基于Arcgis10.1API处理AutoCAD图纸数据并将处理后的数据坐标转换为xml文件,以便于在开发的项目中使用。通过这段时间的开发总结以下问题希望能对童鞋有所帮助: 1、遇到CAD格式的数据有非法的数据时(比如无法正常识别的点、线、面)就不能通过arcgis层面去处理,要在cad本身去做处理通过AutoCAD的相关命令对模型进行处理。...

ArcGIS for Sever 10.1 服务迁移与恢复

=== 声明:以下内容本是自己写给单位内部同事的参考手册,但是被传到百度文库中。陆续有用户就这方面的问题,通过电话,邮件等方式联系我。首先,感到荣幸。其次是,由于本人当时测试和编写的时候,由于仓促,可能有存在着缺陷的地方。如果大家在实际的工作中,按照这个方式出现问题或者想和我交流的话,请在该文章下面留言,尽量回复大家。最后,个人不代表单位,也不代表官方。...

ArcMap 4 完全卸载ArcGIS

本文提供两种完全卸载ArcGIS的方法 方法一:文字版 1、开始>控制面板>添加删除程序,卸载所有ArcGIS软件和帮助文档,以及所有ArcGIS补丁。 2、从添加删除程序面板中删除所有Python相关的应用程序。 3、进入到如下目录:C:UsersUserNameAppDataRoaming,删除ESRI文件夹。(用搜索工具,把ESRI文件夹...