更改从Geom中提取的坐标格式

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

我使用以下代码来反向查找数据帧中的地址:

from geopy.geocoders import Nominatim
    geolocator = Nominatim(user_agent="osm")
    geolocator.reverse("54.954094, -1.60510")

我的坐标是从Line Geom中提取的,如:

LINESTRING Z (-0.046635 51.6484886 0, -0.04603...

我使用以下代码来提取坐标并执行相反的操作

from geopy.geocoders import Nominatim
def get_address(coor):
    geolocator = Nominatim(user_agent="osm")
    x=geolocator.reverse(coor)
    return x[0].split(',')[:3]

出于我不知道的原因,其中一个线串显示了带有科学记数法的坐标:

 LINESTRING Z (1.16e-6 51.6484886 0, -0.04603...

而不是 0.00000116,geolocator.reverse 函数不喜欢它,给我一个错误。 我尝试转换它,但是由于它是一个字符串而不是实际的科学格式,我陷入了困境。

希望 stackoverflow 上的聪明人可以帮助我吗? 要么是在没有科学记数法的情况下获取线串 Z 的方法,要么是提取坐标的更好方法,可以将格式更改为浮动。或者任何其他可用于获取地理线地址的选项。

非常感谢你

python geometry format latitude-longitude scientific-notation
1个回答
0
投票

您需要先处理坐标字符串,使用Python的

float()
函数可以将科学格式转换为十进制。

类似的东西:

linestring = "LINESTRING Z (1.16e-6 51.6484886 0, -0.046635 51.6484886 0)"

raw_coordinates = linestring.split('(')[1].split(')')[0]
points = raw_coordinates.split(',')

converted_coordinates = []

for point in points:
    x, y, z = point.strip().split()
    latitude = "{:.8f}".format(float(y))
    longitude = "{:.8f}".format(float(x))
    converted_coordinates .append(f"{latitude}, {longitude}")

然后您可以使用

converted_coordinates
进行反向地理编码。

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