我正在用邮政编码计算纬度和经度。
我已安装geopy
pip install geopy
在我的代码中:
from geopy.geocoders import GoogleV3
def get_lat_lng(zip_code):
lat, lng = False, False
geocoder = GoogleV3()
location = geocoder.geocode(query=str(zip_code))
if location:
print location
lat, lng = location.latitude, location.longitude
return lat, lng
当我打电话给上述方法时,我正在给巴基斯坦拉合尔的邮政编码54000。
get_lat_lng(54000)
纬度和经度的输出是:
(46.975033, 31.994583)
拉合尔的实际纬度和经度是
31.5546° N, 74.3572° E
在我获得的位置印刷品上:
Mykolaiv, Mykolaivs'ka oblast, Ukraine, 54000
有什么问题?
答案 0 :(得分:3)
我能让它发挥作用的唯一方法是使用components关键字传递国家代码和地区的字典:
from geopy.geocoders import GoogleV3
def get_lat_lng(zip_code):
geocoder = GoogleV3()
location = geocoder.geocode(query=str(zip_code),components={"country": "PK","locality":"lahore"})
if location:
print location._address
lat, lng = location.latitude, location.longitude
return lat, lng
print(get_lat_lng(54000))
哪个输出:
Lahore, Pakistan
(31.55460609999999, 74.3571581)
另一种选择是尝试使用region=
关键字和/或明确地将域名传递给默认maps.google.com
以外的其他内容。
甚至将exactly_one
设为False:
from geopy.geocoders import GoogleV3
def get_lat_lng(zip_code):
lat, lng = False, False
geocoder = GoogleV3()
location = geocoder.geocode(query=str(zip_code), exactly_one=False)
if location:
print [loc.address for loc in location]
print(get_lat_lng(54000))
不返回任何匹配。
[u"Mykolaiv, Mykolaivs'ka oblast, Ukraine, 54000", u'54000 Nancy, France', u'54000, Thailand', u'Kampung Datuk Keramat, 54000 Kuala Lumpur, Federal Territory of Kuala Lumpur, Malaysia', u'Tlalnepantla Centro, 54000 Tlalnepantla, M\xe9x., Mexico', u'54000, Broken Bow, OK 74728, USA', u'54000, Oklahoma, USA']