当前位置: 首页 > 编程日记 > 正文

arcgis 投影变换与坐标转换研究

arcgis 投影变换与坐标转换研究

1 ArcGIS中的投影方法

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

操作方法:运行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键即可。 字串3

例如 某点状shape文件中 某点P的坐标为  X 40705012  Y 3478021 ,且该shape文件坐标系统为中央为东经120度的高斯克吕格投影,在数据使用过程中为了将点P的值改为真实值X 705012  Y478021,首先将源数据的投影参数中False_Easting和False_Northing值分别加上40000000和3000000作为源坐标系统,修改参数前的坐标系统作为投影操作的目标坐标系统,然后通过投影操作后生成一新的Shape文件,且与源文件中点P对应的点的坐标为X 705012  Y478021。

字串2

2 ArcGIS中坐标系统的定义

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

坐标系统的定义是在不改变当前数据集中特征X Y值的情况下 对该数据集指定坐标系统信息。

字串2

操作方法:运行ArcGIS9中的ArcMap,打开ArcToolBox,打开 Data Management Tools ->Projections and Transformations->Define Projection 项 打开坐标定义对话框。介下来在Input DataSet or Feature Class栏中输入或点击旁边的按钮选择相应的DataSet或Feature Class;在Coordinate System栏中输入或点击旁边的按钮选择需要为上述DataSet或Feature定义的坐标系统。最后点OK键即可。

字串8

例如 某点状shape文件中 某点P的坐标为  X 112.2  Y 43.3 ,且该shape文件没有带有相应的Prj文件,即没有空间参考信息,也不知道X Y 的单位。通过坐标系统定义的操作定义其为Beijing1954坐标,那么点P的信息是东经112.2度 北纬43.3度。

字串6

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

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

相关接口 字串4

3.1.1 IGeometry.Project方法 字串4

该方法声明如下 字串1

public void Project (

字串1

ISpatialReference newReferenceSystem 字串7

); 字串1

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

字串1

//Create Spatial Reference Factory 字串1

ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironmentClass(); 字串3

ISpatialReference sr1;

字串9

//GCS to project from 字串8

IGeographicCoordinateSystem gcs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983); 字串2

sr1 = gcs;

字串4

sr1.SetFalseOriginAndUnits(-180, -90, 1000000); 字串7

//Projected Coordinate System to project into

字串9

IProjectedCoordinateSystem pcs = srFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_NAD1983N_AmericaLambert);

字串6

pcs.SetFalseOriginAndUnits(0, 0, 1000);

字串8

ISpatialReference sr2; 字串6

sr2 = pcs; 字串6

//Point to project 字串4

IPoint point = new PointClass() as IPoint; 字串2

point.PutCoords(-117.17, 34.06); 字串1

//Geometry Interface to do actual project 字串5

IGeometry geometry;

字串7

geometry = point; 字串5

geometry.SpatialReference = sr1;

字串4

geometry.Project(sr2);

字串5

point = geometry as IPoint;

字串4

double x;

字串8

double y; 字串3

point.QueryCoords(out x, out y);

字串8

Debug.Print("X: " + x.ToString());

字串9

Debug.Print("Y: " + y.ToString()); 字串9

IGeometry接口的Project方法提供的投影操作实现了最基本的坐标转换功能. 实际数据处理过程中, 比较明确数据转换前后空间参考信息情况下一般用此方法作坐标转换,不同投影带之间的坐标转换就是一个典型.

字串5

3.1.2 ITransform2D接口

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

public void Transform (

字串5

esriTransformDirection direction,

字串9

ITransformation transformation 字串5

); 字串4

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

字串6

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

字串9

var

字串2

pAffineTransformation2D: IAffineTransformation2D;

字串9

ControlPtCnt: integer;

字串4

FormPtArray: array of IPoint; 字串3

ToPtArray: array of IPoint;

字串1

i: integer;  字串5

pTransform2D: ITransform2D;

字串7

begin 字串3

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

if FromPtColl.PointCount <> ToPtColl.PointCount then

字串9

begin 字串9

//控制点不成对错误 字串5

exit; 字串7

end;

字串6

if FromPtColl.PointCount < 4 then 字串6

begin

字串8

//控制点不能少于4个 字串9

exit; 字串3

end; 字串9

ControlPtCnt := FromPtColl.PointCount;

字串3

SetLength(FormPtArray, ControlPtCnt); 字串3

SetLength(ToPtArray, ControlPtCnt);

字串3

for i := 0 to ControlPtCnt -1 do

字串1

begin 字串6

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

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

字串4

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

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

end; 字串9

//创建  AffineTransformation2D 对象

