2017-10-03 18 views
0

私は伝播した衛星軌道の緯度、経度、高度を得るためにAstroPyEarthLocationを使用しました。今、私はnp.savetxt()を使ってデータをtxtファイルに入れようとしています。EarthLocationからのAstroPyデータを数値で取得する方法(Lat、Lon、Alt)

私のデータは、[< Latitude XX.xxx deg>、< Latitude YY.yyy deg>、...]の代わりに厳密に数値でなければなりません。誰もこれを行う方法を知っていますか?

コード:

now = []  #UTC time at each propagation step 
xyz =[]  #Xyz coordinates from OrbitalPy initial orbit propagation 
cartrep = [] #Cartesian Representation 
gcrs = [] #Geocentric Celestial Reference System/Geocentric Equatorial Inertial, the default coord system of OrbitalPy 
itrs =[]  #International Terrestrial Reference System coordinates 
lat = []  #Longitude of the location, for the default ellipsoid 
lon = []  #Longitude of the location, for the default ellipsoid 
alt = []  #Height of the location, for the default ellipsoid 


for i in range(propNum): 
    xyz = (myOrbitX[i], myOrbitY[i], myOrbitZ[i])     #Xyz coord for each prop. step 
    now = time.Time(myT[i])           #UTC time at each propagation step 
    cartrep = coord.CartesianRepresentation(*xyz, unit=u.m)   #Add units of [m] to xyz 
    gcrs = coord.GCRS(cartrep, obstime=time.Time(myT[i]))   #Let AstroPy know xyz is in GCRS 
    itrs = gcrs.transform_to(coord.ITRS(obstime=time.Time(myT[i]))) #Convert GCRS to ITRS 
    loc = coord.EarthLocation(*itrs.cartesian.xyz)     #Get lat/lon/height from ITRS 
    lat.append(loc.lat)            #Create latitude list 
    lon.append(loc.lon)            #Create longitude list 
    alt.append(loc.height)           #Create altitude list 


print('Lat:') 
print(lat) 
print('Lon:') 
print(lon) 
print('Alt:') 
print(alt) 
print('Time:') 
print(myT) 

出力:

Lat: 

[<Latitude 27.689176073130298 deg>, <Latitude 48.45032120487385 deg>, <Latitude 48.364205712585104 deg>, <Latitude 27.538849564221568 deg>, <Latitude -0.03713701451174661 deg>, <Latitude -27.6161238116795 deg>, <Latitude -48.41635545462272 deg>, <Latitude -48.38265336989975 deg>, <Latitude -27.529850683687265 deg>, <Latitude 0.0929886673818169 deg>] 


Lon: 

[<Longitude -11.245369984319288 deg>, <Longitude 24.602646508968856 deg>, <Longitude 77.51869866724904 deg>, <Longitude 113.20045826221023 deg>, <Longitude 135.11667887191157 deg>, <Longitude 157.05927178662643 deg>, <Longitude -167.1439210586291 deg>, <Longitude -114.16647366586022 deg>, <Longitude -78.40457926191569 deg>, <Longitude -56.45443351644551 deg>] 


Alt: 

[<Quantity 409193.55555070826 m>, <Quantity 418422.38904031017 m>, <Quantity 419775.9010528204 m>, <Quantity 412775.65686140396 m>, <Quantity 407430.35452421894 m>, <Quantity 410337.3219834759 m>, <Quantity 415810.49056818814 m>, <Quantity 414410.9036345114 m>, <Quantity 406680.40398573445 m>, <Quantity 402944.3590314008 m>] 


Time: 

['2000-01-01 12:09:16.000', '2000-01-01 12:18:32.000', '2000-01-01 12:27:48.000', '2000-01-01 12:37:04.000', '2000-01-01 12:46:20.000', '2000-01-01 12:55:36.000', '2000-01-01 13:04:52.000', '2000-01-01 13:14:08.000', '2000-01-01 13:23:24.000', '2000-01-01 13:32:40.000'] 

答えて

2

あなたがタイプLongitudeのオブジェクト、LatitudeQuantityを持っています。それらはすべて.value属性を持っています。ここではそのようなオブジェクトを作成し、値にアクセスする方法を示し、スタンドアロンの例です:

from astropy.coordinates import Longitude, Latitude 
from astropy.units import Quantity 
lon = Longitude('42 deg') 
lon.value 
lat = Latitude('42 deg') 
lat.value 
height = Quantity('42 meter') 
height.value 

ので、多分lat.append(loc.lat.value)などにコードを変更してみてください、それはあなたが作るためにnp.arrayに渡すことができるfloatのリストを与えるかどうかを確認Numpy配列、またはnp.savetxtをtxtファイルに書き込むには?

表形式のデータを保存し、それをCSVやFITSなどのファイル形式に書き込むのに便利なastropy.table.Tableもご覧ください.Numpy配列とNumpyテキスト入出力関数を使用するよりもはるかに便利で強力です。 。

+0

また、特定のユニットに値が必要な場合は、 'lon.to_value( 'radian')'などのようにすることができます。 –

関連する問題