- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试绘制卫星沿其轨道的最大(理论)视野。我正在使用 Basemap,我想在其上绘制沿轨道的不同位置(散点图),并且我想使用 tissot 方法(或等效方法)添加整个视野。在 300 公里高空轨道上,在北纬 75 度左右之前,下面的代码可以正常工作。超出此代码输出 ValueError:“ValueError:未定义的逆测地线(可能是对映点)”
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)工作正常。我知道这是一个已知错误,是否有针对此问题的已知解决方法?感谢您的帮助!
最佳答案
您发现的是 Basemap 的一些限制。让我们暂时切换到 Cartopy。工作代码会有所不同,但差别不大。
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import math
earth_radius = 6371000.
position = [300000., 75., 0.] # altitude (m), lat, long
radius = math.degrees(math.acos(earth_radius / (earth_radius + position[0])))
print(radius) # in subtended degrees??
fig = plt.figure(figsize=(12,8))
img_extent = [-180, 180, -90, 90]
# here, cartopy's' `PlateCarree` is equivalent with Basemap's `cyl` you use
ax = fig.add_subplot(1, 1, 1, projection = ccrs.PlateCarree(), extent = img_extent)
# for demo purposes, ...
# let's take 1 subtended degree = 112 km on earth surface (*** you set the value as needed ***)
ax.tissot(rad_km=radius*112, lons=position[2], lats=position[1], n_samples=64, \
facecolor='red', edgecolor='black', linewidth=0.15, alpha = 0.3)
ax.coastlines(linewidth=0.15)
ax.gridlines(draw_labels=False, linewidth=1, color='blue', alpha=0.3, linestyle='--')
plt.show()
使用上面的代码,结果图是:
现在,如果我们使用正交投影,(用这个替换相关的代码行)
ax = fig.add_subplot(1, 1, 1, projection = ccrs.Orthographic(central_longitude=0.0, central_latitude=60.0))
你得到这个情节:
关于python - 如何使用 basemap 绘制靠近两极的地球观测卫星的视野?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54202958/
有人知道新款 iPhone4 摄像头的视野值吗?我正在做一些 AR 应用程序,我想知道后置摄像头的水平和垂直角度。 谢谢! 最佳答案 如果传感器高 3.39 毫米(引用横向模式),则一半为 1.695
我在我的应用程序中使用 SceneKit View 创建了一个 3D 世界。 我需要支持所有 iOS 设备和方向。 我不懂 3D 数学、矩阵,也不太懂相机之类的东西,但我已经构建了一个 3D 世界,并
我目前正在开发增强现实应用程序。目标设备是光学透视 HMD,我需要校准其显示器以实现虚拟对象的正确注册。我用过那个implementation of SPAAM对于 android 来说,结果对于我的
我是一名优秀的程序员,十分优秀!