Geotransformation 地理变换

The Abridged Molodensky transformation is a three parameter transformation三参 that converts between two geographic coordinate systems (datums)两个基准面. The parameters are three translations in meters. The translation values are in XYZ space. This method is a quicker but less accurate version of the Molodensky method.

A CoordinateFrameTransformation布尔莎 is a seven parameter geographic (datum) transformation.七参 The seven parameters are three translations in meters三个平移量, three rotations in arc seconds三个旋转变量, and a scale factor缩放因子 in parts per million. The parameters refer to XYZ space. The conversion of features to and from XYZ space is done automatically as part as the method. If the input and output spheroids (ellipsoids) are different, that is also handled automatically. The PositionVectorTransformation is similar but uses a different convention when handling the rotation values. To convert between a coordinate frame and position vector methods, change the signs of the rotation values.

The GeocentricTranslation method is a three parameter transformation三参 that converts between two geographic coordinate systems (datums).两个不同的基准面 The parameters are three translations in meters where the translations occur in XYZ space. The conversion of features to and from XYZ space is done automatically as part as the method. If the input and output spheroids (ellipsoids) are different, that is also handled automatically.

The HARNTransformation coclass implements the HARN (HPGN) geographic (datum) transformation method. This is a grid-based method格网方法. The grids for forty-nine states (Alaska is the exception) and five territories are available.

See the IGridTransformation interface for the dataset name parameter.

The longitude rotation transformation converts data between two geographic coordinate system by applying a shift to the longitude values. Usually it's used to convert two geographic coordinate systems that are defined on different prime meridians, like Monte Mario (Rome) to Monte Mario (based on Greenwich).

A MolodenskyBadekasTransformation is a ten parameter geographic (datum) transformation十参数基准面转换. The ten parameters are three translations in meters, three rotations in arc seconds, a scale factor in parts per million, and the datum origin point in meters基准面原点. The parameters refer to XYZ space. The conversion of features to and from XYZ space is done automatically as part as the method. If the input and output spheroids (ellipsoids) are different, that is also handled automatically. The convention for the rotation values is the same as the CoordinateFrameTransformation.

The Molodensky transformation 莫洛金斯基模型is a three parameter transformation that converts between two geographic coordinate systems (datums).三参 The parameters are three translations in meters.(米为单位) The translation values are in XYZ space. This method is a slower but more accurate version 比慢但更精确of the Abridged Molodensky method.

The NADCONTransformation coclass implements the base NADCON geographic (datum) transformation method. This is a grid-based method格网. The grids for the contiguous United States, Alaska, Hawaii, and Puerto Rico/Virgin Islands are available.

See the IGridTransformation interface for the parameter, the dataset name.

The NTv2Transformation method converts between two geographic coordinate systems (datums) using a file用一个文件. The method was created by the Geodetics Division of Natural Resources Canada and has since been used by several other countries including Australia, New Zealand, and Germany. The file format is documented online and a script exists that can convert information stored in a shapefile to an NTv2-format file. See http://arcscripts.esri.com/details.asp?dbid=13654

A PositionVectorTransformation is a seven parameter geographic (datum) transformation七参数. The seven parameters are three translations in meters, three rotations in arc seconds, and a scale factor in parts per million. The parameters refer to XYZ space. The conversion of features to and from XYZ space is done automatically as part as the method. If the input and output spheroids (ellipsoids) are different, that is also handled automatically. The CoordinateFrameTransformation is similar but uses a different convention when handling the rotation values. To convert between a position vector and coordinate frame methods, change the signs of the rotation values.

七参数法:(包括布尔莎模型,一步法模型,海尔曼特等)

IGeometry2.ProjectEx Method

By default, ProjectEx will not densify geometries as they are projected. This can lead to the output geometries not reflecting the 'true' shape in the new coordinate system. A straight line in one coordinate system is not necessarily a straight line in a different coordinate system. Set the bAngularDensify parameterif you want to densify the geometries while they are projected.

[C#]

//This example demonstrates how to use IGeometry2::ProjectEx
    public void ProjectExExample()
    {
        //Create source spatial reference
        ISpatialReferenceFactory
spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
        ISpatialReference spatialReference =
spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
       
spatialReference.SetFalseOriginAndUnits(-80.0000000232831, 39.9999999767169,
42949672.9);
        //Create envelope and define its
spatial reference
        IEnvelope envelope = new
EnvelopeClass();
       
envelope.PutCoords(-68.6076204314651, 49.6186709634653, -68.5531907607304,
49.6530789785679);
        envelope.SpatialReference = spatialReference;
        //Destination spatial reference
        IProjectedCoordinateSystem
projectedCoordinateSystem =
spatialReferenceFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_NAD1927UTM_19N);
        //Define the XYDomain equivalent to
SetFalseOriginAndUnits
       
projectedCoordinateSystem.SetDomain(500000, 600000, 5300000, 5600000);
        //Create a Geotransformation (Datum
transformation)
        IGeoTransformation geoTransformation
