Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算卫星地平线与地面目标区域重叠的时间_Python_Shapely_Pyephem - Fatal编程技术网

Python 计算卫星地平线与地面目标区域重叠的时间

Python 计算卫星地平线与地面目标区域重叠的时间,python,shapely,pyephem,Python,Shapely,Pyephem,我正试图编写一些python代码来计算国际空间站的地平线何时与地面上的目标区域重叠。就我而言,我选择了中国。我有一些代码可以工作,但我不确定我是否在数学上正确地处理了这个问题,是否可以提供一些建议 我的代码使用shapely定义了一个粗糙多边形,使用极坐标表示中国的国家边界。然后我用ephem计算国际空间站的地面坐标和高程。标高以米为单位,因此我使用它来计算从该标高处的眼球到地平线的距离(地平线圆的半径) 接下来的想法是创建一个以国际空间站为中心的圆形多边形(.buffer(1)),只需使用形状

我正试图编写一些python代码来计算国际空间站的地平线何时与地面上的目标区域重叠。就我而言,我选择了中国。我有一些代码可以工作,但我不确定我是否在数学上正确地处理了这个问题,是否可以提供一些建议

我的代码使用shapely定义了一个粗糙多边形,使用极坐标表示中国的国家边界。然后我用ephem计算国际空间站的地面坐标和高程。标高以米为单位,因此我使用它来计算从该标高处的眼球到地平线的距离(地平线圆的半径)

接下来的想法是创建一个以国际空间站为中心的圆形多边形(
.buffer(1)
),只需使用形状良好的内置函数查看它是否与中国的多边形相交

但这有点棘手,因为中国多边形位于极坐标系中,地平线距离以米为单位。因此,为了解释经线在赤道处宽而在两极处窄的事实,我必须先计算出当前纬度处经线之间的距离,然后用它来计算圆在x和y方向上需要多少极度。然后,我把这些尺寸做成一个椭圆,看看交点是否在那里

导入时间
进口以弗所
输入数学
从shapely.geometry导入多边形,点
导入shapely.affinity
导入日期时间
R=6371*1000.0
距离1度长赤道=111321
赤道1度纬度=111000
def到达地平线的距离(标高米):
眼=R+标高\u米
返回R*math.acos(R/eye)
中国=多边形([
(48.74, 87.17),
(39.09, 74.05),
(33.25, 79.13),
(28.24, 86.44),
(29.58, 95.74),
(26.33, 98.82),
(24.29, 97.89),
(21.85, 100.82),
(23.57, 105.32),
(21.65, 108.14),
(23.04, 116.23),
(27.10, 120.31),
(30.63, 122.08),
(39.81, 124.09),
(46.87, 133.90),
(53.37, 121.73),
(46.57, 119.57),
(41.64, 105.26),
(42.75, 96.28),
(45.30, 90.76)])
name=“ISS(ZARYA)”
line1=“1 25544U 98067A 19094.21920345.00002412 00000-0 46183-4 0 9994”
line2=“2 25544 51.6444 8.9214 0002426 147.8175 11.8704 15.5248330016762”
iss=ephem.readtle(名称,第1行,第2行)
尽管如此:
iss.compute()
iss_水平面_半径=获取到水平面的距离(iss高程)
dist_1_deg_long_电流=数学cos(iss.sublat)*dist_1_deg_long_赤道
x_fact=iss_地平线_半径/距离_1度长_洋流#包括距离赤道更远的经线
y_fact=iss_地平线_半径/距离1_纬度赤道#纬度线的距离大约相等
iss_地平线_圆=点(数学度数(iss子级)、数学度数(iss子长))。缓冲区(1)
iss_horizon_ellipse=shapely.affinity.scale(iss_horizon_圆圈,x_事实,y_事实,原点='中心')
如果iss_地平线_椭圆相交(中国):
打印(“ISS地平线在中国上空!%s”%datetime.datetime.utcnow()
时间。睡眠(30)
有更好的方法吗?例如,把所有的东西都转换成笛卡尔坐标,然后把地平线变成一个完美的圆?任何建议都将不胜感激!提前谢谢