緯度・経度・高さを三次元直交座標系に変換

投稿日:2016/9/1 (木) 更新日:

ArcGISでは地心直交座標系はサポートされていない。ただし、地球半径の割合から求めた3次元直交座標系を持っており、緯度・経度・高さをその直交座標系に変換できる。
ESRI Developer Summit資料 P31を参照

Developer Helpのサンプル

IGlobeViewUtil::GeographicToGeocentric 地理座標系・高さを3次元直交座標系に変換

また、「世界測地系と座標変換(飛田幹男著)で地理座標系←→地心直交座標系の変換方法が掲載されているが、これを実装してもらった。

Z値を持つ3Dフィーチャクラスを定義すれば、ArcGlobeに地球規模で3Dフィーチャを作成することができる。おそらくマルチパッチ型の図形も描けるだろう。

'IGlobeViewUtilで変換される3次元直交座標系はnormalized geocentric coordinatesといい、回転楕円体と接する地点を1(半径=1)として計算する
 
Type Coordinates
    Name As String      'Coordinates Name
    X As Double         'Geocentric Coordinates X (m)
    Y As Double         'Geocentric Coordinates Y (m)
    Z As Double         'Geocentric Coordinates Z (m)
    Lon As Double       'Longitude (Decimal Degree)
    Lat As Double       'Latitude (Decimal Degree)
    Height As Double    'Elevation Height (m)
End Type
 
 
Public Function GetCoordinates(Coords As Coordinates, Optional ToGeographic As Boolean = True)
    Dim pGlobeViewUtil As IGlobeViewUtil
    Set pGlobeViewUtil = New GlobeCamera
     
    Dim CloneCoords As Coordinates
    LSet CloneCoords = Coords
     
    Debug.Print CloneCoords.Name, "Before               ", CloneCoords.Lon, CloneCoords.Lat, CloneCoords.Height, CloneCoords.X, CloneCoords.Y, CloneCoords.Z
 
    If ToGeocentric = False Then
        'GeographicToGeocentric
        pGlobeViewUtil.GeographicToGeocentric CloneCoords.Lon, CloneCoords.Lat, CloneCoords.Height, CloneCoords.X, CloneCoords.Y, CloneCoords.Z
        Debug.Print CloneCoords.Name, "GeographicToGeocentric", CloneCoords.Lon, CloneCoords.Lat, CloneCoords.Height, CloneCoords.X, CloneCoords.Y, CloneCoords.Z
    Else
        'GeocentricToGeographic
        pGlobeViewUtil.GeocentricToGeographic CloneCoords.X, CloneCoords.Y, CloneCoords.Z, CloneCoords.Lon, CloneCoords.Lat, CloneCoords.Height
        Debug.Print CloneCoords.Name, "GeocentricToGeographic", CloneCoords.Lon, CloneCoords.Lat, CloneCoords.Height, CloneCoords.X, CloneCoords.Y, CloneCoords.Z
    End If
 
End Function
 
Public Function GetCoordinates2(ByRef X As Double, ByRef Y As Double, ByRef Z As Double, Optional ToGeographic As Boolean = True)
    Dim pGlobeViewUtil As IGlobeViewUtil
    Set pGlobeViewUtil = New GlobeCamera
     
    If ToGeographic = False Then
        'GeographicToGeocentric
        pGlobeViewUtil.GeographicToGeocentric X, Y, Z, X, Y, Z
    Else
        'GeocentricToGeographic
        pGlobeViewUtil.GeocentricToGeographic X, Y, Z, X, Y, Z
    End If
 
End Function

関連記事

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

Copyright© WINGFIELD since1981 , 2018 All Rights Reserved.