绘制卫星的地面轨迹,但在 Folium 地图(矢量)而不是世界地图的图像上

时间:2021-07-11 11:52:00

标签: latitude-longitude tracking folium satellite orbital-mechanics

我需要绘制卫星的轨迹,但在矢量图上是很重要的,因为当我放大时,地图也会扩展,使用 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")

次要问题:-

  1. 有没有办法解决folium地图的语言问题,它显示不同语言的国家名称,我需要用英文?

  2. 如何获取大叶地图中的网格来显示经纬度?

0 个答案:

没有答案
相关问题