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