如何将NAD83坐标转换成Pandas的常规gps坐标(lat/lon)?

2024-10-02 12:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我找不到库函数在python/pandas中,将坐标从NAD83标准转换为GPS纬度/经度。你知道吗

下面是一个再现这种情况的例子。我正在寻找一个函数来转换这些NAD83坐标到常规GPS纬度/经度。以下所有点预计都在St. Louis, MO左右(即大约38.6270° N90.1994° W)。你知道吗

xcoords = [894557.5, 880625.2, 896551.8, 896551.8, 896497.6, 903061.1]
ycoords = [1025952, 996012.7, 1025333, 1025333, 997157.3, 1033547]
df = pd.DataFrame({'xcoords':xcoords, 'ycoords':ycoords}) 

这意味着

xcoords     ycoords 
894557.5    1025952.0
880625.2    996012.7
896551.8    1025333.0
896551.8    1025333.0
896497.6    997157.3
903061.1    1033547.0

数据源=http://www.slmpd.org/Crimereports.shtml

元数据=http://www.slmpd.org/Crime/CrimeDataFrequentlyAskedQuestions.pdf(参见XCoord and YCoord - what are these coordinates of/for?


Tags: orghttppandas标准www情况gps例子
1条回答
网友
1楼 · 发布于 2024-10-02 12:25:15

首先我们需要确定密苏里州圣路易斯的spc或FIPS区域,从NOAA Manual NPS NGS 5我们得到区域#2401。然后我们从special reference下载相应的proj字符串(或者您可以从NOAA手册第68页的附录A中获取必要的数据)。利用这些数据,我们可以使用pyproj将SPCS数据转换为gps lon/lat值:

import pandas as pd
import pyproj

xcoords = [894557.5, 880625.2, 896551.8, 896551.8, 896497.6, 903061.1]
ycoords = [1025952, 996012.7, 1025333, 1025333, 997157.3, 1033547]
df = pd.DataFrame({'xcoords':xcoords, 'ycoords':ycoords})

fips2401 = pyproj.Proj("+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.9999333333333333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs")
wgs84 = pyproj.Proj("+init=EPSG:4326")

df[['lon', 'lat']] = pd.DataFrame(pyproj.transform(fips2401, wgs84, df.xcoords.to_numpy(), df.ycoords.to_numpy())).T

结果:

    xcoords    ycoords        lon        lat
0  894557.5  1025952.0 -90.239655  38.650896
1  880625.2   996012.7 -90.288682  38.568784
2  896551.8  1025333.0 -90.232678  38.649181
3  896551.8  1025333.0 -90.232678  38.649181
4  896497.6   997157.3 -90.233154  38.571814
5  903061.1  1033547.0 -90.209794  38.671681

相关问题 更多 >

    热门问题