字串7

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

//设置控制点信息 字串8

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

字串4

//转到ITransform2D接口

字串6

pTransform2D := pGeo as ITransform2D;

字串2

//坐标转换

字串1

pTransform2d.Transform(esriTransformForward, pAffineTransformation2D); 字串2

end;

字串9

字串1

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

字串2

3.2 影像数据纠正。

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

字串5

public void Warp ( 字串8

IPointCollection sourceControlPoints,

字串9

IPointCollection targetControlPoints, 字串2

esriGeoTransTypeEnum transformType,

字串5

IRaster ipRaster

字串9

);

字串5

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

字串7

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

字串5

{ 字串1

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

// sourcePoints: represents source control points

字串9

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

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

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 字串5

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

字串7

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

} 字串3

需要注意的是当选择不同的转换类型时(参数transformType取值不同时), 对控制点的对数也有不同的要求. 这个可以参照联机帮助中的详细说明. 字串3

此外, 使用IrasterGeometryProc.Wrap方法, 会略微改变影像图的色彩值, 当对一幅影像图前后转换作对比时会发现这种色彩的变化情况. 字串4

个人认为,ArcGIS对影像图的处理功能较其他一些专业影像处理软件来讲,还是稍显逊色了些. 字串9

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

相关文章:

linux lvm 大小与硬盘大小关系,linux lvm扩容磁盘大小

关闭需要扩容的虚拟机&#xff0c;并通过管理虚拟机界面添加磁盘空间&#xff0c;本次调整50G注意&#xff0c;本次写入为增加容量的大小&#xff0c;并非增加完硬盘的大小硬盘添加后可以用fdisk -l 查看磁盘容量大小&#xff0c;可以看到硬盘增加了50G &#xff0c;但是由于没…

无人驾驶汽车系统入门:基于VoxelNet的激光雷达点云车辆检测及ROS实现

作者 | 申泽邦&#xff08;Adam Shan&#xff09;兰州大学在读硕士研究生&#xff0c;主要研究方向无人驾驶&#xff0c;深度学习&#xff1b;兰大未来计算研究院无人车团队负责人&#xff0c;自动驾驶全栈工程师。之前我们提到使用SqueezeSeg进行了三维点云的分割&#xff0c;…

EX2010与EX2013共存迁移01-设计及说明

1.1共存条件说明 2013年之前发布的Exchange 2013版本是不支持共存的&#xff0c;只有在2013年4月2日发布的Exchange 2013 CU1版才支持共存&#xff0c;Exchange 2010必须为SP3版本才支持和2013共存及迁移&#xff0c;Exchange2003不支持和2013共存及迁移。下面是详细的共存说明…

linux ext4增加大小,如何修改 ext4 文件系统的大小

如何修改 ext4 文件系统的大小a. 扩大文件系统i启动到 Linux,umount 掉/dev/sdb1 和/dev/sdb2,若提示磁盘忙的话使用fuser 将正在使用磁盘的程序 kill 掉。(推荐使用另外的 Linux 启动盘来引导系统)ii使用 fdisk /dev/sdb 调整分区大小,进去之后,输入 p,记下要扩大分区起始位置…

Silverlight初级教程-开发工具

Silverlight初级教程 开发工具 在silverlight越来越流行的同时有很多的供应商开始筹划制作编辑和设计silverlight的工具。现在最常见的设计和开发工具是&#xff1a;Visual Studio 2008Visual Studio是微软整合的集成开发环境。截止此时Visual Studio 2008已经提供了编辑和预览…

201671010128 2017-11-12《Java程序设计》之图形程序设计

一、基本概念 Java的抽象窗口工具箱&#xff08;Abstract Window Toolkit, AWT)包含在java.awt包中&#xff0c;它提供了许多用来设计GUI的组件类和容器类。AWT库处理用户界面元素的方法&#xff1a;把图形元素的创建和行为委托给本地GUI工具箱进行处理。应用AWT编写依赖于本地…

linux线程join的用法,join用法

Join用法- a 1显示第一个文件的不匹配行&#xff0c;- a 2为从第二个文件中显示不匹配行。n.m n为文件号&#xff0c;m为域号。1 . 3表示只显示文件1第三域&#xff0c;每个n&#xff0c;m必须用逗号分隔&#xff0c;如1 . 3&#xff0c;2 . 1。# cat name.txtM.Golls 12 Hi…

vss使用注意事项

连接方式 局域网方式连接 Internet 方式连接 在局域网方式连接时&#xff0c;需要输入自己的 vss 登陆帐号&#xff0c;账号可以通过管理器&#xff0c;自己在 vss 系统中注册&#xff1b; Internet 连接时默认使用的是 vss 中的 administrator 账号&#xff1b; 请大家都使用自…

