ArcGIS中的投影和坐标转换

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑任务管理器快捷键_电脑知识小常识

0、计算机专业的学生的电脑常识未必有你多&#xff0c;电脑坏了找他们没用。1、重启。不管啥问题&#xff0c;上来就是重启。2、找一个学过计算机的来重启。3、还不行就让那个学过计算机的给你重装个系统。4、再不行就换个电脑吧。5、妹子可以忽视以上规则&#xff0c;直接找计…

大数据迁徙图:逃离北上广,他们竟然去了这里!

“做出这个决定&#xff0c;我们考虑了很久。”不久前&#xff0c;高铭离开了工作生活12年的北京&#xff0c;举家回到故乡重庆。“重庆房价比北京便宜得多&#xff0c;孩子上学的问题也好解决。”高铭的经历并非个案。最近几年&#xff0c;“逃离北上广”成为经久不衰的热门话…

python绘制蟒蛇绕圈圈_Python学习之循环--绕圈圈(蛇形盘)

效果图&#xff1a;注意哦&#xff0c;右边多出来的一点不是程序有问题&#xff0c;是打印的时候我用的\t&#xff0c;但100&#xff0c;三个字符顶格的时候给顶出去的&#xff0c;我太懒了&#xff0c;不想再调输出格式了&#xff0c;就这么凑合看吧实现代码&#xff1a;sum …

内存缓存MemoryCache

内存缓存MemoryCache实现了ICache接口&#xff0c;Redis同样实现了ICache接口&#xff0c;两者在缓存操作上达到了高度抽象统一。应用设计时一律使用ICache接口&#xff0c;开发环境装配为MemoryCache&#xff0c;生产环境根据分布式需要可以装配为Redis。如果应用系统没有分布…

quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码

