使用Google Maps API根据Pandas中的列表查找街道交叉口的经纬度坐标

mccptt67  于 2023-11-15  发布在  Go
关注(0)|答案(1)|浏览(131)

我正在完成我的第一个数据项目,有一个显示街道交叉口的框架,看起来像这样:

from_station_name           count
86  Canal St & Adams St         50575
152 Clinton St & Madison St         5990
157 Clinton St & Washington Blvd    45378
159 Columbus Dr & Randolph St   31370
252 Franklin St & Monroe St         30832
321 Kingsbury St & Kinzie St    30654
175 Daley Center Plaza          30423
89  Canal St & Madison St           27138
410 Michigan Ave & Washington St    25468
330 LaSalle St & Jackson Blvd   23021

字符串
我试着找到交叉点的经纬度坐标,并把这些信息放在这个坐标框的另外两列中。
我尝试使用Google Maps API编写一个循环,如下所示:

def geocode_intersection(api_key, intersection):
    base_url = "https://maps.googleapis.com/maps/api/geocode/json?"
    params = {"address": intersection, "key": api_key}
    response = requests.get(base_url, params=params)
    if response.status_code == 200:
        data = json.loads(response.text)
        if data["status"] == "OK":
            location = data["results"][0]["geometry"]["location"]
            return location["lat"], location["lng"]
        else:
            return None
    else:
        return None

api_key = "MY_API_KEY"

# Initialize new columns
busiest_stations_subs["latitude"] = np.nan
busiest_stations_subs["longitude"] = np.nan

# Loop through the DataFrame
for index, row in busiest_stations_subs.iterrows():
    intersection = row["from_station_name"]
    result = geocode_intersection(api_key, intersection)
    if result is not None:
        latitude, longitude = result
        busiest_stations_subs.at[index, "latitude"] = latitude
        busiest_stations_subs.at[index, "longitude"] = longitude


并得到了许多交叉点正确,但许多是NaN这样:

580            Wabash Ave & Roosevelt Rd  15914  41.861202  -87.943284
544                 State St & Kinzie St  15764        NaN         NaN
191               Damen Ave & Pierce Ave  15546  41.909363  -87.677420
339           Lake Shore Dr & North Blvd  15520  28.107321  -82.729723
235             Fairbanks Ct & Grand Ave  15477  64.840051 -147.719976
424                  Morgan St & Lake St  15307        NaN         NaN
499        Sheffield Ave & Fullerton Ave  15129  41.925373  -87.653611
582            Wacker Dr & Washington St  15010        NaN         NaN
619             Wilton Ave & Belmont Ave  14990  41.939913  -87.652890
122              Clark St & Armitage Ave  14881  41.918477  -87.636128
559              Streeter Dr & Grand Ave  14879        NaN         NaN
329             LaSalle St & Illinois St  14412  41.890819  -87.632670
197          Dearborn Pkwy & Delaware Pl  14144  41.898748  -87.629835


我了解到的是,与NaN交叉口的街道名称缺少实际街道的N,E,W,S方向指示器。我可以在谷歌Map上查看,看到缺少的方向指示器,然而,在我的数据中有成千上万的行。有没有一种方法可以自动查看所有的NaN,找到实际的街道名称,并替换什么?一个问题是,像“湖街”在芝加哥有两个版本,一个“W湖街”和“E湖街”。我不知道如何解决这个问题。任何帮助或建议,如何处理这个解决方案将不胜感激。

nuypyhwy

nuypyhwy1#

地址不明确,Geocoder无法返回任何结果

Geocoding Addresses Best Practices文档中写道:
通常,对完整地址(例如,“48 Pirrama Rd,Pyrmont,NSW,Australia”)进行地理编码时使用地理编码API。对不明确(不完整)的地址进行地理编码时使用Places API Place Autocomplete service
在您的例子中,这些地址是不完整的,因此地理编码API按预期工作。我尝试对返回NaN的地址进行地理编码,并确认它确实返回ZERO_RESULTS
你可以尝试任何一种方式:

  • 通过查询无歧义地址提高搜索质量
  • 如果你没有自动化的方法来做这件事,那么这将是一个严格的任务(正如你在问题中提到的)。
  • 例如,通过在末尾添加ChicagoState St & Kinzie St Chicago)来更改地址State St & Kinzie St将返回结果:41.889261,-87.627984而不是ZERO_RESULTS
  • 使用文档中提到的Places API Place Autocomplete
  • 使用这种方法,请求的成本可能会增加,因为你正在运行一个for循环,自动完成可能会比地理编码花费更多(取决于你如何实现它)。
  • 但是有了这个,自动完成可能会返回多个结果,你仍然需要一个检查器,如果它是正确的。

由于它仍然被认为是最佳实践,地理编码只明确的地址,我现在只能想到的解决方案是只是清理您的数据。
尽管如此,我还是希望这些信息能有所帮助!

相关问题