= spatialReferenceFactory.CreateGeoTransformation((int)esriSRGeoTransformationType.esriSRGeoTransformation_NAD1927_To_WGS1984_12)
as IGeoTransformation;

String report
= "Print envelope coordinates before projection:\n" +
        envelope.XMin + " , " +
envelope.YMin + " , " + envelope.XMax + " , " +
envelope.YMax + "\n\n\n";

//Project
envelope
        IGeometry2 geometry = envelope as
IGeometry2;
       
geometry.ProjectEx(projectedCoordinateSystem as ISpatialReference,
esriTransformDirection.esriTransformReverse, geoTransformation, false, 0, 0);

report =
report + "Print envelope coordinates after projection:\n" +
        envelope.XMin + " , " +
envelope.YMin + " , " + envelope.XMax + " , " +
envelope.YMax;
       
System.Windows.Forms.MessageBox.Show(report);
    }

About custom
geotransformations

[C#]

private void CustomGT()

{

// Initialize a new spatial reference environment.

// SpatialReferenceEnvironment is a singleton object and needs to use the
Activator class.

Type factoryType =
Type.GetTypeFromProgID(

"esriGeometry.SpatialReferenceEnvironment");

System.Object obj =
Activator.CreateInstance(factoryType);

ISpatialReferenceFactory2 pSRF =
obj as
ISpatialReferenceFactory2;

// Initialize and create the input and output coordinate systems.

IProjectedCoordinateSystem2
pPCSin = new

ESRI.ArcGIS.Geometry.ProjectedCoordinateSystemClass();

IProjectedCoordinateSystem2
pPCSout = new

ESRI.ArcGIS.Geometry.ProjectedCoordinateSystemClass();

pPCSin =
(IProjectedCoordinateSystem2)pSRF.CreateProjectedCoordinateSystem((int)

esriSRProjCSType.esriSRProjCS_Abidjan1987UTM_30N);

pPCSout =
(IProjectedCoordinateSystem2)pSRF.CreateProjectedCoordinateSystem((int)

esriSRProjCSType.esriSRProjCS_WGS1984UTM_30N);

// Retrieve the geographic coordinate systems from the two projected

// coordinate systems.

IGeographicCoordinateSystem2
pGCSto = (IGeographicCoordinateSystem2)

pPCSout.GeographicCoordinateSystem;

IGeographicCoordinateSystem2
pGCSfrom = (IGeographicCoordinateSystem2)

pPCSin.GeographicCoordinateSystem;

// Initialize and create an appropriate geographic transformation.

ICoordinateFrameTransformation
pCFT = new
CoordinateFrameTransformationClass();

pCFT.PutParameters(1.234,  - 2.345, 658.3, 4.3829,  - 2.48591, 2.18943, 2.48585);

pCFT.PutSpatialReferences(pGCSfrom, pGCSto);

pCFT.Name = "Custom GeoTran";

// The
SpatialReferenceEnvironment has a GeoTransformationOperationSet that you

// can use to maintain a list of active geographic transformations.

// Once you add a geographic transformation to the operation set, many
operations

// can access the transformations.

// Add the transformation to the operation set.

IGeoTransformationOperationSet
pGTSet = pSRF.GeoTransformationDefaults;

// Always add a geographic transformation in both directions.

pGTSet.Set(esriTransformDirection.esriTransformForward,
pCFT);

pGTSet.Set(esriTransformDirection.esriTransformReverse, pCFT);

}

How to use the
IGeoTransformationOperationSet methods

[C#]

public void Test()

{

//Create source spatial reference.

Type factoryType = Type.GetTypeFromProgID( "esriGeometry.SpatialReferenceEnvironment");

System.Object obj =
Activator.CreateInstance(factoryType);

ISpatialReferenceFactory3
spatialReferenceFactory = obj as ISpatialReferenceFactory3;

ISpatialReference spatialReference =

spatialReferenceFactory.CreateGeographicCoordinateSystem((int)

esriSRGeoCSType.esriSRGeoCS_WGS1984);

spatialReference.SetFalseOriginAndUnits( -
80.0000000232831, 39.9999999767169, 42949672.9);

//Create an envelope and define its
spatial reference.

IEnvelope envelope = new EnvelopeClass();

envelope.PutCoords( - 68.6076204314651,
49.6186709634653,  - 68.5531907607304, 49.6530789785679);

envelope.SpatialReference =
spatialReference;

//Destination spatial reference.

ISpatialReference projectedCoordinateSystem
= spatialReferenceFactory.CreateProjectedCoordinateSystem((int)

esriSRProjCSType.esriSRProjCS_NAD1927UTM_19N);

//Define the XYDomain equivalent to
SetFalseOriginAndUnits.

projectedCoordinateSystem.SetDomain(500000,
600000, 5300000, 5600000);

String report = "Print
envelope coordinates before projection:\n" +

envelope.XMin + " , " + envelope.YMin + " , " + envelope.XMax + " , " +

envelope.YMax + "\n\n\n";

//Project envelope.

IGeometry geometry = envelope as IGeometry2;

geometry.Project(projectedCoordinateSystem as ISpatialReference);

report = report + "Print
envelope coordinates after projection:\n" +

envelope.XMin + " , " + envelope.YMin + " , " + envelope.XMax + " , " +

envelope.YMax;

System.Windows.Forms.MessageBox.Show(report);

}

//This example
demonstrates how to use the IGeoTransformationOperationSet methods.

//Set up a few
GeoTransformations.

public void
ChangeCoordinateSystem1()

{

ISpatialReferenceFactory2
spatialReferenceFactory = new  SpatialReferenceEnvironmentClass();

IGeoTransformationOperationSet
geoTransformationOperationSet =   spatialReferenceFactory.GeoTransformationDefaults;

//NAD 1927 to WGS 1984 30.

IGeoTransformation geoTransformation =   spatialReferenceFactory.CreateGeoTransformation((int)

esriSRGeoTransformationType.esriSRGeoTransformation_NAD1927_To_WGS1984_12)as  IGeoTransformation;

geoTransformationOperationSet.Set(esriTransformDirection.esriTransformForward,    geoTransformation);

geoTransformationOperationSet.Set(esriTransformDirection.esriTransformReverse,   geoTransformation);

//Amersfoort to WGS 1984.

geoTransformation =
spatialReferenceFactory.CreateGeoTransformation(8012) as IGeoTransformation;

geoTransformationOperationSet.Set(esriTransformDirection.esriTransformForward, geoTransformation);

geoTransformationOperationSet.Set(esriTransformDirection.esriTransformReverse,  geoTransformation);

}

Projecting a
raster with a datum transformation

When projecting raster data, you can specify a
transformation if the spatial references of the input and output are based on
different datum. See the following code example:

public static void ProjectRasterWithDatumTransformation(IRasterDataset2

rasterDataset, ISpatialReference outSR,
esriSRGeoTransformation2Type geoTrans)

{

//This example shows how to specify a
datum transformation when projecting raster data.

//rasterDataset—Represents input of a
raster dataset that has a known spatial reference.

//outSR—Represents the spatial reference
of the output raster dataset.

//geoTrans—Represents the
geotransformation between the input and output spatial reference.

//Set output spatial reference.

IRaster raster =
rasterDataset.CreateFullRaster();

IRasterProps rasterProps =
(IRasterProps)raster;

rasterProps.SpatialReference = outSR;

//Specify the geotransformation.

ISpatialReferenceFactory2 srFactory = new SpatialReferenceEnvironmentClass();

IGeoTransformation geoTransformation =
(IGeoTransformation) srFactory.CreateGeoTransformation((int)geoTrans);

//Add to the geotransformation operation
set.

IGeoTransformationOperationSet operationSet
= new   GeoTransformationOperationSetClass();

operationSet.Set(esriTransformDirection.esriTransformForward,
geoTransformation);

operationSet.Set(esriTransformDirection.esriTransformReverse,
geoTransformation);

//Set the geotransformation on the raster.

IRaster2 raster2 = (IRaster2)raster;

raster2.GeoTransformations = operationSet;

//Save the result.

ISaveAs saveas = (ISaveAs)raster;

saveas.SaveAs(@"c:\temp\outputRaster.img", null, "IMAGINE
Image");

}

[ArcEngine]Geotransformation地理变换的更多相关文章

  1. ArcGIS案例学习笔记-中国2000坐标转换实例

    ArcGIS案例学习笔记-中国2000坐标转换实例 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:西安1980.中国2000.WGS84(GPS)等任意坐标系 ...

  2. ArcGIS进行自定义投影转换(重投影)

    这里记录一下使用自定义七参数进行投影转换的过程. 1.主动创建自定义地理(坐标)变换 首先在系统工具箱里面选择创建自定义地理(坐标)变换 在弹出的窗口中输入相关参数即可. 转换方法选择COORDINA ...

  3. WGS84转大地2000

    1.创建自定义地理(坐标)变换: 2.选择源坐标系和目标坐标系: 3.自定义地理转换方法,选择COORDINATE_FRAME; 4.选择投影工具: 5.在地理变换处选择刚才自定义变换.

  4. 在ArcGIS Desktop中进行三参数或七参数精确投影转换

    转自 在ArcGIS Desktop中进行三参数或七参数精确投影转换     ArcGIS中定义的投影转换方法,在对数据的空间信息要求较高的工程中往往不能适用,有比较明显的偏差.在项目的前期数据准备工 ...

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

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

  6. Python 利用GDAL对图像进行几何校正

    原文链接:https://blog.csdn.net/qq_27045589/article/details/81062586 一.几何校正方法 图像校正本质是建立一种从原始图像行列号到某种投影的数学 ...

  7. arcgis中栅格矢量计算技巧收藏

    ​ ​编辑 一.计算面积 ( 可以帮我们计算小班面积 )添加 AREA 字段,然后右键点击字段列,然后点击 CALCULATE VALUES; ---> 选择 ADVANCED -->把下 ...

  8. Hilbert-Huang Transform(希尔伯特-黄变换)

    在我们正式开始讲解Hilbert-Huang Transform之前,不妨先来了解一下这一伟大算法的两位发明人和这一算法的应用领域 Section I 人物简介 希尔伯特:公认的数学界“无冕之王”,1 ...

  9. Android百度地图开发02之添加覆盖物 + 地理编码和反地理编码

    下面来看一下地图上覆盖物的添加,以及地理编码和反地理编码. 添加覆盖物 在地图上添加覆盖物,一般需要以下几个步骤: 1. 定义坐标点,有可能是一个,有可能是多个(比如:多边形覆盖物). 2. 构造Ov ...

随机推荐

  1. 【液晶模块系列基础视频】5.4.X-GUI字体驱动4

    ============================= 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:ht ...

  2. CSS系列:长度单位&字体大小的关系em rem px

    em是相对长度单位.相对于当前对象内文本的字体尺寸.如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸. 任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=1 ...

  3. linux load average

    性能分析_linux服务器CPU_Load Average 理解Linux系统中的load average(图文版) 理解Load Average做好压力测试 top命令的Load average 含 ...

  4. [听点音乐]Mozart's 'The Marriage of Figaro'

    今天看到西雅图图书馆上写着可以到当地图书馆欣赏Mozart's 'The Marriage of Figaro'.查了一下,貌似还挺好看. “ Preview lecture of Seattle O ...

  5. [Zz] DX depth buffer

    声明:本文完全翻译自DX SDK Documentation depth buffer,通常被称为z-buffer或者w-buffer,是设备的一个属性,用来存储深度信息,被D3D使用.当D3D渲染一 ...

  6. cURL 学习笔记与总结(2)网页爬虫、天气预报

    例1.一个简单的 curl 获取百度 html 的爬虫程序(crawler): spider.php <?php /* 获取百度html的简单网页爬虫 */ $curl = curl_init( ...

  7. mysql的事务和select...for update

    一.mysql的事务mysql的事务有两种方式:1.SET AUTOCOMMIT=0;也就是关闭了自动提交,那么任何commit或rollback语句都可以触发事务提交;如果SET AUTOCOMMI ...

  8. Centos下使用Heartbeat实现集群[转]

    Linux 包括 CentOS 下高可用性(HA:High Availability)集群方案很多,而 Heartbeat 是比较常见和性价比比较高的一种。一、硬件及网络连接 群集一般需要2台以上服务 ...

  9. BIgInteger类和BigDecimal类的理解

    第一部分: 这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.BigInteger;和import java.math.BigDecimal; Bi ...

  10. wordpress插入腾讯视频的方法

    wordpress插入腾讯视频的方法 最近网站需要插入腾讯视频,但是腾讯视频目前没有分享代码,只有分享到微信,qq,微博等具体选项.百度这个问题,貌似没有很好地解决办法,好像有两个插件可以使用,安装试 ...