我需要绘制卫星的轨迹,但在矢量图上是很重要的,因为当我放大时,地图也会扩展,使用 jpeg 或 png 执行此操作会导致绘制错误,因为在图像中我必须还要注意尺寸,但是使用 Folium 地图,我可以轻松地仅依赖纬度和经度,这对我来说非常重要。我分别创建了一个情节和大叶地图,我需要帮助来整合两者。 This video 很有帮助
地面轨迹图代码:
from beyond.io.tle import Tle
from beyond.dates import Date
import matplotlib.pyplot as plt
import numpy as np
tle = Tle("""ESTCUBE 1
1 39161U 13021C 21190.16115675 .00000203 00000-0 39683-4 0 9990
2 39161 97.9386 270.8533 0010880 82.4555 277.7898 14.72497522438947""")
tle2 = Tle("""ISS (ZARYA)
1 25544U 98067A 20331.01187177 .00003392 00000-0 69526-4 0 9990
2 25544 51.6456 267.7478 0001965 82.1336 12.7330 15.49066632257107""")
orb_est = tle.orbit() # orbit for EstCube
orb_iss = tle2.orbit() # orbit for ISS
# Tables containing the positions of the ground track
latitudes, longitudes = [], []
prev_lon, prev_lat = None, None
# Condition for plotting
period = orb_est.infos.period
start = Date.now()
stop = 2 * period
step = period/100
for point in orb_est.ephemeris(start=start, stop=stop, step=step):
# Conversion to earth rotating frame
point.frame = 'ITRF'
# Conversion from cartesian to spherical coordinates (range, latitude, longitude)
point.form = 'spherical'
# Conversion from radians to degrees
lon, lat = np.degrees(point[1:3])
# Creation of multiple segments in order to not have a ground track
# doing impossible paths
if prev_lon is None:
lons = []
lats = []
longitudes.append(lons)
latitudes.append(lats)
elif orb_est.i < np.pi /2 and (np.sign(prev_lon) == 1 and np.sign(lon) == -1):
lons.append(lon + 360)
lats.append(lat)
lons = [prev_lon - 360]
lats = [prev_lat]
longitudes.append(lons)
latitudes.append(lats)
elif orb_est.i > np.pi/2 and (np.sign(prev_lon) == -1 and np.sign(lon) == 1):
lons.append(lon - 360)
lats.append(lat)
lons = [prev_lon + 360]
lats = [prev_lat]
longitudes.append(lons)
latitudes.append(lats)
lons.append(lon)
lats.append(lat)
prev_lon = lon
prev_lat = lat
plt.xlim(-180,180) # longitude limit
plt.xlabel('Longitude')
plt.ylim(-90,90) # latitute limit
plt.ylabel('Latitude')
for lons, lats in zip(longitudes, latitudes):
plt.plot(lons, lats,'black', linestyle="--", linewidth=1.5)
plt.grid()
plt.show()
大叶地图代码
import folium
import numpy as np
from vega_datasets import data as vds
m = folium.Map()
lat_interval = 10
lon_interval = 10
lat_trans = 1
long_trans = 5
grid = []
grid_trans = []
for lat in range(-90, 90, lat_interval):
grid.append([[lat, -180],[lat, 180]])
for lon in range(-180, 181, lon_interval):
grid.append([[-90, lon],[90, lon]])
for g in grid:
folium.PolyLine(g, color="black",weight=0.5, opacity=0.5).add_to(m)
folium.PolyLine([[0,-180],[0,180]],tooltip="Equator", color="green", weight=2).add_to(m) # equator
folium.PolyLine([[-90,-0],[90,0]], color="green", weight=1.8).add_to(m) # prime meridian
m.save("Test2.html")
次要问题:-
有没有办法解决folium地图的语言问题,它显示不同语言的国家名称,我需要用英文?
如何获取大叶地图中的网格来显示经纬度?