공간 기준과 좌표 변환

 전송 : 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 의 경우 (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을;  
}

 

추천

출처www.cnblogs.com/leebokeyuan/p/11613124.html