检索多个位置的经度和纬度
Retrieving longitude and latitude of more than one location
如何获取多个地点的经纬度?我正在尝试获取多伦多 15 个行政区的坐标。我试过了
address = ['Toronto Canada', 'East York', 'Davenport', 'Eglinton', 'Etobicoke', 'Toronto-Danforth']
geolocator = Nominatim(user_agent="foursquare_agent")
location = geolocator.geocode(address)
lat = location.latitude
lng = location.longitude
print(lat, lng)
上面returns:AttributeError:'NoneType'对象没有属性'latitude'
单个 geocode()
查询将搜索单个位置。要查找多个位置,您需要 运行 一个循环。
city = 'Toronto, Canada'
boroughs = ['East York', 'Davenport', 'Eglinton', 'Etobicoke', 'Toronto-Danforth']
for borough in boroughs:
address = borough + ', ' + city
location = geolocator.geocode(address)
lat = location.latitude
lng = location.longitude
print(address, lat, lng)
您收到该错误是因为您向 geolocator.geocode
传递了错误的类型,它将查询作为 dict
(用于结构化查询)或 str
,而您试图传递一个 Python 列表。
查看 GeoPy 文档:https://geopy.readthedocs.io/en/stable/#nominatim
因此,获取所需信息的一种直接但不一定有效的方法是将编码为字符串的每个自治市镇分别传递给您的地理定位器实例。像下面这样的东西应该可以工作:
# your usual imports and data assigments
locations = [geolocator.geocode(borough) for borough in address]
from pprint import pprint
pprint(locations)
---
[Location(Toronto, Golden Horseshoe, Ontario, M6K 1X9, Canada, (43.653963, -79.387207, 0.0)),
Location(East York, Toronto—Danforth, East York, Toronto, Golden Horseshoe, Ontario, M4J 2G9, Canada, (43.6913391, -79.3278212, 0.0)),
Location(Davenport, Scott County, Iowa, USA, (41.5236436, -90.5776368, 0.0)),
Location(Eglinton, County Londonderry, Northern Ireland, BT47 3GY, United Kingdom, (55.0266097, -7.176451, 0.0)),
Location(Etobicoke, Toronto, Golden Horseshoe, Ontario, Canada, (43.67145915, -79.5524920661167, 0.0)),
Location(Toronto—Danforth, Old Toronto, Toronto, Golden Horseshoe, Ontario, Canada, (43.6789439, -79.3448597, 0.0))]
从这里,您应该能够从这个 Location
对象列表中获取纬度、经度和任何您需要的其他内容。
另请注意,"Davenport" 和 "Eglinton" 显然不够明确,因此您可能需要指定 "Davenport, Toronto" 等等。
最后说明:Nominatim
class 的 geocode
方法确实有一个可选参数 exactly_one
(默认为 True
),所以也许有确实存在某种方法可以让您通过单个方法调用获取整个不同地址列表的地理编码位置,但我并没有真正研究如何做到这一点(如果它确实可能的话),因为我从来没有使用过 GeoPy,我自己也不熟悉地理编码的主题。
顺便说一句,我也是多伦多人,所以我知道你提到的所有这些地方:D
如何获取多个地点的经纬度?我正在尝试获取多伦多 15 个行政区的坐标。我试过了
address = ['Toronto Canada', 'East York', 'Davenport', 'Eglinton', 'Etobicoke', 'Toronto-Danforth']
geolocator = Nominatim(user_agent="foursquare_agent")
location = geolocator.geocode(address)
lat = location.latitude
lng = location.longitude
print(lat, lng)
上面returns:AttributeError:'NoneType'对象没有属性'latitude'
单个 geocode()
查询将搜索单个位置。要查找多个位置,您需要 运行 一个循环。
city = 'Toronto, Canada'
boroughs = ['East York', 'Davenport', 'Eglinton', 'Etobicoke', 'Toronto-Danforth']
for borough in boroughs:
address = borough + ', ' + city
location = geolocator.geocode(address)
lat = location.latitude
lng = location.longitude
print(address, lat, lng)
您收到该错误是因为您向 geolocator.geocode
传递了错误的类型,它将查询作为 dict
(用于结构化查询)或 str
,而您试图传递一个 Python 列表。
查看 GeoPy 文档:https://geopy.readthedocs.io/en/stable/#nominatim
因此,获取所需信息的一种直接但不一定有效的方法是将编码为字符串的每个自治市镇分别传递给您的地理定位器实例。像下面这样的东西应该可以工作:
# your usual imports and data assigments
locations = [geolocator.geocode(borough) for borough in address]
from pprint import pprint
pprint(locations)
---
[Location(Toronto, Golden Horseshoe, Ontario, M6K 1X9, Canada, (43.653963, -79.387207, 0.0)),
Location(East York, Toronto—Danforth, East York, Toronto, Golden Horseshoe, Ontario, M4J 2G9, Canada, (43.6913391, -79.3278212, 0.0)),
Location(Davenport, Scott County, Iowa, USA, (41.5236436, -90.5776368, 0.0)),
Location(Eglinton, County Londonderry, Northern Ireland, BT47 3GY, United Kingdom, (55.0266097, -7.176451, 0.0)),
Location(Etobicoke, Toronto, Golden Horseshoe, Ontario, Canada, (43.67145915, -79.5524920661167, 0.0)),
Location(Toronto—Danforth, Old Toronto, Toronto, Golden Horseshoe, Ontario, Canada, (43.6789439, -79.3448597, 0.0))]
从这里,您应该能够从这个 Location
对象列表中获取纬度、经度和任何您需要的其他内容。
另请注意,"Davenport" 和 "Eglinton" 显然不够明确,因此您可能需要指定 "Davenport, Toronto" 等等。
最后说明:Nominatim
class 的 geocode
方法确实有一个可选参数 exactly_one
(默认为 True
),所以也许有确实存在某种方法可以让您通过单个方法调用获取整个不同地址列表的地理编码位置,但我并没有真正研究如何做到这一点(如果它确实可能的话),因为我从来没有使用过 GeoPy,我自己也不熟悉地理编码的主题。
顺便说一句,我也是多伦多人,所以我知道你提到的所有这些地方:D