MCPcopy Create free account
hub / github.com/Tong89/smartNode / TestCheckVisibility

Class TestCheckVisibility

tests/test_visibility.py:113–229  ·  view source on GitHub ↗

仰角可见性计算:包含正上方边界、阈值边界与常规场景。

Source from the content-addressed store, hash-verified

111# check_visibility #
112# --------------------------------------------------------------------------- #
113class TestCheckVisibility:
114 """仰角可见性计算:包含正上方边界、阈值边界与常规场景。"""
115
116 # --- 正上方边界(d < 0.001 特殊分支) ---
117
118 def test_overhead_visible_min_el_0(self):
119 """卫星正上方:d < 0.001,仰角 = 90°,任何 min_elevation 阈值均可见。"""
120 sat = {"lat": 35.0, "lon": 139.0, "alt": 500000}
121 gs = {"lat": 35.0, "lon": 139.0}
122 assert check_visibility(sat, gs, min_elevation=0) is True
123
124 def test_overhead_visible_min_el_10(self):
125 """正上方仰角 = 90°,10° 阈值也应可见。"""
126 sat = {"lat": 35.0, "lon": 139.0, "alt": 500000}
127 gs = {"lat": 35.0, "lon": 139.0}
128 assert check_visibility(sat, gs, min_elevation=10) is True
129
130 def test_overhead_visible_min_el_90(self):
131 """正上方仰角 = 90°,90° 阈值也应可见(临界等号)。"""
132 sat = {"lat": 35.0, "lon": 139.0, "alt": 500000}
133 gs = {"lat": 35.0, "lon": 139.0}
134 assert check_visibility(sat, gs, min_elevation=90) is True
135
136 def test_overhead_different_altitude(self):
137 """不同高度的正上方卫星,均应可见(仰角 = 90°)。"""
138 gs = {"lat": 51.5, "lon": -0.1}
139 for alt_m in [300000, 550000, 1000000, 35786000]:
140 sat = {"lat": 51.5, "lon": -0.1, "alt": alt_m}
141 assert check_visibility(sat, gs, min_elevation=10) is True, (
142 f"高度 {alt_m} m 的正上方卫星不应不可见"
143 )
144
145 # --- 仰角阈值边界 ---
146
147 def test_small_angle_below_threshold(self):
148 """地心角约 0.5°、500km 高度:精确 ENU 仰角约 83°,远高于 10° 阈值,应可见。
149
150 注:原球面正弦近似错误地将此情形计算为仰角 ~6.3°;ENU 拓扑坐标
151 给出的 ~83° 才是物理正确值(卫星几乎在正上方)。
152 """
153 sat = {"lat": 35.5, "lon": 139.0, "alt": 500000}
154 gs = {"lat": 35.0, "lon": 139.0}
155 assert check_visibility(sat, gs, min_elevation=10) is True
156
157 def test_moderate_angle_above_threshold(self):
158 """地心角约 1°(仰角约 12.5°)> 10°,可见。"""
159 sat = {"lat": 36.0, "lon": 139.0, "alt": 500000}
160 gs = {"lat": 35.0, "lon": 139.0}
161 assert check_visibility(sat, gs, min_elevation=10) is True
162
163 def test_large_angle_below_threshold(self):
164 """地心角约 60°(仰角约 3.7°)< 10°,不可见。"""
165 sat = {"lat": 95.0, "lon": 139.0, "alt": 500000}
166 gs = {"lat": 35.0, "lon": 139.0}
167 assert check_visibility(sat, gs, min_elevation=10) is False
168
169 def test_min_elevation_zero_always_passes_for_near_sat(self):
170 """min_elevation=0 时,较近距离的卫星始终可见。"""

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected