我如何将这些坐标转换为实数?

问题描述 投票:0回答:1

我在一个数据框中的两列中有这样的内容。data= pd.read_csv('xxxxxxxxxxxx.dat',delimiter=';',encoding='latin_1') 在python中纬度=60°11.7765经度=024°57.3073。

而我想得到这个。

纬度=60.1177....经度=024.573....。

python coordinates transform openstreetmap geopandas
1个回答
0
投票

你问的问题似乎是想简单的替换一些字符,而不是真正的坐标转换。谢谢你的评论,我明白了这种歧义是由于你自己不清楚如何进行转换。在不同类型的坐标中,我们发现DDM(度数十进制分)格式。当你问 "一个实数 "时,你实际上指的是DD格式(十进制度数格式,例如13.41°N).所以在DDM中,坐标纬度:15°41.13 N由3个值和一个参考值组成。

  • D:度,这里是15
  • M:分钟,这里是41
  • S:秒,这里是13
  • 北或南(经度有东或西)

作为 维基百科说,从DDM转换为DD的公式为

decimal degrees = degrees + (minutes/60 + seconds/3600)

我尝试了两个在线转换器(一个两种),看来你写的坐标是DMM格式的。与DDM格式唯一不同的是,这里的秒已经被60除掉了,所以我们可以列出。

  • D: 度,这里是15
  • M:分钟,这里是41
  • S:秒60,这里是13
  • 北或南(经度有东或西)

也就是说,从DMM到DD的公式是

decimal degrees = degrees + (minutes/60 + seconds/60)

编码

import pandas as pd

df_csv = pd.read_csv('file.dat',delimiter=';',encoding='UTF_8')
latitude = df_csv['Latitude'].astype('str')
for element in latitude:
    degree= float(element[:element.find('°')])
    minutes = float(element[(element.find('°')+1):(element.find('.'))])
    seconds= float(element[element.find('.'):])
    decimalDegrees=degree + minutes/60 + seconds/60

输入

Lat: 31°11.7765

产量

31.196275

在你的坐标中,你没有提到任何基点。规则是,如果是N或E,结果是正数,如果是S或W,结果是负数(-1*输出)

© www.soinside.com 2019 - 2024. All rights reserved.