2016-04-07 68 views
1

我正在计算邮政编码的纬度和经度。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 

什么能问题?

回答

2

我能得到它的工作的唯一方法是使用组件关键字而通过的国家代码和地区的字典:

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'] 
+0

https://geopy.readthedocs.org/zh/1.10.0/此文档对城市的经纬度也有帮助。 –