緯度と経度の値を 3 次元空間のポイントに変換する必要があります。これを約2時間試しましたが、正しい結果が得られません。
正距円筒図法はopenflights.orgから取得されます。cosとsinのいくつかの組み合わせを試してみましたが、結果は私たちの愛する小さな地球のようには見えませんでした。
以下では、ウィキペディアが提案する変換を適用した結果を確認できます。文脈から推測できると思いますc4d.Vector
。
def llarToWorld(latit, longit, altid, rad):
x = math.sin(longit) * math.cos(latit)
z = math.sin(longit) * math.sin(latit)
y = math.cos(longit)
v = c4d.Vector(x, y, z)
v = v * altid + v * rad
return v
赤:X、緑:Y、青:Z
北アメリカと南アメリカ、特にメキシコ湾周辺の土地を特定することができます。しかし、それはややつぶれていて、間違った場所にあるように見えます..
少し回転して見えるので、緯度と経度を入れ替えてみました。しかし、その結果はやや厄介です。
def llarToWorld(latit, longit, altid, rad):
temp = latit
latit = longit
longit = temp
x = math.sin(longit) * math.cos(latit)
z = math.sin(longit) * math.sin(latit)
y = math.cos(longit)
v = c4d.Vector(x, y, z)
v = v * altid + v * rad
return v
これは、値を変換せずに結果がどのように見えるかです。
def llarToWorld(latit, longit, altid, rad):
return c4d.Vector(math.degrees(latit), math.degrees(longit), altid)
質問: 経度と緯度を正しく変換するにはどうすればよいですか?
解決
TreyA のおかげで、mathworks.com でこのページを見つけました。その作業を行うコードは次のとおりです。
def llarToWorld(lat, lon, alt, rad):
# see: http://www.mathworks.de/help/toolbox/aeroblks/llatoecefposition.html
f = 0 # flattening
ls = atan((1 - f)**2 * tan(lat)) # lambda
x = rad * cos(ls) * cos(lon) + alt * cos(lat) * cos(lon)
y = rad * cos(ls) * sin(lon) + alt * cos(lat) * sin(lon)
z = rad * sin(ls) + alt * sin(lat)
return c4d.Vector(x, y, z)
実は切り替えy
てみたらz
地球が自転していたので動きました!それが結果です: