web-dev-qa-db-ja.com

get_mapがAPIキーを渡していない(HTTPステータスは「403 Forbidden」でした)

Rのget_map()関数(ggmapライブラリ)でこの問題に直面しています。

私のコードは、数か月間APIキー(_source = "google"_)を指定する必要なく実行されていました。ただし、コードは数週間前に機能しなくなりました。 GoogleがAPIキーを必須にしていることを理解しました(または、私が使い果たしたAPIキーなしで特定の呼び出しを許可していない可能性があります)。

ただし、APIキー(Google Cloud Platformから取得)を指定した後でも、コードは同じように動作し続けました。私もGoogle Cloudサポートに連絡しましたが、彼らはAPIキー自体には何も問題はなく、最後にマップを呼び出すことができると言っていました。

Googleからマップを呼び出しているときに、get_map()関数が_api_key_を渡していないようです。解決への指針をいただければ幸いです。

以下は、再現可能なコードです(失敗しています)。

_library(ggmap)

lat <- c(4,41)  # India lat boundaries
lon <- c(68,99) # India long boundaries
center = c(mean(lat), mean(lon))

map <- get_map(location = c(lon = mean(lon), 
                            lat = mean(lat)),
               api_key = <my api key>,
               zoom = 6,
               maptype = "terrain",
               source = "google",
               messaging = TRUE
)
_

以下はRのエラーメッセージです(APIキーが渡されないことに注意してください)

_trying URL 'http://maps.googleapis.com/maps/api/staticmap?center=22.5,83.5&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false'
Error in download.file(url, destfile = tmp, quiet = !messaging, mode = "wb") : 
  cannot open URL 'http://maps.googleapis.com/maps/api/staticmap?center=22.5,83.5&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false'
In addition: Warning message:
In download.file(url, destfile = tmp, quiet = !messaging, mode = "wb") :
  cannot open URL 'http://maps.googleapis.com/maps/api/staticmap?center=22.5,83.5&zoom=6&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false': HTTP status was '403 Forbidden'
_
9
Venky

Rのすべての新しいセッションで_register_google(key = "..."_)を使用する必要があります。get_map()呼び出し内で_api_key =_を使用しても機能しません。


更新:ggmap 2.7.904および現在のGoogle Cloud APIについて2018-12-24

ステップバイステップのチュートリアル

1. ggmapの最新バージョンへの更新

_require(devtools)
devtools::install_github("dkahle/ggmap", ref = "tidyup")
_

2. Google Cloud ConsoleですべてのAPIのGoogle APIキーを有効にします

enter image description here

enter image description here

3. ggmapをロードしてキーを登録します

_library(ggmap)
register_google(key = "...")     # copied directly from Google Console via 'copy' button
_

4.デフォルトマップのプロット

_ggmap(get_googlemap())          
_

Houston

5.ロケーション名でプロット(ジオコーディング)

_ggmap(get_map("Hannover, Germany"))
_

ここでエラー(Forbidden 403など)が発生した場合、適切なAPIのキーを有効にしていない可能性があります。 ジオコーディングのトラブルシューティングのチュートリアル

Hannover

6.経度と緯度でプロットする

_ggmap(get_map(location=c(16.3738,48.2082), zoom=13, scale=2))
_

3

14
Roman

Roman Abashinの答えに追加するだけです(残念ながらコメントできません): '?get_map()'によると、 'api_key ='引数はGoogleマップでは機能しません。 「register_google()」関数を使用する必要がありますが、03/10/18の時点では、ggmapの開発バージョンでのみ使用できます。

devtools::install_github("dkahle/ggmap", ref = "tidyup")

次に、Googleアカウントで課金を有効にする必要がありますが、毎月使用する最初の100,000個のマップは無料である必要があります。こちらを参照してください: https://cloud.google.com/maps-platform/pricing/ sheet / 詳細については。

(ここからのヒント: https://github.com/dkahle/ggmap/issues/51

6
elskevdv

ggmapの問題の直接的な解決方法はわかりませんが、静的なマップではなくインタラクティブなマップを使用することに満足している場合は、googelwayライブラリを使用できます

library(googleway)

set_key("GOOGLE_MAP_KEY")

lat <- c(4,41) #India lat boundaries
lon <- c(68,99) #India long boundaries
center = c(mean(lat), mean(lon))

google_map(location = center, zoom = 6)

enter image description here

4
SymbolixAU

@Romanの応答に追加するだけで、次のコードが役に立ちました。

if(!requireNamespace("devtools")) install.packages("devtools")
devtools::install_github("dkahle/ggmap", ref = "tidyup")
library(ggmap)
register_google(key = "your_API_key") 
usa<- get_googlemap(location='united states', zoom=4,maptype = "hybrid")

詳細については、githubのライブラリページを参照できます。 here
うまくいけば助かります!

2
Rudr