YouTube | Facebook | Twitter  Feed

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

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

関連記事

  • この記事を書いた人

羽田 康祐

Esri認定インストラクター、GIS上級技術者、測量士補、潜水士。GISy / GISc とその関連分野である地理学・地図学について日々の出来事で学んだ記憶を記録するためにブログを書いています。行動原理は伊達と酔狂。好きな地形は圏谷。好きな地図投影法はパースクインカンシャル図法。呉市生まれ広島市出身。GIS を使った自己紹介はこちら

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

© 2020 WINGFIELD since1981