我使用以下代码来反向查找数据帧中的地址:
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的
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
进行反向地理编码。