Javascript APIでのストリートビュー実装方法

Tips

海の中や宇宙ステーションなど、
着実に範囲を広げ続けているGoogleストリートビュー。
サイトに埋め込もうという時、
iframeで埋め込むのが一番簡単ではあるのですが、
機会があって調べてみると、
Google Maps JavaScript APIを使った実装では
表示内容をカスタマイズできるということがわかったのでメモ。

まずはAPIキーを取得

まず、最初にGoogle MAPのAPIを利用するにはAPIキーが必須なので、
マップAPIのドキュメントの右上のボタンや、APIキーの取得を解説したこちらのページからAPIキーを取得します。
※なお、マップAPIのドキュメントのページには「価格とプラン」というボタンもありますが、
2017年11月15日現在、自由に閲覧できるウェブサイトに埋め込むという用途の場合は、
1日あたり最大25,000回までは無料で表示できるようです。

目的の場所の緯度経度、もしくはパノラマIDを取得

さて続いては、目的地の指定ですが
通常は緯度経度を指定に用いるので、
取得の流れとしては

  1. Google MAPで目的地を検索
  2. 目的地を右クリックして「この場所について」を選択
  3. 表示される緯度経度をメモ

という方法で取得する事ができます。
ただし、時折、同じ緯度経度に別のストリートビューが存在していて、
「こっちを使いたいんだけど。。」という場合があるかと思います。
その場合は、緯度経度と別に、ストリートビューのパノラマ画像に個別にしてされている、
パノラマIDを用いることで解決することができます。
パノラマIDの取得は表示中の画像のパノラマIDを取得することのできる
getPano()を用いて行なうことができますが、
MAP Apiのドキュメントのサンプル
一度別のスクリプトを書いて取得する必要があり、若干の二度手間感が否めないので、
別の方法がStackOverflowの記事になっていたので、
Google側の仕様が変わった場合に使えなくなる可能性もありますが、ご紹介すると、
ストリートビューをブラウザで表示したときのURLに含まれているパノラマIDを抜き出すという方法で、
例えば、下は札幌の旧北海道庁付近のストリートビューのURLですが、
https://www.google.co.jp/maps/@43.0640885,141.3490879,2a,75y,261.52h,99.41t/data=!3m6!1e1!3m4!1sexi70XCL_nhFHUNqrw45OQ!2e0!7i13312!8i6656?dcr=0
この中の !1s !2e という2つに挟まれた部分、
この例で行けば「exi70XCL_nhFHUNqrw45OQ」という文字列がパノラマIDになります。
この方法だとGoogle MAPで目的の場所を探して、
ロケーションバーからURLを確認し、すぐに指定できるので、
手間が少なく済むかと思います。

いざ表示

ここまでくれば表示するのは簡単です。
下記のコードのYOUR_API_KEYは先ほど取得したAPIキーを入れて下さい。
また、緯度経度の場合とパノラマIDの場合はストリートビューのパノラマを作成する際の
オプションの渡し方が少し違うので、両方併記します。
※CSSは省略してます(#mapに各自サイズを指定してください)

<div id="map"></div>
<script>
function initPano() {
var latLng = { lat: 緯度, lng: 経度 }; //取得した緯度経度
var panoID = 'パノラマID';// 取得したパノラマID
var panorama = new google.maps.StreetViewPanorama(
document.getElementById('map'), {
// 実装方法に応じて下記のどちらか一方のフィールドを使って下さい
position: latLng, // 緯度経度で実装の場合はこちら
pano: panoID, // パノラマIDの場合はこちら
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initPano">
</script>

オプションいろいろ

さて、iFrameで埋め込むのに比べて、
手間がかかるJSでの実装ですが、
JSでの実装ではオプションを色々と指定することができます。
デフォルトの視点の角度(POV)を変更できる他、
下記の例ではデフォルトで表示される色々なコントロールを非表示にしています。
また、各種コントロールのボタンの位置や外観も変更できるようですので、
詳しくは公式ドキュメントをご覧になってください。

<div id="map"></div>
<script>
function initPano() {
var latLng = { lat: 緯度, lng: 経度 }; //取得した緯度経度
var panoID = 'パノラマID';// 取得したパノラマID
var povSetting = {
// 視点(POV)情報のセッティング
heading : 90 , // 真北を基準としたカメラの回転角、時計回りで90が東
pitch : 25 // デフォルトの角度を0とした上下の角度、真上が90で真下は-90
}
var panorama = new google.maps.StreetViewPanorama(
document.getElementById('map'), {
// 実装方法に応じて下記のどちらか一方のフィールドを使って下さい
position: latLng, // 緯度経度で実装の場合はこちら
pano: panoID, // パノラマIDの場合はこちら
pov: povSetting, // 視点情報
panControl: false, // パノラマの回転
zoomControl: false, // パノラマのズーム
addressControl: false, // 関連する場所の住所を示すテキスト オーバーレイ
fullScreenControl: false, // 全画面モードでストリートビューを開くオプション
motionTrackingControl: false, // モバイル端末上でモーショントラッキングを有効または無効にするオプション
linksControl: false, // 隣接するパノラマ画像に移動するためのガイド矢印
enableCloseButton: false, // ストリートビューのビューアを閉じるボタン
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initPano">
</script>

お問い合わせ

    個人情報利用目的への同意

    ※このサイトはreCAPTCHAとGoogleによって保護されています。プライバシーポリシー利用規約が適用されます。
    ※お客様が入力した個人情報はSSL暗号化信号によって保護されています。

    個人情報の利用目的
    このお問い合わせフォームでご提供いただく個人情報は、お問合せ等に対する回答や資料送付、その他ご連絡のために利用します。
    当個人情報を第三者に提供することはありません。
    当個人情報の取扱いを委託することはありません。
    必要事項を全てご入力下さい。入力内容に不備がある場合は、ご返信しかねる場合がございます。
    内容により、お時間をいただく場合がございます。
    当個人情報の利用目的の通知、開示、内容の訂正・追加または削除、利用の停止・消去および第三者への提供の停止(「開示等」といいます。)を受け付けております。
    開示等の求めは、info@commono.co.jpで受け付けます。
    統計ツールやクッキー、ウェブビーコン等を用いてご利用状況を調査していますが、これによる個人情報の取得、利用は行っておりません。
    当社の個人情報保護に対する取り組みは「Privacy Policy」を必ずご確認ください。

    COMMONO株式会社
    E-mail:info@commono.co.jp
    個人情報保護方針、個人情報の取扱いについて
    PRIVACY POLICY

    現在準備中です

    お気に入り

    お気に入りから削除

    選択したアイテムをお気に入りから削除しますか?