ArcGIS中的投影和坐标转换及编程实现
作者:郭胜涛 文章来源:南京凯图科技有限责任公司 点击数:6297 更新时间:2007-10-18
摘要:一般情况下地理数据库(如Personal GeoDatabase的 Feature DataSet 、Shape File等)在创建时都具有空间参考的属性,空间参考定义了该数据集的地理坐标系统或投影坐标系统,但由于在数据格式转换、转库过程中可能造成坐标系统信息丢失,或创建数据库时忽略了坐标系统的定义,因此需要对没有坐标系统信息的数据集进行坐标系统定义。
ArcGIS中的投影和坐标转换
1 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度。
2 ArcGIS中的投影方法
投影的方法可以使带某种坐标信息数据源进行向另一坐标系统做转换,并对源数据中的X和Y值进行修改。我们生产实践中一个典型的例子是利用该方法修正某些旧地图数据中X,Y值前加了带数和分带方法的数值。
操作方法:运行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 矢量数据投影和坐标转换
相关接口
3.1.1 IGeometry.Project方法
该方法声明如下: (C#语法)
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接口
ITransform2D接口不仅提供了图形平移, 旋转和缩放,还提供了更加强大的坐标转换方法Transform. 其定义如下:(C#语法)
public void Transform (
esriTransformDirection direction,
ITransformation transformation
);
在该方法中, 参数direction是转换方向, transformation是一个Itransformation接口, 而Itransformation接口由很多类实现,这意味着不同的实现类,所包含的坐标转换数学公式是不一的, 这里面包括二次多项式转换(AffineTransformation2D), AbridgedMolodensky转换(AbridgedMolodenskyTransformation)等。每一种实现类的转换方法这里不再赘述,可参照ArcObjects联机帮助获得更详细的信息,下面举例来说明该方法的使用:(Delphi 代码)
procedure Transform_(FromPtColl, ToPtColl: IPointCollection; pGeo as IGeometry);
var
pAffineTransformation2D: IAffineTransformation2D;
ControlPtCnt: integer;
FormPtArray: array of IPoint;
ToPtArray: array of IPoint;
i: integer;
pTransform2D: ITransform2D;
begin
//判断给定的控制点是否合法
if FromPtColl.PointCount <> ToPtColl.PointCount then
begin
//控制点不成对错误
exit;
end;
if FromPtColl.PointCount < 4 then
begin
//控制点不能少于4个
exit;
end;
ControlPtCnt := FromPtColl.PointCount;
SetLength(FormPtArray, ControlPtCnt);
SetLength(ToPtArray, ControlPtCnt);
for i := 0 to ControlPtCnt -1 do
begin
FormPtArray[i] := CoPoint.Create as IPoint;
FormPtArray[i].PutCoords(FromPtColl.Point[i].X, FromPtColl.Point[i].Y);
ToPtArray[i] := CoPoint.Create as IPoint;
ToPtArray[i].PutCoords(ToPtColl.Point[i].X, ToPtColl.Point[i].Y);
end;
//创建 AffineTransformation2D 对象
pAffineTransformation2D := CoAffineTransformation2D.Create as IAffineTransformation2D;
//设置控制点信息
pAffineTransformation2D.DefineFromControlPoints(ControlPtCnt, FormPtArray[0], ToPtArray[0]);
//转到ITransform2D接口
pTransform2D := pGeo as ITransform2D;
//坐标转换
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);
}
需要注意的是当选择不同的转换类型时(参数transformType取值不同时), 对控制点的对数也有不同的要求. 这个可以参照联机帮助中的详细说明.
此外, 使用IrasterGeometryProc.Wrap方法, 会略微改变影像图的色彩值, 当对一幅影像图前后转换作对比时会发现这种色彩的变化情况.
个人认为,ArcGIS对影像图的处理功能较其他一些专业影像处理软件来讲,还是稍显逊色了些.
分享到:
相关推荐
ArcGIS是一款由美国环境...这些知识点涵盖了坐标转换的基本概念、主要方法以及在ArcGIS中实现转换的常用工具和策略,并提示了在转换过程中需要注意的事项。希望这些知识点能够对读者理解ArcGIS中的坐标转换提供帮助。
本文将详细讲解如何使用ArcGIS这一强大的GIS软件进行坐标投影转换,并涉及与之相关的C#编程知识。 首先,理解坐标投影转换的重要性。地球是一个三维球体,但在地图上通常将其表示为二维平面,这就需要进行坐标投影...
1. ArcGIS Desktop:这是ArcGIS的主要桌面应用程序,其中的“数据管理”工具箱包含了“投影和坐标系统”的工具,可以实现坐标转换。 2. ArcToolbox:这是一个集成的工具集,其中的“数据管理”->“坐标系统”工具...
转换过程中会考虑到地理坐标系统、投影参数等,确保转换后的数据精确无误。 3. **批量提取值至点**:这个功能允许用户从栅格数据中提取特定点的值,例如从DEM(数字高程模型)中获取地形高度。这在环境分析、地形...
从标题和描述中我们了解到,我们需要在ArcGIS 10.1及以上版本中使用特定的坐标转换工具来完成工作。 1. **坐标系统**:在GIS中,坐标系统用于定义地球上任何位置的精确地理位置。常见的坐标系统有WGS84(全球定位...
在地理信息系统(GIS)中,坐标转换是一个至关重要的概念,特别是在全球范围内进行定位和数据分析时。本文将深入探讨“经纬度”与“WGS84投影坐标”之间的转换,以及如何实现这种转换。 经纬度是一种球面坐标系统,...
同时,开发者也可以利用开源库(如GDAL、PROJ等)进行更底层的坐标转换编程。 总的来说,GIS坐标系、投影和转换是地理空间信息科学中的关键技术,它们决定了数据的精度和适用性。理解和掌握这些知识,对于进行有效...
通过这一系列设计和实现过程,可以看出坐标转换在地球物理数据处理解释系统中的重要性和复杂性。该功能的实现不仅满足了当前航空物探领域的实际需求,而且对于未来可能的全球数据处理也具备良好的适应性和扩展性。...
若地图中已包含其他坐标系的数据,可以使用“投影”工具或“数据框属性”中的“坐标系”选项进行坐标系转换。 接着,我们探讨如何进行坐标定位。在ArcGIS中,有多种方法可以实现坐标输入定位: 1. **添加点图层**...
编程实现坐标转换和投影可以通过使用 ArcGIS 提供的 API 实现。例如使用 C# 语法,可以使用 IGeometry.Project 方法对实现 IGeometry 的对象进行投影操作,参数为目标空间参考。 代码实例如下: ``` //Create ...
5. 调整投影参数和屏幕坐标转换,观察不同设置对显示效果的影响。 通过这样的学习和实践,你将能够更好地理解和掌握屏幕坐标与地理坐标之间的转换,这对于从事GIS(地理信息系统)开发、游戏开发或任何与地理位置...
ArcGIS坐标转换说明文档可能涵盖了如何在ArcGIS中执行这种转换,而在Python中,`pyproj`库可以用于此类转换。 5. **Python编程**:代码示例可能展示了如何使用Python读取TIFF数据,将其与SHP文件叠加,并生成可视化...
这一步可能需要编程实现,比如使用Python的shapely和geopandas库,或者ArcGIS的ArcPy模块,将几何对象转换为文本格式。 5. **格式化输出**:确保转换后的TXT文件符合报备的格式要求,这可能包括特定的字段顺序、...
在IT领域,坐标系转换和坐标转换是...总之,"坐标系转换_坐标转换_源码.zip"这个资源对于学习和实现坐标转换的程序员来说非常宝贵,它可能包含了解决实际问题的代码示例,有助于理解坐标转换的原理并将其应用于项目中。
3. **自定义坐标系**:ArcGIS允许用户选择不同的投影坐标系,工具3_1可能支持多种坐标系之间的转换,比如从UTM到经纬度,或者从地方坐标系到全球坐标系。 4. **批处理功能**:考虑到文件名为"xtools3_1",这可能...
总结来说,PDA墨卡托坐标投影转换是地理定位和导航中的关键技术,它通过数学方法将地球表面的复杂形状转化为平面上的简单图形,使得在PDA这样的小型设备上实现精确导航成为可能。了解并掌握这种投影转换,对于GIS...
在实际操作中,可以使用GIS软件(如ArcGIS、QGIS)或编程语言(如Python的pyproj库)来实现这些转换。具体代码实现可能因软件或库的不同而有所差异,但基本原理相同。 文件“大地坐标转换为空间直角坐标”可能是...
本文将详细介绍如何通过IDL编程语言实现遥感影像从WGS84坐标系批量转换到CGCS2000的3度带坐标系的过程。 #### WGS84与CGCS2000简介 - **WGS84**(World Geodetic System 1984):全球广泛使用的地理坐标系统,用于...