TXT / Excel(CSV) / SHP 三种格式任意互转
支持 WGS84 / CGCS2000 / Xian80 / Beijing54 / Web Mercator 坐标系转换
由 Mapo 🗺️ 自动生成
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
#!/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()
|