web-dev-qa-db-ja.com

ggmapのジオコード関数(R)のAPI制限を増やします

geocodeggmapsライブラリのR関数を使用して、特定の場所の座標を取得しようとしています。これまでは問題なく機能を使用することができました。

私が直面している問題は、1日の制限を2,500から100,000に増やしたいということです。公式のGoogle ドキュメント によると、プロジェクトで請求を有効にすると、これはすぐに可能になるとのことです。このプロセスを進めると、Google Developers ConsoleはパーソナライズされたAPIキーを提供します。

ただし、geocode関数には、このパーソナライズされたAPIキーを入力するオプションがありません。代わりに、client(ビジネスユーザーのクライアントID)とsignature(ビジネスユーザーの署名)を要求します。これは、 Google Maps API for Work 顧客ができる方法です。 APIにアクセスします。これもオプションだと思いますが、Google Maps API for Workは大企業のアカウント向けに設計されているようであるため、これは非常にユースケースのようです。

年間の契約購入に基づいて、24時間あたり100,000リクエストから始まる1日あたりの割り当て。

つまり、私の質問はこれに要約されます。geocodeggmapslibraryのR関数を使用して、Google Maps Geocoding APIにpingを実行できますか?

14
L P

この質問に答えるために(geocodeライブラリからの)既存のggmap関数を使用する方法が見つからなかったので、(getURLライブラリからの)既存のRCurl関数とfromJSONを使用して自分でこれを行う新しい関数を作成しました。関数(RJSONIOライブラリから)。

新しい関数を作成します。

_library(RJSONIO)
library(RCurl)

getGeoData <- function(location){
  location <- gsub(' ','+',location)
  geo_data <- getURL(paste("https://maps.googleapis.com/maps/api/geocode/json?address=",location,"&key=**[YOUR GOOGLE API KEY HERE]**", sep=""))
  raw_data_2 <- fromJSON(geo_data)
  return(raw_data_2)
}
_

テスト:getGeoData("San Francisco")

これにより、geocode("San Francisco")によって生成されたリストとほぼ(完全ではありませんが)同じ正確な形式の同じデータを含むリストが得られます。

5
L P

パッケージを作成しました googleway APIキーを指定できるGoogleマップAPIにアクセスします。

例えば

library(googleway)

key <- "your_api_key"

google_geocode(address = "San Francisco",
               key = key)

# $results
# address_components
# 1 San Francisco, San Francisco County, California, United States, SF, San Francisco County, CA, US, locality, political, administrative_area_level_2, political, administrative_area_level_1, political, country, political
# formatted_address geometry.bounds.northeast.lat geometry.bounds.northeast.lng geometry.bounds.southwest.lat
# 1 San Francisco, CA, USA                      37.92977                     -122.3279                      37.69313
# geometry.bounds.southwest.lng geometry.location.lat geometry.location.lng geometry.location_type
# 1                     -123.1661              37.77493             -122.4194            APPROXIMATE
# geometry.viewport.northeast.lat geometry.viewport.northeast.lng geometry.viewport.southwest.lat
# 1                          37.812                       -122.3482                         37.7034
# geometry.viewport.southwest.lng                    place_id               types
# 1                        -122.527 ChIJIQBpAG2ahYAR_6128GcTUEo locality, political
# 
# $status
# [1] "OK"
14
SymbolixAU

ggmapバージョン2.7以降(12月13日現在、Cranではまだ利用できませんが、devtools::install_github("dkahle/ggmap")でインストールできます。単に、register_google(key = 'LONG KEY STRING')を実行してから実行する必要があります。 geocodemutate_geocodeなどの任意のggmap関数を呼び出して、APIキーを使用できます。

14
Olivier

これをありがとう!それは私を大いに助けてくれました。あなたの解決策はかなり具体的であるため、私があなたの関数に対して行った適応を含めたかったのです。 raw_datageo_data_listが未定義であるため、バグが発生しました。これらはあなたの地域の環境に固有のものだと思います。

私にとって、場所を入力して緯度を返すと、lonはこれで動作しました:

 getGeoData <- function(location, api_key){
  location <- gsub(' ','+',location)
  geo_data <- getURL(paste("https://maps.googleapis.com/maps/api/geocode/json?address=",location,sprintf("&key=%s",api_key), sep=""))
  geo_data <- fromJSON(geo_data)
  return(geo_data$results[[1]]$geometry$location)
}

Returnステートメントを変更してgeo_dataにインデックスを付け、latlon以外のさまざまなプロパティを取得することもできます。

これが誰かを助けることを願っています。

R

6
R. Jutras