如何从 EarthLocation 获取 AstroPy 数据只是数字(Lat,Lon,Alt)

How to get AstroPy data from EarthLocation to be just numerical (Lat, Lon, Alt)

我使用 AstroPy EarthLocation 获取了我传播的卫星轨道的纬度、经度和高度 loc = coord.EarthLocation(*itrs.cartesian.xyz)。现在,我正在尝试使用 np.savetxt() 将我的数据放入一个 txt 文件中。

我希望我的数据是严格的数字,而不是它目前给我的 [ < Latitude XX.xxx deg> , < Latitude YY.yyy deg > , ...]。有人知道怎么做吗?

Code:

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)

Output:

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']

您有 LongitudeLatitudeQuantity 类型的对象。它们都有一个 .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 以创建 Numpy 数组或 np.savetxt 的浮点数列表写入 txt 文件?

另请参阅astropy.table.Table,它非常适合存储表格数据,然后将其写入 CSV 或 FITS 或其他文件格式,比仅使用 Numpy 数组和 Numpy 更方便和强大文本 I/O 个函数。