沈向洋、黄学东等大咖助阵,IoT in Action微软深圳物联网大会即刻报名

每当海聊黑科技&#xff0c;总会有种恍然隔世的幻觉自动驾驶、无人配送、刷脸支付、智能翻译……物联网、人工智能、智能边缘等等新技术正在快速变得实用并普及怀疑论者还秉持观望&#xff0c;深怕技术布道之嫌而我们的现实中已经切实听见他们落地的声音因为“未来已经来临&…

centos6上以二进制方式安装mariadb5.5

准备mariadb-5.5.57-linux-x86_64.tar.gz二进制程序包 此包是经过编译的&#xff0c;也就是说我们要在特定的目录下安装&#xff1b; 步骤1、准备mysql用户 mkdir /app/data #此目录是存放mysql数据库、表的 useradd -r -m -d /app/data -s /sbin/nologin mysql #创建mysql用户…

“神人”or“闲人”?你的未来由AI与大数据决定

12 月 6 日&#xff0c;北京新云南皇冠假日酒店&#xff0c;由中国计算机学会主办&#xff0c;CCF 大数据专家委员会承办&#xff0c;CSDN、中科天玑数据科技股份有限公司协办的 2018 中国大数据技术大会&#xff08;BDTC&#xff09;首日议程圆满结束。本次大会为期三天&#…

linux 获取cpu id,linux获取cpu id和disk id

2013-04-19 15:17 57人阅读 评论(0)// 获得CPU IDpublic static final String CPU_ID_CMD "dmidecode -t 4 | grep ID |sort -u |awk -F: {print $2}";// 获得磁盘IDpublic static final String DISK_ID_CMD "fdisk -l |grep \"Disk identifier\" …

给gridview添加上下移动功能

给gridview添加上下移动功能存储过程代码&#xff1a;CREATE PROCEDURE [sp_trans_dept] now_id int,upside_id intASdeclare tmp_ordering int --临时变量declare sqlstr varchar(1000) --sql语句declare table_name varchar(500)declare column_name varchar(500)set t…

Lucene.Net 2.3.1开发介绍 —— 三、索引(六)

2.2 Field的Boost 如果说Document的Boost是一条线&#xff0c;那么Field的Boost则是一个点。怎么理解这个点呢&#xff1f;设置Document的Boost会影响所有字段。在搜索的过程中&#xff0c;一般至少会搜索两个Field&#xff0c;比如同时搜索标题和内容。而Document的Boost将同时…

linux nor flash 读写,9.2 NorFLASH读写实验——M25PExx

>[danger] 学习本节内容前&#xff0c;请先检查自己手上的开发板是否具备NorFlash存储器&#xff0c;如不具备则可跳过本章节。> ZigBee 标准板&#xff1a;具备> ZigBee MINI板&#xff1a;不具备> ZigBee 网关 & 嵌入式Linux 二合一开发板&#xff1a;具备我…

sql server分布式事务解决方案[新事务不能登记到指定的事务处理器中错误]

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 适用环境 操作系统&#xff1a;windows 2003&#xff0c;xp 数据库&#xff1a;sql server 2000/sql server 2005 使用链接服务器进行远程数据库访问的情况 一、 问题现象 在执行分布…

微软“叛变”谷歌 Chromium!

去年&#xff0c;微软工程师在公开演示 Azure 服务时&#xff0c;微软 Edge 浏览器频频崩溃&#xff0c;逼得他只能在众目睽睽的尴尬局面下&#xff0c;使用 Edge 下载 Chrome 浏览器来继续他的演示。一年之后的今天&#xff0c;Edge 就抱上了 Chrome 的大腿。图片来源&#xf…

vCenter Server Appliance 6.5 中重置丢失或忘记的 root 密码

vCenter Server Appliance 6.5 中重置丢失或忘记的 root 密码 目前安装vCenter Server Appliance 6.5客户原来越多&#xff0c;给用户配置过程中&#xff0c;往往会忽略默认的root 密码策略&#xff1a;60天过期。一旦密码过期或忘记密码&#xff0c;vcsa的管理控制台就无法通过…

linux 查看剪贴板历史,Clipboard History Manager插件,查看浏览器剪贴板历史记录

Clipboard History Manager插件&#xff0c;是一款浏览器剪贴板历史记录管理工具&#xff0c;通过它可以快速查看最多1000个本机上的剪贴数据&#xff0c;适用于Mac和Windows操作系统。A full-featured desktop clipboard manager for Mac, Windows and Linux to track what yo…

