坐标系转换(wgs84 to UTM(northern hemisphere))

# wgs84 转  UTM
# -*- coding: utf-8 -*-
import arcpy
import os

def calculate_utm_zone(shp_path):
    """
    计算SHP数据的UTM 6度带号(北半球,EPSG:326XX)
    :param shp_path: SHP文件路径
    :return: UTM带号(如"32N"),目标坐标系(arcpy.SpatialReference)
    """
    # 获取数据范围的中心经度
    desc = arcpy.Describe(shp_path)
    extent = desc.extent
    center_lon = (extent.XMin + extent.XMax) / 2.0

    # 计算UTM带号(6度分带)
    utm_zone_number = int((center_lon + 180) // 6) + 1  # 公式: 带号 = floor((经度 + 180)/6) +1
    utm_zone = f"{utm_zone_number}N"  # 北半球

    # 构建目标坐标系(WGS84 UTM Zone XXN,EPSG:326XX)
    target_sr = arcpy.SpatialReference(32600 + utm_zone_number)  # EPSG代码=32600+带号

    return utm_zone, target_sr

def batch_project_to_utm(input_folder, output_folder):
    """
    批量投影转换:WGS84 → UTM
    :param input_folder: 输入文件夹(存放WGS84的SHP文件)
    :param output_folder: 输出文件夹
    """
    # 创建输出文件夹
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 遍历输入文件夹中的所有SHP文件
    arcpy.env.workspace = input_folder
    shp_files = arcpy.ListFeatureClasses("*.shp")

    for shp in shp_files:
        try:
            input_shp = os.path.join(input_folder, shp)
            # 计算UTM带号和目标坐标系
            utm_zone, target_sr = calculate_utm_zone(input_shp)
            # 构建输出路径(示例:input.shp → input_UTM32N.shp)
            output_name = f"{os.path.splitext(shp)[0]}_UTM{utm_zone}.shp"
            output_shp = os.path.join(output_folder, output_name)

            # 执行投影转换
            arcpy.Project_management(
                in_dataset=input_shp,
                out_dataset=output_shp,
                out_coor_system=target_sr,
                transform_method=""  # WGS84基准面无需变换
            )
            print(f"转换成功: {shp} → UTM{utm_zone}")

        except arcpy.ExecuteError as e:
            print(f"ArcGIS工具错误: {shp} | {arcpy.GetMessages(2)}")
        except Exception as e:
            print(f"其他错误: {shp} | {str(e)}")

# 使用示例
if __name__ == "__main__":
    input_folder = r"F:\****\bianjie"  # 替换为实际路径
    output_folder = r"F:\****\bianjie"  # 替换为实际路径
    batch_project_to_utm(input_folder, output_folder)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值