観測者の緯度/経度の数値はラジアンとして扱われ、文字列値は 10 進度として扱われるという決定がなされたのはなぜですか?
Python で緯度/経度の値を扱うとき、私は通常、float オブジェクトを扱います。星が正しく配置されている場合、そこに 1 つまたは 2 つの int オブジェクトが浮いている可能性がありますが、ほとんどは浮いています。私はいつも次のような単純なコードを書くことになります:
lat = 0.0
lon = 0.0
observer = ephem.Observer()
observer.lat = lat
observer.lon = lon
# etc... etc...
そして、私は火傷します。緯度/経度の値がラジアンではなく 10 進数であるため、火傷を負ってしまいます。自分が何を間違えたのかと頭を悩ませてしまうので、通常は悪いことです。最後に、ラジアンに変換することになります。理論的には、これを実行して正しい結果を得ることができます。
observer = ephem.Observer()
observer.lat = str(lat)
observer.lon = str(lon)
しかし、それも不安定に思えます。私の値はラジアンでなければならないと思っていました! フロートの場合のみ。文字列または浮動小数点オブジェクトを受け入れることは素晴らしいことですが、python 型に基づいて異なる数値型を受け入れることは矛盾しているようです。次のように、両方の代入が同じ数値型を取ることを期待します。
lat = lon = 0.55
observer.lat = lat # float lat is assumed to be in radians
observer.lon = lon # float lon is assumed to be in radians
lat = lon = '0.55'
observer.lat = lat # string lat is assumed to be in radians
observer.lon = lon # string lon is assumed to be in radians
次に、10 進度 / dms の変換演算子を指定できます。
lat = '25.0'
lon = 25.0
observer.lat = ephem.to_rad(lat)
observer.lon = ephem.to_rad(lon)
次に、to_rad 関数は、10 進度が float または string オブジェクトとして提供されていることを明示的に想定します。この時点で、インターフェイスは一貫しています。私は _libastro.c を簡単に掘り下げて、この質問の核心にある to_angle 関数を調べました。
これを実装しない正当な理由は思いつきません。実際、私はそれを志願します!しかし、これについて大騒ぎする前に、私はlibastro / pyephemの専門家ではないことを知っているので、これが理にかなっていることを確認するためにこの質問を開こうと思いました. これが非常に正当な理由で行われた可能性は十分にあり、私はどうしようもなく混乱しています。
経験豊富なユーザーまたはソフトウェアのコアに精通している方からコメントをいただければ幸いです。
前もって感謝します!