#!/usr/bin/env python3 """ CoordConverter CLI — standalone command-line interface. """ import argparse import sys import os sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from converter.workflow import ConversionWorkflow from core.coord_transform import CoordTransformer def build_parser() -> argparse.ArgumentParser: p = argparse.ArgumentParser(prog="coord-converter", description="坐标转换工具") sub = p.add_subparsers(dest="command") # convert cp = sub.add_parser("convert", help="转换单个文件") cp.add_argument("input", help="输入文件路径") cp.add_argument("-o", "--output", required=True, help="输出文件路径") cp.add_argument("--from-crs", default="auto", help="源坐标系 EPSG (默认 auto)") cp.add_argument("--to-crs", default="EPSG:4490", help="目标坐标系 EPSG (默认 CGCS2000)") cp.add_argument("--output-format", default="auto", help="强制输出格式") # list-crs lp = sub.add_parser("list-crs", help="列出支持的坐标系") return p def main(): parser = build_parser() args = parser.parse_args() if args.command == "convert": wf = ConversionWorkflow() result = wf.run( input_path=args.input, output_path=args.output, from_crs=args.from_crs if args.from_crs != "auto" else None, to_crs=args.to_crs, output_format=args.output_format, ) print(f"✅ 转换完成: {result['output']}") print(f" 记录数: {result['feature_count']}") print(f" 坐标系: {result['crs']}") elif args.command == "list-crs": for crs in CoordTransformer.list_supported(): print(f" {crs['name']:16s} {crs['epsg']:12s} {crs['desc']}") else: parser.print_help() if __name__ == "__main__": main()