feat: CoordConverter 坐标转换套件 v1.0.0
TXT / Excel(CSV) / SHP 三种格式任意互转
支持 WGS84 / CGCS2000 / Xian80 / Beijing54 / Web Mercator 坐标系转换
由 Mapo 🗺️ 自动生成
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
#!/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)
|
||||
Reference in New Issue
Block a user