測地系の変更(座標変換)

      2017/12/09

static void Main(string[] args)
 {
     //ESRI License Initializer generated code.
     m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeBasic },
     new esriLicenseExtensionCode[] { });
     //ESRI License Initializer generated code.
 
 
     Type t = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment");
     ISpatialReferenceFactory pSpatialReferenceFactory = (ISpatialReferenceFactory)Activator.CreateInstance(t);  //シングルトン
 
     //日本測地系
     ISpatialReference pGCS_Tokyo = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_Tokyo);
 
     //日本測地系2000
     ISpatialReference pGCS_JGD2000 = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCS3Type.esriSRGeoCS_JapanGeodeticDatum2000);
 
     //地理座標系変換
     IGeoTransformation pGeo2000 = TKY2JGD2000();
     IGeoTransformation pGeo2011 = TKY2JGD2011();
 
     IPoint pPoint = new PointClass();
     Console.WriteLine("GCS_Tokyo:" + pPoint.X.ToString() + "," + pPoint.Y.ToString());
 
     pPoint.PutCoords(135,35);                   //元の座標値の設定
     pPoint.SpatialReference = pGCS_Tokyo;       //元の座標系の設定
     IGeometry2 pGeometry2 = (IGeometry2)pPoint;
     pGeometry2.ProjectEx(pGCS_JGD2000, esriTransformDirection.esriTransformForward, pGeo2000, false, 0, 0); //測地系の変換
 
     Console.WriteLine("GCS_JGD2000:" + pPoint.X.ToString() + "," + pPoint.Y.ToString());
 
     Console.ReadLine();
 
 
 
     //Do not make any call to ArcObjects after ShutDownApplication()
     m_AOLicenseInitializer.ShutdownApplication();
 }
 
 //TKY2JGD(測地成果2000)の作成
 static IGeoTransformation TKY2JGD2000()
 {
 
     IGridTransformation pGridTransformation = new NTv2TransformationClass();
     pGridTransformation.Name    = "Tokyo_To_JGD_2000_NTv2";
     pGridTransformation.GridDatasetName = "Dataset_japan/tky2jgd.gsb";
     pGridTransformation.Load();
     return pGridTransformation;
 }
 
 //TKY2JGD(測地成果2011)の作成
 static IGeoTransformation TKY2JGD2011()
 {
 
     IGridTransformation pGridTransformation = new NTv2TransformationClass();
     pGridTransformation.Name = "JGD_2000_To_JGD_2011_NTv2_1";
     pGridTransformation.GridDatasetName = "Dataset_japan/touhokutaiheiyouoki2011.gsb";
     pGridTransformation.Load();
     return pGridTransformation;
 }
' WGS84の図形をGCS_JGD2000に投影変換する。
' @param pTarget 投影変換する図形
' @return IGeometry 投影変換後の図形
Function Wgs84_to_Gcsjgd200(ByRef pTarget As IGeometry)
Dim pGeometry2 As IGeometry2
Dim pSpatialReferenceFactory As ISpatialReferenceFactory
Dim pGcsjgd2000 As ISpatialReference
Dim pGeotransformation As IGeoTransformation
 
Set pGeometry2 = pTarget
 
' GCS_JGD2000の投影法定義を作成
Set pSpatialReferenceFactory = New SpatialReferenceEnvironment
Set pGcsjgd2000 = pSpatialReferenceFactory.CreateGeographicCoordinateSystem(esriSRGeoCS_JapanGeodeticDatum2000)
 
' 地理座標系(測地基準系)を考慮するため、JGD2000 -> WGS84の変換方法を作成する
Set pGeotransformation = pSpatialReferenceFactory.CreateGeoTransformation(esriSRGeoTransformation_JGD_2000_To_WGS_1984)
 
' 地理座標系(測地基準系)を考慮した投影変換
pGeometry2.ProjectEx pGcsjgd2000, esriTransformReverse, pGeotransformation, False, 0, 0
End Function

 - 日記 , , ,