一、QuickType 工具功能简介QuickType 是一款可以根据 json 文本生成指定语言(如 Type Script&#xff0c;C&#xff0c;,Java&#xff0c;C#&#xff0c;Go 等)类型声明代码的工具。例如我们在写接口调用处理收到响应数据的逻辑时一般分为如下两步&#xff1a; 1.根据接口返回…

endpointimpl怎么填参数_这是一篇VLOOKUP函数家族主要用法的合集,XLOOKUP来了!真香!但是,没有office365吃不着怎么办?...

最近这几个月&#xff0c;XLOOKUP震惊了Excel界&#xff0c;传言三头六臂无所不能&#xff0c;一个人把LOOKUP全家兄弟姐妹的活都给抢了。最开始我是不以为意的&#xff0c;但是相关的信息越来越多&#xff0c;我终于忍不住&#xff0c;今天去买了一套office365&#xff0c;发现…

1个月教你学会用Python实现机器学习

什么是机器学习&#xff1f;在最简单的层面上&#xff0c;机器学习只是优化数学方程式的过程。有几种不同的机器学习&#xff0c;都有不同的目的。机器学习中最流行的两种形式是监督学习和无监督的学习。 我们将在下面介绍他们的工作原理&#xff1a;. 监督学习&#xff1a;监督…

ASP.NET Core 5 在IIS,Nginx,Caddy下的性能测试

点击上方蓝字关注“汪宇杰博客”导语ASP.NET Core 从 2.2 版本起&#xff0c;在 IIS 下可以使用 InProcess 模式提高性能&#xff0c;国外大神 Rick Strahl 对此有一片详细的文章。3年过去了&#xff0c;现在 ASP.NET Core 已经到了 5.0 版本&#xff0c;不同服务器之间的性能有…

sql两个表查不同数据_产品操作MySQL第6篇 – 数据过滤-WHERE子句

MYSQL本资料为产品岗位作为日常工作参考&#xff0c;语言口语化At 2019/4/26 By David.Yang如何使用限定条件来进行数据过滤&#xff1f;在前问当中&#xff0c;我们已经学会到了SELECT查询&#xff0c;在过程当中多次接触了WHERE这个关键词&#xff0c;打过预防针应该知道他就…

gesturedetector.java_android使用gesturedetector手势识别示例分享

public class MyGestureLintener extends SimpleOnGestureListener {private Context context;public MyGestureLintener(Context context) {super();this.context context;}// 单击&#xff0c;触摸屏按下时立刻触发/*Overridepublic boolean onDown(MotionEvent e) {// TODO…

SQL SERVER 2005 同步复制技术

以下实现复制步骤&#xff08;以快照复制为例&#xff09;运行平台SQL SERVER 2005 一、准备工作&#xff1a;1&#xff0e;建立一个 WINDOWS 用户&#xff0c;设置为管理员权限&#xff0c;并设置密码&#xff0c;作为发布快照文件的有效访问用户。 2&#xff0e;在SQL SERVER…

【分享】C# 字节帮助类 ByteHelper

【分享】C# 字节帮助类 ByteHelper独立观察员 2021 年 2 月 3 日本文分享一个 C# 的字节&#xff08;Byte&#xff09;帮助类&#xff08;ByteHelper&#xff09;&#xff0c;主要是一些字节、字节数组、十六进制、十六进制字符串等之间的转换操作&#xff0c;适用场景包括但不…

win10必须禁用的服务_【亲测】Win10系统如何彻底禁止自动更新 亲测有效的Win10关闭自动更新方法...

昨天有人称Win10系统更新依然无法彻底关闭&#xff0c;今天再来补充一下&#xff0c;肯定可以&#xff01;不少用户反映自己的Win10系统更新无法彻底关闭&#xff0c;网上提供的关闭Win10更新的教程&#xff0c;关闭之后还是会自动更新Win10系统&#xff0c;而今天装机之家分享…

python怎么读数据库的数据_python从数据库读取出来的字典怎么更加方便的插入数据库...

其他的SQL不清楚, pymysql是没有类似函数的。说到框架&#xff0c;python常用的几个ORM, 我印象中也没有提供类似写法的。既然没人写&#xff0c;而你又在php里觉得这么用趁手&#xff0c;不如自己按php的思路实现一个。我自己写了个database类和一些工具函数, 你说的逻辑在我这…

国庆中秋活动——超强AR/3D地球仪!带你领略世界风光!我们未必能环游世界,但都该有个地球仪

通知&#xff01;通知&#xff01;通知&#xff01;&#xff01;&#xff01; 玩酷屋十一黄金优惠限时限量秒杀活动&#xff0c;能抢到算你厉害&#xff1a; 1、活动期间 2017/10/03 22:30 ——2017/10/06 22:30 2、【北斗AR地球仪】原价 299元&#xff0c;秒杀活动价 269元…

flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含

宏的概念类似于python中的函数&#xff0c;宏的作用就是在模板中重复利用代码&#xff0c;避免代码冗余。Jinja2支持宏&#xff0c;还可以导入宏&#xff0c;需要在多处重复使用的模板代码片段可以写入单独的文件&#xff0c;再包含在所有模板中&#xff0c;以避免重复。简单定…

PING 命令测试

使用 Ping 测试连接 Ping 命令有助于验证 IP 级的连通性。发现和解决问题时&#xff0c;可以使用 Ping 向目标主机名或 IP 地址发送 ICMP 回应请求。需要验证主机能否连接到 TCP/IP 网络和网络资源时&#xff0c;请使用 Ping。也可以使用 Ping 隔离网络硬件问题和不兼容配置。 …

如何在 ASP.Net Core 中使用 MiniProfiler

web应用程序的性能相信是大家普遍关心的一个问题&#xff0c;也相信大家有很多工具可用来分析应用程序的性能并能够找到其中的瓶颈&#xff0c;MiniProfiler 就是这个领域中的一款产品&#xff0c;它是一款简单的&#xff0c;功能强大的web应用分析工具&#xff0c;MiniProfile…

java 计时_Breitling(百年灵)世界时间终极计时腕表

所有热爱旅行的冒险家可以尽情期待&#xff0c;一款适合所有手腕的全新尺寸“旅行计时腕表”将在今年巴塞尔表展上华彩亮相。百年灵世界时间终极计时腕表(Chronomat 44 GMT)&#xff0c;适合腕间的完美尺寸&#xff0c;便捷的三时区时间显示&#xff0c;超凡的百年灵自产机芯&a…

python时钟罗盘酷炫代码_抖音上的时钟屏保,被我改造完用来表白

作者&#xff1a;爱编程的小和尚原文链接&#xff1a;https://blog.csdn.net/Newbie___/article/details/105378852抖音上很火的时钟屏保&#xff0c;被我改造完后用来准备准备准备表白&#xff0c;谁说程序员不浪漫&#xff1f;&#xff01;不知道一直关注小编我的小伙伴们之前…