2

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

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

有什么问题?

4

1 回答 1

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=关键字和/或显式传递域而不是 default 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']
于 2016-04-07T14:17:41.573 回答