数据帧的纬度/经度到 UTM 转换失败

Posted

技术标签:

【中文标题】数据帧的纬度/经度到 UTM 转换失败【英文标题】:Lat/Long to UTM conversion failing for dataframe 【发布时间】:2022-01-15 09:34:07 【问题描述】:

当我在数据帧上使用utm.from latlon() 函数时出现错误OutOfRangeError: latitude out of range (must be between 80 deg S and 84 deg N)"

但是,当我尝试单个纬度/经度时,它会返回结果。 我不确定发生了什么。

例如数据框

    Lat          Lon
0   49.183630   -121.936812
1   43.901052   -78.939154
2   43.887452   -78.871573
3   42.882137   -82.445210
4   43.372565   -79.762019

我的纬度/经度没有颠倒,正如我检查的那样。

假设 utm 函数定义为:

def f(x,y):
  return utm.from_latlon(x,y)

我将函数调用为:

dataframe.apply(lambda row: f(row['Lat'], row['Lon']), axis=1)

【问题讨论】:

utm.from_latlon() 是如何定义的? 也很好奇为什么 utm 会歧视两极附近的坐标 我在问题中提供了更多上下文以及我是如何定义函数的。 【参考方案1】:

假设你使用utm 包:

import pandas as pd
import utm

df = pd.read_csv('latlon.csv')
df['utm'] = df.apply(lambda row: utm.from_latlon(*row), axis=1)
utm_cols = ['easting', 'northing', 'zone_number', 'zone_letter']
for n, col in enumerate(utm_cols):
    df[col] = df['utm'].apply(lambda location: location[n])
df = df.drop('utm', axis=1)
print(df)

输出

         Lat         Lon        easting      northing  zone_number zone_letter
0  49.183630 -121.936812  577477.332853  5.448413e+06           10           U
1  43.901052  -78.939154  665502.266670  4.862947e+06           17           T
2  43.887452  -78.871573  670968.577419  4.861574e+06           17           T
3  42.882137  -82.445210  381977.464091  4.748739e+06           17           T
4  43.372565  -79.762019  600294.444939  4.802933e+06           17           T

【讨论】:

然后查看你的数据,显然数据有问题。

以上是关于数据帧的纬度/经度到 UTM 转换失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 boost::geometry 将纬度和经度转换为 UTM

通过转换为 utm 计算纬度/经度距离与使用近似方法给出不同的结果

在 SQL Server 中将经纬度转换为 UTM X 和 UTM Y 坐标的函数

显示经度/纬度点的子集?

python 经纬度坐标转换为UTM坐标方法与结果验证分析

python 经纬度坐标转换为UTM坐标方法与结果验证分析