计算卫星到目标点斜距 (km),用于链路预算。 使用球面几何近似: d = √((alt_sat - alt_tgt)² + (R_E·sin(angle))²) Parameters ---------- sat_pos : dict 卫星位置,含 lat/lon/alt (alt 单位 m)。 target_pos : dict 目标位置,含 lat/lon/alt (alt 单位 m)。 Returns ------- float 斜距 (km)。
(sat_pos, target_pos)
| 275 | |
| 276 | |
| 277 | def _slant_range_km(sat_pos, target_pos) -> float: |
| 278 | """计算卫星到目标点斜距 (km),用于链路预算。 |
| 279 | |
| 280 | 使用球面几何近似: |
| 281 | d = √((alt_sat - alt_tgt)² + (R_E·sin(angle))²) |
| 282 | |
| 283 | Parameters |
| 284 | ---------- |
| 285 | sat_pos : dict |
| 286 | 卫星位置,含 lat/lon/alt (alt 单位 m)。 |
| 287 | target_pos : dict |
| 288 | 目标位置,含 lat/lon/alt (alt 单位 m)。 |
| 289 | |
| 290 | Returns |
| 291 | ------- |
| 292 | float |
| 293 | 斜距 (km)。 |
| 294 | """ |
| 295 | R_E = 6371.0 # km |
| 296 | angle = calc_central_angle( |
| 297 | sat_pos["lat"], sat_pos["lon"], |
| 298 | target_pos["lat"], target_pos["lon"], |
| 299 | ) |
| 300 | alt_sat_km = sat_pos["alt"] / 1000.0 |
| 301 | alt_tgt_km = target_pos.get("alt", 0.0) / 1000.0 |
| 302 | dist = math.sqrt( |
| 303 | (alt_sat_km - alt_tgt_km) ** 2 |
| 304 | + (R_E * math.sin(math.radians(angle))) ** 2 |
| 305 | ) |
| 306 | return max(dist, 1.0) # 最小 1 km,防止除零 |
| 307 | |
| 308 | |
| 309 | def calculate_direct_rate(sat_pos, gs, data_type=None): |
no test coverage detected