【发布时间】:2019-01-15 16:26:39
【问题描述】:
我正在尝试绘制卫星沿其轨道的最大(理论)视野。我正在使用 Basemap,我想在其上绘制沿轨道的不同位置(带散点图),并且我想使用 tissot 方法(或等效方法)添加整个视野。 下面的代码可以正常工作,直到纬度达到北纬 75 度,在 300 公里的高度轨道上。超出此代码会输出 ValueError: "ValueError: undefined inverse geodesic (可能是对映点)"
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import math
earth_radius = 6371000. # m
fig = plt.figure(figsize=(8, 6), edgecolor='w')
m = Basemap(projection='cyl', resolution='l',
llcrnrlat=-90, urcrnrlat=90,
llcrnrlon=-180, urcrnrlon=180)
# draw the coastlines on the empty map
m.drawcoastlines(color='k')
# define the position of the satellite
position = [300000., 75., 0.] # altitude, latitude, longitude
# radius needed by the tissot method
radius = math.degrees(math.acos(earth_radius / (earth_radius + position[0])))
m.tissot(position[2], position[1], radius, 100, facecolor='tab:blue', alpha=0.3)
m.scatter(position[2], position[1], marker='*', c='tab:red')
plt.show()
需要注意的是,代码在南极(纬度低于 -75)处工作正常。我知道这是一个已知的错误,是否有针对此问题的已知解决方法? 感谢您的帮助!
【问题讨论】:
标签: python matplotlib-basemap cartopy satellite fieldofview