水文断面数据不同坐标之间的转换

Posted by WT on December 19, 2025

问题

青衣江流域的断面 有的坐标是105E、有的是102E,其中102E占多数,需要将105坐标转为102然后再转换为IFMS格式的数据导入软件进行一维建模。

解决方案

以前写过代码实现断面测量数据转换为IFMS格式数据,存在Profile_Pocess_Xlsx_2.py中,但忘记了实现断面测量数据记录中X、Y是颠倒的,处理了多次始终不对,最后看Profile_Pocess_Xlsx_2.py的源代码发现了这个问题,而后在转换坐标的时候调整了XY坐标的顺序,返回结果中,再替换对应的坐标。
wmts2

代码实现3度带105E转102E

import pandas as pd
from pyproj import Transformer

# === 1. 读取 Excel 文件 ===
input_file = r"M:\CDL\D20250915\Data\青衣江需要处理断面\测试.xlsx"  # 输入文件路径
output_file = r"M:\CDL\D20250915\Data\青衣江需要处理断面\output_4543.xlsx"  # 输出文件路径

# 假设你的数据在第一个sheet中,列名为 X, Y
df = pd.read_excel(input_file)

# === 2. 创建坐标系转换器 ===
# EPSG:4544 -> EPSG:4543
transformer = Transformer.from_crs("EPSG:4544", "EPSG:4543", always_xy=True)

# === 3. 执行转换 ===
def convert_coords(row):
    # 检查 X 和 Y 是否为空
    if pd.isna(row["X"]) or pd.isna(row["Y"]):
        return pd.Series({"X_4543": None, "Y_4543": None})  # 保留空值
    else:
        # 执行转换
        x, y = transformer.transform(row["X"], row["Y"])
        return pd.Series({"X_4543": x, "Y_4543": y})

# === 4. 应用转换并保存新列 ===
df[["X_4543", "Y_4543"]] = df.apply(convert_coords, axis=1)

# === 5. 保存结果 ===
df.to_excel(output_file, index=False)

print(f"坐标转换完成,结果已保存到:{output_file}")