전송 : HTTPS : //www.cnblogs.com/lonelyxmas/p/5784699.html
동일한 데이텀 좌표 변환
비행기가 다를 수 있습니다 시간의 좌표로 알고리즘이 동일하지 않기 때문에 같은 비행기를 들어, 우리는 반드시이 위도와 경도 좌표와 같은 위치는, 그 차이를 계산 할 수 있습니다 여기에 그냥 좌표 평면의 위도와 경도 좌표로 바뀝니다 .
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
개인 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 의 경우 (pBool == TRUE) // 球面转平面{형상 pGeo =(IGeometry) pPoint; pGeo.SpatialReference = pFromSpatialReference; pGeo.Project (pToSpatialReference); 반환 pPoint을; } 다른 // 平面转球面{IGeometry pGeo = (IGeometry) pPoint; pGeo.SpatialReference = pToSpatialReference; pGeo.Project (pFromSpatialReference); 반환 pPoint을; }}
좌표 변환 자료 다른
이전의 설명에 의해서, 우리는 상이한 기준의 지구 표면상의 동일한 위치의 좌표가 동일하지 알고 기준면 상대적 병진 위치 때 때문에 좌표계의 기준면을 구성하는 부분이 지구의 중심을 포함하거나 이 변환을 위해 우리가 직접 변환 매개 변수가 필요 없으며, 이러한 매개 변수는 또한 다른 모델을 기반으로하므로 회전은, 일반적으로 세 개의 매개 변수 7 개 매개 변수를 사용, 세 개의 매개 변수는 세 개의 매개 변수 비교적 간단하지만 이해하기가 상대적으로 쉽다 두 기준면 우리 명확 개의 기준면 세 개의 매개 변수 사이의 관계를 다음의 참조 도면 사이의 X, Y, Z 축 변환이다 :
도 7은 모델 파라미터는 더 복잡하지만, 이러한 복잡한 허용 정밀도 개의 기준면 간의 번역뿐만 파라미터 7을 고려하여 개선하면서, 또한 스케일 팩터 회전 플러스 (크기가 될 수있다 다른 타원체 간주 ).
다른면 사이의 변환을 위해,는 ArcGIS 엔진 인터페이스 클래스 다음 구현 된 IGeoTransformation 변환 파라미터를 제어하기위한 인터페이스를 제공;
각 인터페이스 변환 방법에 대응하고, 그러한 GeocentricTranslationClass 클래스 세 파라미터를 구현 파라미터 CoordinateFrameTransformationClass 클래스 7 ProjectEx 방법 파라미터 또는 업데이트 인터페이스 매개 변수가 달성해야 할 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 = ((가)는 esriSRProjCS4Type.esr iSRProjCS_Xian1980_GK_Zone_19 INT); //이 아닌 동일 평면 상에 원래의 대상 평면 때문에 포함 변환 파라미터는 변환 파라미터 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 PUNIT = pSpatialReferenceFactory.CreateUnit (( INT ) esriSRUnitType.esriSRUnit_Meter) 등 ILinearUnit; IParameter []의 pParameters =의 pProjection.GetDefaultParameters (); IProjectedCoordinateSystemEdit pProjectedCoordinateSystemEdit = 새로운 ProjectedCoordinateSystemClass (); 개체 pName은 = " WGS-BeiJing1954을 " ; 오브젝트 pAlias = " WGS-BeiJing1954 " ; 객체 pAbbreviation = " WGS-BeiJing1954 "; 오브젝트 pRemarks = " WGS-BeiJing1954 " ; 객체 pUsage = " 위도와 경도에서 계산 미터를 " ; 개체 pGeographicCoordinateSystemObject = pGeographicCoordinateSystem 같은 객체 ; 개체 pUnitObject = PUNIT을 같은 객체 ; 개체 pProjectionObject = pProjection를 같은 객체 ; 개체 pParametersObject = pParameters 등을 객체 ; pProjectedCoordinateSystemEdit.Define ( REF pName은, REF 팔리, REF pAbbreviation, 심판 pRemarks, 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을; }