python代码实现xyz点文件高程基准转换(从wgs84到85国家高程)

该文章已生成可运行项目,

前言

从nasa上下载的12.5m的dem在和国内的dem融合过程中发现他们之间存在高程差值,nasa上12.5m的dem的高程基准是WGS84,而国内的数据大多采用的是1985国家高程基准;即前一个测量的是椭球高,后一个测量的是大地高。一般来讲在我国东北地区,椭球高>大地高。

目前由于我的数据需要,只用处理xyz点文件即可,即使用python代码批量将所有点的z值从基于WGS84的高程基准转为基于85国家高程基准。

一、基本原理

大地高 (Orthometric height)= 椭球高 (Ellipsodial height) – 大地水准面差距(Geoid height)

大地高:1985国家基准

椭球高:WGS84

大地水准面差距:可从全球大地水准面模型中获得

全球大地水准面模型主要有:EGM2008、EGM84、EGM96,我在编写python代码的时候采用了EGM2008模型,使用的模型精度是2.5'。EGM2008的模型精度有1'、2.5'、5',数值越大模型精度越小。我根据我的工作需要选择了2.5'精度的。

EGM2008模型下载地址:https://www.agisoft.com/zh-cn/downloads/geoids/

二、python代码

import rasterio
import pandas as pd
import numpy as np

# 1. 配置文件路径
xyz_file_path = "path/to/your_file_xyz4326.xyz"  # 输入文件路径(EPSG:4326)
egm2008_tif_path = "path/to/egm2008.tif"  # EGM2008 文件路径
output_4326_path = "path/to/output_file_xyz4326.xyz"  # 输出文件路径(EPSG:4326)

# 2. 加载 EGM2008 数据
with rasterio.open(egm2008_tif_path) as geoid:
    geoid_data = geoid.read(1)  # 将 EGM2008 数据载入内存
    transform = geoid.transform  # 获取栅格的变换参数

# 获取大地水准面偏差 N 值的函数
def get_geoid_undulation(lon, lat):
    """获取大地水准面偏差 N 值"""
    col, row = ~transform * (lon, lat)  # 经纬度转栅格索引
    col, row = int(col), int(row)      # 索引取整
    if 0 <= col < geoid_data.shape[1] and 0 <= row < geoid_data.shape[0]:
        return geoid_data[row, col]
    else:
        raise ValueError(f"坐标超出范围:lon={lon}, lat={lat}")

# 3. 主处理逻辑
print("正在读取 XYZ 文件...")
xyz_data = pd.read_csv(xyz_file_path, sep='\s+', header=None, names=["Lon", "Lat", "Z"])

# 处理高程基准转换
print("正在进行高程基准转换...")
results_4326 = []

for index, row in xyz_data.iterrows():
    try:
        lon, lat, z = row["Lon"], row["Lat"], row["Z"]

        # 获取 N 值
        N = get_geoid_undulation(lon, lat)

        # 转换为 1985 国家高程基准
        H = z - N

        # 保存 EPSG:4326 的结果
        results_4326.append([lon, lat, H])

    except Exception as e:
        print(f"处理点 ({lon}, {lat}, {z}) 时发生错误: {e}")
        continue

# 保存结果到文件
print("正在保存结果到文件...")
# 保存 EPSG:4326
pd.DataFrame(results_4326, columns=["Lon", "Lat", "Z"]).to_csv(output_4326_path, sep=" ", header=False, index=False)

print(f"处理完成!结果已保存到:\nEPSG:4326 文件:{output_4326_path}")

运行该代码只需要修改 #1.配置文件路径 。

 输入的xyz文件的投影坐标系需要是EPSG:4326,不是的话需要自己转一下。输出的xyz文件也是epsg4326坐标系下的。

本文章已经生成可运行项目
本软件是“测量计算工具包软件”的全面升级版。升级后的软件强化了坐标转换的功能,精简了其他不大使用的功能,软件名称更改为“坐标转换”,2013是全面升级后的第一个版本。 为适应国家测绘局地理信息办公室《2000国家大地坐标系推广使用技术指南》(以下简称《指南》)和《大地测量控制坐标转换技术规程》(以下简称《规程》)的要求,坐标转换2013除保留原有的布尔沙模型和二维四参数模型外,增加了三维七参数、二维七参数、三维四参数和多项式拟合模型。另外,在转换参数的表达形式上也进行了调正,将“尺度比”改为“尺度变化”,与《指南》和《规程》保持一致。 升级后的坐标转换软件对程序界面和代码也进行了优化,参数的数值表示方式由固定宽度改为科学表示方式,使得其计算精度更高。 升级前的“椭球间的坐标转换”对应于升级后的“布尔沙模型”,升级前的“多公共相似变换”对应于升级后的“二维四参数模型”。这两种模型升级前的转换参数完全可以用于升级后的软件,仅需将将“尺度比”换算为“尺度变化”即可,换算公式为:尺度变化D=尺度比K-1。 如果用户拥有转换区域的公共(《指南》和《规程》叫“重合”)的话,建议用升级后的软件重新计算转换参数。 必须说明的是,不同的转换模型,转换参数是不能互换的。 本软件的所有转换模型的计算公式都来源于《指南》和《规程》,仅对“多项式拟合”公式的表达形式进行了格式上的统一。 坐标转换2014版增加了GPS高程拟合和墨卡托投影正反算转换
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值