YouTube | Facebook | X(Twitter) | RSS

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

2016/9/1 (木)

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
  • この記事を書いた人

羽田 康祐

伊達と酔狂のGISエンジニア。GIS上級技術者、Esri認定インストラクター、CompTIA CTT+ Classroom Trainer、潜水士、PADIダイブマスター、四アマ。WordPress は 2.1 からのユーザーで歴だけは長い。 代表著書『"地図リテラシー入門―地図の正しい読み方・描き方がわかる』 GIS を使った自己紹介はこちら。ESRIジャパン(株)所属、元青山学院大学非常勤講師を兼務。日本地図学会第31期常任委員。発言は個人の見解です。

-プログラミング, ArcGIS
-, ,