数据帧的纬度/经度到 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 计算纬度/经度距离与使用近似方法给出不同的结果