転送します。https://www.cnblogs.com/lonelyxmas/p/5784699.html
同じデータは座標変換
同一平面のために、我々は、アルゴリズムは同じではないので、ここで私はちょうど座標平面の緯度及び経度座標に変わり、緯度と経度の座標と同じ位置であり、その差が時間の平面座標として計算される異なることができることを確認することができ。
プライベートIPoint GetpProjectPoint(IPoint pPoint、BOOL pBool)
{
ISpatialReferenceFactory pSpatialReferenceEnvironemnt = 新しいSpatialReferenceEnvironment()。 ISpatialReference pFromSpatialReference = pSpatialReferenceEnvironemnt.CreateGeographicCoordinateSystem((INT)esriSRGeoCS3Type .esriSRGeoCS_Xian1980)。// 西安80 ISpatialReference pToSpatialReference = pSpatialReferenceEnvironemnt.CreateProjectedCoordinateSystem((INT)esriSRProjCS4Type .esriSRProjCS_Xian1980_3_Degree_GK_Zone_34)。// 西安80 IF(pBool == TRUE)// 球面转平面{ジオメトリpGeo =(IGeometry)pPoint。pGeo.SpatialReference = pFromSpatialReference。pGeo.Project(pToSpatialReference)。返すpPointを。} 他// 平面转球面{IGeometry pGeo = (IGeometry)pPoint。pGeo.SpatialReference = pToSpatialReference。pGeo.Project(pFromSpatialReference)。返すpPointを。}}
異なるデータは座標変換
これまでの説明によって、我々は、基準面に位置決め翻訳は、地球の中心を含むので、異なる基準での地球表面上の同じ位置の座標が、同じではない、及び座標系の基準面を構成する部分知っている、またはこの変換のために、我々は直接変換パラメータを必要とすることはできませんし、これらのパラメータはまた、異なるモデルに基づいているので、回転は、一般的に三つのパラメータと7つのパラメータを使用し、3つのパラメータは、三つのパラメータは比較的簡単なだけでなく、理解することは比較的容易であり、 2つの基準面、我々は明確に二つの基準面三つのパラメータ間の関係を参照してください。次の図の間のX、Y、Z軸翻訳したものです:
精度を向上させるには、二つの基準面との間の変換のパラメータ7ではないだけを考慮し、また、スケールファクタの回転を考えプラス(サイズが異なる楕円であってもよいしつつモデルパラメータながら7は、この複雑なより複雑です)。
異なる面の間の変換のために、ArcGISのエンジンは、インタフェースはクラス次実装さIGeoTransformation変換パラメータを制御するためのインタフェースを提供します。
各インターフェースは、変換方法に対応し、そのようなGeocentricTranslationClassクラスは3つのパラメータを実装し、パラメータCoordinateFrameTransformationClassクラスがProjectExメソッドのパラメータは、7を実装または3つのまたは7 IGeometry2更新インタフェースパラメータを達成する必要がある、我々が達成するために、次のコードを使用し異なる座標平面との間の変換。
公共 ボイドProjectExExample() { ISpatialReferenceFactory pSpatialReferenceFactory = 新しい SpatialReferenceEnvironmentClass()。 // ISpatialReference pFromCustom = pSpatialReferenceFactory.CreateESRISpatialReferenceFromPRJFile(@ "E:\のArcGIS \エンジン\ Zはidingyi.prj"); IPoint pFromPoint = 新しいPointClass(); pFromPoint.X = 518950.788 ; pFromPoint.Y = 4335923.97 ; IZAware pZAware = pFromPoint として IZAware。 pZAware.ZAware = trueに、 pFromPoint.Z = 958.4791 ; // ((IGeometry)pFromPoint).SpatialReference = pFromCustom; // カスタム北京突起19 WGS84 6度。((IGeometry)pFromPoint).SpatialReference CreateCustomProjectedCoordinateSystem =(); // ターゲット投影projectedCoordinateSystem = pSpatialReferenceFactory.CreateProjectedCoordinateSystem IProjectedCoordinateSystem((INT)esriSRProjCS4Type.esr iSRProjCS_Xian1980_GK_Zone_19); // 元のターゲット面のでなく、同一平面上に、それが含みます変換パラメータ、変換パラメータI 7 ICoordinateFrameTransformation pCoordinateFrameTransformation =新しいCoordinateFrameTransformationClass()。 pCoordinateFrameTransformation.PutParameters( - 112.117、4.530、21.89、 - 0.00058702、 - 0.00476421、0.00009358、0.99998006411 )。 pCoordinateFrameTransformation.PutSpatialReferences(CreateCustomProjectedCoordinateシステム()、projectedCoordinateSystem としてISpatialReference)。 // 投影转换IGeometry2 pGeometry = pFromPoint IGeometry2として; pGeometry.ProjectEx(projectedCoordinateSystem として ISpatialReference、esriTransformDirection.esriTransformForward、pCoordinateFrameTransformation、偽、0、0 ); } プライベートIProjectedCoordinateSystem CreateCustomProjectedCoordinateSystem() { ISpatialReferenceFactory2 pSpatialReferenceFactory = 新しいSpatialReferenceEnvironmentClass()。 IProjectionGEN pProjection = pSpatialReferenceFactory.CreateProjection((INT)esriSRProjectionType.esriSRProjection_GaussKruger)として IProjectionGEN; IGeographicCoordinateSystem pGeographicCoordinateSystem = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((INT )esriSRGeoCSType.esriSRGeoCS_WGS1984)。 ILinearUnit pUnitPSpatialReferenceFactory.CreateUnit =((INT)esriSRUnitType.esriSRUnit_Meter)があるILinearUnit。 IParameter [] pParametersの =のpProjection.GetDefaultParameters()。 IProjectedCoordinateSystemEdit pProjectedCoordinateSystemEdit = 新しいProjectedCoordinateSystemClass(); オブジェクトはpName = " WGS-BeiJing1954 " 。 オブジェクト Palias = " WGS-BeiJing1954 " 。 オブジェクト pAbbreviation = " WGS-BeiJing1954 "; オブジェクトプリマーク= " WGS-BeiJing1954 " 。 オブジェクト pUsage = 「緯度と経度から計算メーター」。 オブジェクト pGeographicCoordinateSystemObject = pGeographicCoordinateSystem として オブジェクト。 オブジェクト pUnitObject = pUnitのように オブジェクト。 オブジェクト pProjectionObject = pProjectionのように オブジェクト。 オブジェクト pParametersObject = pParameters などを オブジェクト; pProjectedCoordinateSystemEdit.Define(REFはpName、REFのPalia、REF pAbbreviation、REFの プリマーク、REF pUsage、REF pGeographicCoordinateSystemObject、REF pUnitObject、REF pProjectionObject、REF pParametersObject) IProjectedCoordinateSystem5 pProjectedCoordinateSystem = pProjectedCoordinateSystemEdit としてIProjectedCoordinateSystem5。 pProjectedCoordinateSystem.FalseEasting = 500000; pProjectedCoordinateSystem.LatitudeOfOrigin = 0 ; pProjectedCoordinateSystem.set_CentralMeridian(真、111 )。 pProjectedCoordinateSystem.ScaleFactor = 1 。 pProjectedCoordinateSystem.FalseNorthing = 0 ; 返すpProjectedCoordinateSystemを。 }