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对影像图的处理功能较其他一些专业影像处理软件来讲,还是稍显逊色了些.

转载于:https://www.cnblogs.com/zany-hui/articles/1272568.html

ArcGIS中的投影和坐标转换相关推荐

  1. ArcGIS中的投影、定义投影及动态投影

    ArcGIS中的投影.定义投影及动态投影 在用arcgis进行坐标转换或投影变换时,我们常常会有疑问:什么时候该用投影.什么时候该用定义投影.什么时候又用动态投影? 一.定义投影与投影 简单来说,定义 ...

  2. 【ArcGIS风暴】何为动态投影?这次全面为您揭开ArcGIS中动态投影的神秘面纱!

    本课程配套蓝光视频: [ArcGIS风暴]GIS动态投影问题 GISer们都见过以下警告,该警告的原因是当前加载的数据的坐标系和当前数据框坐标系不一致导致的,核心问题是地理坐标系不一致.如当前数据的坐 ...

  3. ArcGIS中CGCS2000投影坐标数据转CGCS2000地理坐标数据

    拿到一批数据是CGCS2000投影坐标数据(单位:米),需要转成CGCS2000地理坐标数据(单位:经纬度). 在ArcGIS10.2.2中操作如下: 1.工具箱中选择"Project&qu ...

  4. 在ESRI ArcGIS中使用Lamberts保形圆锥投影提高生产率,以进行空间数据管理

    介绍 (Introduction) 本文旨在帮助使用ESRI ArcGIS和其他空间信息管理系统的GIS(地理信息系统)和GPS(全球定位系统)开发人员. For the uninitiated th ...

  5. ARCGIS中坐标转换及地理坐标、投影坐标的定义

    原文地址:http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或 ...

  6. ARCGIS中坐标转换及地理坐标、投影坐标的定义(转载)

    转自http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或是说坐 ...

  7. (转)ARCGIS中坐标转换及地理坐标、投影坐标的定义

    原文地址:http://blog.sina.com.cn/s/blog_663d9a1f01017cyz.html 1.动态投影(ArcMap) 所谓动态投影指,ArcMap中的Data 的空间参考或 ...

  8. 手持gps坐标转换参数求解方法及在excel中的实现_分享∣Arcgis中62个常用技巧系列二(21-40技巧)...

    二十一.融合后全部打散 ArcToolbox-> 数据管理 -> 属性 ->mergemultipart to singlepart 二十二.图层 关系处理 ArcToolbox-& ...

  9. 我国常用的投影坐标系_【干货】arcgis中坐标系问题详解

    地理空间的数学基础是空间分析的基准,在GIS中,所有的空间数据都要划归到统一的空间参考下才可以进行进一步的空间分析.地球空间参考解决的是地球的空间定位和数学描述问题,投影解决的是将地球曲面信息映射到二 ...

最新文章

  1. Servlet防止页面被客户端缓存
  2. 菜鸟崛起 DB Chapter 2 MySQL 5.6的概述与安装
  3. python如何统计出现的次数_Python统计日志中每个IP出现次数的方法
  4. new housing price at shanghai
  5. 收集的安全网站【公司】
  6. PHP中extract()函数的定义和用法
  7. android折叠listview,android – 如何在listview中展开和折叠项目
  8. Linux常用命令(掌握完操作Linux基本就够用了)
  9. RMSE、MAE和SD的基本概念
  10. 呼叫转移XCAP log的查看
  11. 过程FMEA:失效模式/失效起因的理论+实例
  12. WPS客户端更新日志留着备用
  13. 结合公司业务后,对极光推送的进一步思考
  14. MATLAB 读取图片像素处理
  15. 多益网络产品专员面经分享
  16. web16(ColorBox插件编写)
  17. 基于单片机的自行车码表
  18. 【Vue】基于Element-UI的文件上传与下载
  19. c语言实现计算函数在某点的导数近似值
  20. 安防海量高清视频无损压缩—四川省智慧公共安全系统案例

热门文章

  1. oracle 11g 创建 job 20
  2. Codeigniter 4.0-dev 版源码学习笔记之四——详细路由过程
  3. Elasticsearch学习笔记-04.3批处理
  4. iteritems()与items()
  5. IIS上部署Net.Core
  6. 第一次玩,试试手(标题)
  7. 树状数组 + 位运算 LA 4013 A Sequence of Numbers
  8. ECShop 前台用户中心调整左侧栏目及中心部分呈现页面
  9. python 退出程序_Python:用Ctrl+C解决终止多线程程序的问题!(建议收藏)
  10. Python标准库之csv(1)