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

问题描述

我需要绘制卫星的轨迹,但在矢量图上是很重要的,因为当我放大时,地图也会扩展,使用 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,[0,180]],tooltip="Equator",color="green",weight=2).add_to(m) # equator
folium.polyLine([[-90,-0],0]],weight=1.8).add_to(m) # prime meridian
m.save("Test2.html")

次要问题:-

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)