如何使用Python

时间:2018-04-08 02:27:01

标签: python google-geocoding-api

Google逆向地理编码存在一个主要问题。我使用API​​密钥收到了地理信息,但我无法使用一种语法来获取城市名称,因为城市名称位于不同的位置。我列出了日本近2000个坐标。请帮忙。非常感谢!让我详细解释一下

这些坐标(35.098129999999998,135.71893)返回以下信息,抓住城市,我需要切片[2] ['short_name'],注意'types'是'locality'。

[{'long_name': 'Unnamed Road', 'short_name': 'Unnamed Road', 'types':                   ['route']}, 
{'long_name': 'Kita-ku', 'short_name': 'Kita-ku', 'types': ['political', 'sublocality', 'sublocality_level_1']}, 
{'long_name': 'Kyōto-shi', 'short_name': 'Kyōto-shi', 'types': ['locality', 'political']}, 
{'long_name': 'Kyōto-fu', 'short_name': 'Kyōto-fu', 'types': ['administrative_area_level_1', 'political']}, 
{'long_name': 'Japan', 'short_name': 'JP', 'types': ['country', 'political']}]

这些坐标(26.211069999999999,127.6876)返回以下信息,以获取我需要切片的城市名称[4] ['short_name'],注意'types'也是'locality'。

[{'long_name': '29', 'short_name': '29', 'types': ['premise']},     
{'long_name': '4', 'short_name': '4', 'types': ['political', 'sublocality', 'sublocality_level_4']}, 
{'long_name': '1 Chome', 'short_name': '1 Chome', 'types': ['political', 'sublocality', 'sublocality_level_3']}, 
{'long_name': 'Higawa', 'short_name': 'Higawa', 'types': ['political', 'sublocality', 'sublocality_level_2']}, 
{'long_name': 'Naha-shi', 'short_name': 'Naha-shi', 'types': ['locality', 'political']}, {'long_name': 'Okinawa-ken', 'short_name': 'Okinawa-ken', 'types': ['administrative_area_level_1', 'political']},  
{'long_name': 'Japan', 'short_name': 'JP', 'types': ['country', 'political']}, {'long_name': '900-0022', 'short_name': '900-0022', 'types': ['postal_code']}]

这些坐标(35.670479999999998,139.74091999999999)返回以下信息,要获取城市名称,我需要切片[5] ['short_name'],注意'types'是'administrative_area_level_1'。

[{'long_name': 'M.Y赤坂', 'short_name': 'M.Y赤坂', 'types': ['premise']}, 
{'long_name': '11', 'short_name': '11', 'types': ['political', 'sublocality', 'sublocality_level_4']}, 
{'long_name': '2 Chome', 'short_name': '2 Chome', 'types': ['political', 'sublocality', 'sublocality_level_3']}, 
{'long_name': 'Akasaka', 'short_name': 'Akasaka', 'types': ['political', 'sublocality', 'sublocality_level_2']}, 
{'long_name': 'Minato-ku', 'short_name': 'Minato-ku', 'types': ['locality', 'political']}, 
{'long_name': 'Tōkyō-to', 'short_name': 'Tōkyō-to', 'types': ['administrative_area_level_1', 'political']}, 
{'long_name': 'Japan', 'short_name': 'JP', 'types': ['country', 'political']}, 
{'long_name': '107-0052', 'short_name': '107-0052', 'types': ['postal_code']}]

城市名称处于JSON格式的不同位置,“类型”存在问题,如何区分“administrative_area_level_1”和“locality”? 是否有可能提出if语句来准确选择我想要的内容?下面是整个代码

import googlemaps
import pandas as pd
import numpy as np

gmaps=googlemaps.Client(key='myapikey')
co=[(35.098129999999998, 135.71893),(26.211069999999999, 127.6876),(35.670479999999998, 139.74091999999999)]
for x, y in co:
   coor=(x,y)
   reverse_geocode_result = gmaps.reverse_geocode(coor)
   print (reverse_geocode_result[0]['address_components'])

1 个答案:

答案 0 :(得分:0)

我认为你可以获得城市名称但它需要几步。首先,只需为每个坐标获取locality和administrative_area_level_1。之后你得到所有这些都只是消除了不是城市名称的元素。

import googlemaps
import pandas as pd
import numpy as np

gmaps=googlemaps.Client(key='my key')
co=[(35.098129999999998, 135.71893),(26.211069999999999, 127.6876),(35.670479999999998, 139.74091999999999)]
s = [] # Same as your code but I make an empty list
for x, y in co:
   coor = (x,y)
   reverse_geocode_result = gmaps.reverse_geocode(coor)
   s.append(reverse_geocode_result[0]['address_components'])

result = [] # result for each element contains both local and adm_lvl_1
for j in s:
    l=[]
    for i in j:
        if i['types'][0]=='administrative_area_level_1':
            l.append(i['long_name'])
        elif i['types'][0]=='locality':
            l.append(i['long_name'])
    result.append(l)

此处结果将包含具有locality和administrative_area_level_1的每个元素的列表。要区分城市,您需要列出日本所有城市的名单。然后,您可以为每个结果的元素进行循环,以获得城市名称。