geopy没有显示正确的输出

时间:2016-04-07 13:32:15

标签: python latitude-longitude geopy

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

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

有什么问题?

1 个答案:

答案 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']