2016-01-19 27 views
5

を使用して、地球の中心から様々な(lat, lon)の位置までの距離をマッピングすると、緯度の変化が経度とは関係なく(サブミリメートル)表示されます。これは、パッケージ内の文書化された近似、スクリプトのバグ、または全く別のものかもしれません。私はここで何か間違っていますか? (Skyfieldで地球の形が間違っているようです - 私のpythonは正しいですか?

pe = earth.at(jd).position.km 
for i in range(10): 

    lon1, lon2 = 360.*np.random.random(2)-180 
    lat = float(180.*np.random.random(1)-90.) 

    p1 = earth.topos(lat, lon1).at(jd).position.km 
    p2 = earth.topos(lat, lon2).at(jd).position.km 

    r1 = np.sqrt(((p1-pe)**2).sum()) 
    r2 = np.sqrt(((p2-pe)**2).sum()) 

    print lat, lon1, lon2, r2-r1 

及びこれを得た:(以外に、当然のことながら、jet使用)クロスチェックとして

uhoh topo

import numpy as np 
import matplotlib.pyplot as plt 
from skyfield.api import load, now 

data = load('de421.bsp') 
earth = data['earth'] 
jd = now() 

epos = earth.at(jd).position.km 

lats = np.linspace(-90, 90, 19) 
lons = np.linspace(-180, 180, 37) 
LATS, LONS = np.meshgrid(lats, lons) 

s = LATS.shape 

points = zip(LATS.flatten(), LONS.flatten()) 

rr = [] 
for point in points: 
    la, lo = point 
    pos = earth.topos(la, lo).at(jd).position.km 
    r = np.sqrt(((pos-epos)**2).sum()) 
    rr.append(r) 

surf = np.array(rr).reshape(s) 

extent = [lons.min(), lons.max(), lats.min(), lats.max()] 

plt.figure() 
plt.imshow(surf.T, origin='lower', extent=extent) 
plt.colorbar() 
plt.title('uhoh topo') 
plt.savefig('uhoh topo') 
plt.show() 

を、私は同じ緯度と場所のいくつかのランダムなペアを試し第4列はミクロンの差を示す):

45.8481950437 55.9538249618 115.148786114 1.59288902069e-08 
-72.0821405192 4.81264755835 172.783338907 2.17096385313e-09 
51.6126938075 -54.5670258363 -134.888403816 2.42653186433e-09 
2.92691713179 -178.553103457 134.648099589 1.5916157281e-10 
-78.7376163827 -55.0684703115 125.714124504 -6.13908923697e-10 
48.5852207923 -169.061708765 35.5374862329 7.60337570682e-10 
42.3767785876 130.850223447 -111.520896867 -1.62599462783e-08 
11.2951212126 -60.0296460731 32.8775784623 6.91579771228e-09 
18.9588262131 71.3414406837 127.516370219 -4.84760676045e-09 
-31.5768658495 173.741960359 90.3715297869 -6.78483047523e-10 
+0

実際の質問は何ですか?約6357 kmから6378 kmまでの緯度の変化は妥当です(たとえば、https://en.wikipedia.org/wiki/Figure_of_the_Earthを参照)。その結果、出力のどの数字に質問していますか? –

+0

距離は経度とともに変化します - 確かに数十ミクロン以上です。扁平回転楕円体は、実際の形状への一次近似に過ぎません。そして、それは仰角やジオイドの形状を考慮に入れていません。私はこれがパッケージ内の暗黙の近似かバグか、パッケージを正しく使用していないかを理解しようとしています。 – uhoh

+0

経度のばらつきは小さいがゼロではないという事実は、丸め誤差(天文学的な距離)から来るかもしれないので、楕円近似を使用している可能性があります。しかし、私はそれが事実であるかどうかわからない。人々はGPS測位とミリメートルの分解能(時には正確度*でも)を測っています - これはかなり大きな近似*です。 – uhoh

答えて

1

topos()メソッドには、指定していないelevation_m=0.0が含まれています。だからあなたの呼び出しごとに、それは海抜0.0メートルのデフォルト値をとります。また、「海面」の定義は経度とともに変化しません。特定の緯度では、海面は世界のどこでも地球中心から一定の距離にあります。

ミクロンレベルのエラーを「非常に大きな近似」と呼ぶ理由はわかりませんが、マシンの64ビット浮動小数点演算の制限された精度を実際に実行しています。 1 auの長さ - 最後の1〜2ビットで丸めエラーが発生しています。

+0

'earth.topos .__ doc__'を確認しました。 - 仰角オプションを持つ' help(earth.topos) 'とタイプしてください。オンラインドキュメントは 'lat'と' lon'引数を表示しますが、 'm'は表示しません。私はドキュメントが進行中であることを知っています - 衛星オプションの標高オプションを追加し、海抜で(実際には)ボストンの代わりにデンバー?また、「標高= 0」の海面も、重力等電位面であるジオイドであり、2D構造を持つと考えました。今私は、WGS84二軸楕円体が測地目的のための "海面"であることを見ています。ありがとう - スカイフィールドの岩! – uhoh

+0

"非常に大きな近似"は、近地球と天体観測イベントの計算に楕円体のみを使用することを指し、標高オプションが利用可能であることを知る前に@WarrenWeckesserのコメントに応じています。確かに、仰角を含まないことは大きな近似になるでしょう! btwあなたがこの[質問](http://space.stackexchange.com/q/13523/12102)を見ればそれは素晴らしいことです。再度、感謝します! – uhoh

関連する問題