ORACLE执行计划的一些基本概念

本文介绍了ORACLE执行计划的一些基本概念&#xff0c;供学习应用。 一&#xff0e;相关的概念 Rowid的概念&#xff1a;rowid是一个伪列&#xff0c;既然是伪列&#xff0c;那么这个列就不是用户定义&#xff0c;而是系统自己给加上的。对每个表都有一个rowid的伪列&#xff0c…

公开课报名 | 那些年,我们在文本分类中遇到的坑

文本分类问题是企业在 NLP 领域中处理文本数据时经常会遇到的一个问题&#xff0c;很多时候&#xff0c;我们需要将文本信息进行分类&#xff0c;或提相关的接口以供外部进行文本上传&#xff0c;在针对于用户所上传的文档信息就需要进行文档内容的分类&#xff0c;那么针对于这…

Cisco网院成立10周年-未来三年在蓉增50所

2008年9月18日—— 今天&#xff0c;主题为“十年创新&#xff0c;传承未来”的Cisco中国网络技术学院十周年庆典在四川成都举行。会上&#xff0c;Cisco宣布将与四川省政府和教育部进一步加强合作&#xff0c;在四川新建立50所Cisco网络技术学院&#xff0c;以实现该项目在四川…

荣耀预装linux安装包,关于华为机子没有预装应用商店讨论

在荣耀笔记本(Linux版)中拥有深度应用商店&#xff0c;几步就搞定啦&#xff01;在荣耀笔记本(Linux版)中拥有深度应用商店&#xff0c;几步就搞定啦&#xff01;深度操作系统 今天随着预装深度操作系统(deepin)的荣耀笔记本(Linux版)的开卖(未来可期&#xff01;荣耀Magicbook…

如何自学CS?

整理 | 非主流出品 | AI科技大本营哪个行业的平均工资最高&#xff1f;计算机。国家统计局的数据显示&#xff0c;2016 年信息传输、软件和信息技术服务业年平均工资为 122478 元&#xff0c;首超金融行业&#xff0c;并于 2017 年再次夺魁。在互联网和人工智能浪潮的推动下&am…

oracle 使用nfs挂载的目录不能进行归档

oracle 使用nfs挂载的目录不能进行归档 在做实验时将oracle的归档目录放在nfs服务器上&#xff0c;启动数据库就会死掉&#xff0c;也不能进行归档。在报警日志中发现WARNING:NFS file system /mnt mounted with incorrect options WARNING:Expected NFS mount options: rs…

生产中NFS案例记录---写入权限解决过程

生产中NFS案例记录---写入权限解决过程NFS配置要求&#xff1a;1、 将oracle文件写入到NFS Server端&#xff0c;注意权限要与oracle端一致。2、 Oracle端目录文件所属用户为oracle&#xff0c;uid&#xff1a;500 gid 501。格式约定&#xff1a;命令显示过程 文字说明特别注意…

吴文俊人工智能科学技术奖:陆汝钤院士、百度王海峰等获奖

12月9日上午&#xff0c;被誉为“中国智能科学技术最高奖”的吴文俊人工智能科学技术奖在苏州举行颁奖典礼。本届吴文俊人工智能奖共对70项人工智能成果授奖。其中&#xff0c;中国科学院院士、中国科学院数学与系统科学研究院研究员陆汝钤成为首位吴文俊人工智能最高成就奖获得…

河南科技大学c语言章节作业答案,河南科技大学C语言试题

c语言试题,基本上是题库。上机作业用的。大家好好把握。C程序的运行环境和简单C源程序的调试&#xff0c;实验报告(共 题)&#xff0c;用时(127分33秒)&#xff0c;成绩(A)1、 有如下程序&#xff1a; #include"stdio.h" main( ) { int a8;printf("%d,%5d,%-5d#…

qinyu.blog.51cto.com里的好文章,比尔盖茨

世纪枭雄比尔盖茨的王者传奇儿时&#xff0c;他便躁动不安&#xff0c;顶着梳不顺的头发&#xff0c;在竞技中缕缕获胜。少年英才没有机会慢慢成长&#xff0c;21岁&#xff0c;他创办了微软&#xff0c;从此走上IT业的颠峰之路&#xff0c;垄断了13年的财富榜首&#xff1b;32…

Clean-Code: 注释

别给糟糕的代码加注释-----------------重新写吧 这是书中的关于注释一章的第一句话&#xff0c;怎么说呢&#xff0c;这句话个人感觉很对&#xff0c;但是实际上却很少这么做&#xff0c; 有几个原因&#xff1a; 糟糕的代码不是自己写的&#xff0c;别人写的代码&#xff0…