Files
mayihua e9f87fc693 feat: CoordConverter 坐标转换套件 v1.0.0
TXT / Excel(CSV) / SHP 三种格式任意互转
支持 WGS84 / CGCS2000 / Xian80 / Beijing54 / Web Mercator 坐标系转换

由 Mapo 🗺️ 自动生成
2026-07-29 12:49:08 +08:00

80 lines
2.1 KiB
Python

#!/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)