fix: globe run selection fallback + arc start height 5.2 / ecc 0.85 to avoid earth intersection

This commit is contained in:
PM-pinou
2026-07-18 21:51:26 +08:00
parent 3664d2d8ee
commit 3c63fe9d23
2 changed files with 32 additions and 16 deletions
+29 -13
View File
@@ -1122,20 +1122,12 @@ def globe_view(request):
except AnalysisRun.DoesNotExist:
pass
# Check if user-selected runs have valid files; if not, fall through
all_selected_failed = bool(selected_ids_list)
fallback_run = None
if not selected_runs:
# Default: iterate from latest completed run backward until we find one with files
for latest in AnalysisRun.objects.filter(status='completed').order_by('-id'):
if not latest.csv_glob:
continue
glob_path = Path(latest.csv_glob)
if '/*' in latest.csv_glob:
# Glob pattern — check parent dir
if glob_path.parent.is_dir():
selected_runs = [latest]
break
elif glob_path.exists():
selected_runs = [latest]
break
all_selected_failed = False
flows = []
@@ -1144,11 +1136,35 @@ def globe_view(request):
lf, schema, rc, fc, mem = load_csv_directory(run.csv_glob)
df = lf.head(MAX_ROWS_PER_RUN).collect()
flows.extend(_extract_flows_from_df(df, MAX_ROWS_PER_RUN))
all_selected_failed = False
break # stop after first successful load
except Exception as exc:
logger.warning('[GLOBE] Failed to load run %s (%s): %s', run.id, run.csv_glob, exc)
continue
if all_selected_failed or not flows:
# Fallback: latest completed run with valid files
for latest in AnalysisRun.objects.filter(status='completed').order_by('-id'):
if not latest.csv_glob:
continue
glob_path = Path(latest.csv_glob)
try:
if '/*' in latest.csv_glob:
if glob_path.parent.is_dir():
lf, schema, rc, fc, mem = load_csv_directory(latest.csv_glob)
df = lf.head(MAX_ROWS_PER_RUN).collect()
flows.extend(_extract_flows_from_df(df, MAX_ROWS_PER_RUN))
selected_runs = [latest]
break
elif glob_path.exists():
lf, schema, rc, fc, mem = load_csv_directory(latest.csv_glob)
df = lf.head(MAX_ROWS_PER_RUN).collect()
flows.extend(_extract_flows_from_df(df, MAX_ROWS_PER_RUN))
selected_runs = [latest]
break
except Exception:
continue
resp = render(request, 'tianxuan/globe.html', {
'geo_flows': json.dumps(flows),
'all_runs': all_runs,
+3 -3
View File
@@ -183,10 +183,10 @@ var SPACING = 0.018;
var arcData = [];
flowData.slice(0, 120).forEach(function(f) {
var src = ll2pos(f.slat, f.slon, 5.03);
var dst = ll2pos(f.dlat, f.dlon, 5.03);
var src = ll2pos(f.slat, f.slon, 5.2);
var dst = ll2pos(f.dlat, f.dlon, 5.2);
if (src.distanceTo(dst) < 1.0) return;
var ep = ellipseParams(src, dst, 0.75);
var ep = ellipseParams(src, dst, 0.85);
if (!ep) return;
var curve = ellipseCurve(ep);
var c = arcColors[f.tls] || 0x4cc9f0;