2017-01-24 94 views
0

我有一个包含6列坐标对的数据框:度数|分钟|秒(对于经度和纬度)。这就是所谓的NAD83格式。我想将它们转换为仅有2列十进制格式的新数据帧,即NAD27。Python地理空间坐标格式转换

我通常使用的库,geopy几乎支持所有格式,所以实际上并没有专门的转换函数。我在这里查看文档以确保: https://geopy.readthedocs.io/en/1.10.0/

python是否有任何其他方式转换为NAD27?

感谢您阅读

+0

您确定要进行NAD83-> NAD27转换,或只是希望将DMS转换为十进制表示吗?一个数据(NAD)确定了坐标应该表示的方式(也就是十进制或DMS)。 –

+0

另外,您确定NAD83或NAD27数据是您想使用的数据吗?更典型的选择是GPS所使用的WGS84。 –

+0

我80%确定我需要NAD27,我必须通过其他几个库检查他们接受的内容。到目前为止,似乎NAD27是要走的路。 –

回答

1

我们假设你的数据帧df包含列lonDlonMlonSlatDlatMlatS。 然后在内部使用geopandas,shapelypyproj

import geopandas as gpd 
import numpy as np 
from shapely.geometry import Point 

def dms_to_dec(d, m, s): 
    sign = np.sign(d) 
    return d + sign * m/60 + sign * s/3600 

points = df.apply(lambda row: Point(dms_to_dec(*row[['lonD', 'lonM', 'lonS']]), 
            dms_to_dec(*row[['latD', 'latM', 'latS']])), 
        axis=1) 
gdf_nad83 = gpd.GeoDataFrame(df, geometry=points, crs={'init': 'EPSG:4269'}) 
gdf_nad27 = gdf_nad83.to_crs({'init': 'EPSG:4267'}) 
+0

哇从头开始转换,你看起来很容易!谢谢,让我试试看。 –

+0

尝试通过pip进行匀称安装时,我总是收到错误。这很奇怪。我将看到关于查找.whl文件并以这种方式进行安装。 –

+0

茶杯,身材匀称,gdal/ogr绝对不是最便利的套餐。使用Anaconda通常使它更容易,我建议尝试一下。 –