fix: globe run selection fallback + arc start height 5.2 / ecc 0.85 to avoid earth intersection
This commit is contained in:
+29
-13
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user