geopy 没有显示正确的输出

geopy does not show correct output

我正在根据邮政编码计算纬度和经度。

我已经安装了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

有什么问题?

我让它工作的唯一方法是使用 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= 关键字 and/or 显式传递域,而不是默认值 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)) 

不return任何匹配项。

[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']