首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将AstroPy数据从EarthLocation中获取成数字(Lat,Lon,Alt)

如何将AstroPy数据从EarthLocation中获取成数字(Lat,Lon,Alt)
EN

Stack Overflow用户
提问于 2017-10-03 20:08:44
回答 1查看 1K关注 0票数 1

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

我希望我的数据是严格的数值,而不是<纬度XX.xxx deg>,<纬度YY.yyy deg >,……它现在给了我。有人知道怎么做吗?

代码:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
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']
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-03 21:45:04

您有LongitudeLatitudeQuantity类型的对象。它们都有一个.value属性。下面是一个独立的示例,它生成这样的对象并演示如何访问该值:

代码语言:javascript
复制
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函数更方便和强大。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46552597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档