#!/usr/bin/env python3 """ CoordConverter — Mercator Suite Entry Point Reads PARAM_* env vars set by agc, runs conversion, outputs SUITE_OUTPUT JSON. """ import os import sys import json import traceback # Ensure suite dir is on path sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from converter.workflow import ConversionWorkflow def get_param(name: str, default: str | None = None) -> str: val = os.environ.get(f"PARAM_{name}") if val: return val.strip() if default is not None: return default raise ValueError(f"缺少必填参数: {name}") def parse_epsg(raw: str) -> str | None: """Normalize EPSG string. '4326' → 'EPSG:4326'. 'auto' / '' → None.""" raw = raw.strip() if not raw or raw.lower() in ("auto", "none", ""): return None if raw.upper().startswith("EPSG:"): return raw.upper() return f"EPSG:{raw}" def main(): input_file = get_param("INPUT_FILE") output_file = get_param("OUTPUT_FILE") from_crs_raw = get_param("FROM_CRS", "auto") to_crs_raw = get_param("TO_CRS", "EPSG:4490") output_format = get_param("OUTPUT_FORMAT", "auto") # Validate input if not os.path.isfile(input_file): raise FileNotFoundError(f"输入文件不存在: {input_file}") from_crs = parse_epsg(from_crs_raw) to_crs = parse_epsg(to_crs_raw) # Ensure output dir exists out_dir = os.path.dirname(output_file) if out_dir: os.makedirs(out_dir, exist_ok=True) wf = ConversionWorkflow() result = wf.run( input_path=input_file, output_path=output_file, from_crs=from_crs, to_crs=to_crs, output_format=output_format, ) # Mercator standard output print("=== SUITE_OUTPUT ===") print(json.dumps(result, ensure_ascii=False, indent=2)) print("=== END_SUITE_OUTPUT ===") if __name__ == "__main__": try: main() except Exception as e: print(json.dumps({ "success": False, "error": str(e), "traceback": traceback.format_exc(), }, ensure_ascii=False)) sys.exit(1)