カテゴリー
Google Maps API (旧Google Ajax API) からクライアント位置情報を取得する
※ 当ページには【広告/PR】を含む場合があります。
2019/12/17
今回は
Google Maps APIs
Google AJAX APIsはGoogleのサーバーから直接読み込んで、自分のhtmlスクリプトコードとして利用できるjavascriptライブラリ群です。
代表的なものにjQueryなどがあります。
昨今ではReactjs/Angularなどの主要なjavascriptフレームワークの豊富なライブラリも簡単に利用できるようになり、Google Ajax APIをガッツリプロダクトで利用する機会もめっきりなくなりました。
とはいえ、簡単なhtmlアプリのテストコードなどで、jQuery等の関数を使ってみたり、Material Design Iconsを利用してみたり、ちょっとした事を行うには、対応のnpmパッケージをインストールする手間も面倒なこともあり、未だに便利には使えます。
かつてはそんな
Google AJAX APIs
Google Maps API
(著者の認識が古かっただけですが...)かつての
誰でもどこでも使える
事前登録アリ
ともあれAPI KeyなしでAPIを叩いてみる
ネットで検索すると新旧入り乱れた内容で、
「今でもAPI Keyなし、事前登録なしで使える」
もうAPI Keyなしじゃ全然動かないよ
まずはこの辺、せっかくなので、どっちなのか身を持って実験してみましょう。
まずは、
index.html
head
...
<head>
<!-- Global tag: (google) - Ex Google Ajax Api -->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
const initializeMap = () => {
const geocoder = new google.maps.Geocoder();
if(google.loader.ClientLocation) {
const latlng = new google.maps.LatLng(
google.loader.ClientLocation.latitude,
google.loader.ClientLocation.longitude
);
geocoder.geocode({'latitude_longitude': latlng}, (results, status) => {
if(status == google.maps.GeocoderStatus.OK) {
alert(results[0]['formatted_address']);
};
});
}
}
google.load("maps", "3", {
other_params: "sensor=false",
callback: initializeMap
});
</script>
この
https://www.google.com/jsapi
このコードでは
google.loader.ClientLocation
latitude
longitude
詳しく知りたい方は、機能解説は
検証
さて、上のindex.htmlが機能するか、webサーバーを立てて検証してみると、

最初に
NoApiKeys
公式のドキュメントで、
ApiProjectMapError:
Either the provided API key or the API project with which it is associated, could not be resolved.
This error may be temporary.
If this error message persists you may need to get a new API key or create a new API project.
For more information, see Get Started with Google Maps Platform.
少なくとも、
API Key
関連付けされたAPIプロジェクト
残念無念…
API Keyの取得
はじめにGoogleアカウントがなければ始まりませんので、
Googleアカウントを設定しましたら、そのアカウントを利用して

APIプロジェクトの作成
最初にGCPを利用する際には、プロジェクトが何もない状態ですので、APIプロジェクトを新規に作成します。


APIプロジェクトを作成したら、左のメニューから
APIとサービス > ダッシュボード

APIプロジェクトを開いたら、
APIの有効化

すると、APIのサービスタイプが選択できますので、今回は
Maps Javascrtip API


API Keyの作成
次に、API Keyを発行する手順に移ります。
まずメインのダッシュボード画面から
APIとサービス > 認証情報
API Key

しばらくすると、API Keyが生成されるので、このKey値を控えておきましょう。

API Keyの保護
このままでは、このAPIが世界中の第三者から利用されてしまうので、何かしらの利用制限を課す必要があります。
APIとサービス > ダッシュボード
Maps JavaScript API
Maps
移ったら
認証
API Key

リファラの設定
まずは特定のサイトでしか利用できないような制限を設定します。 例えば、弊社のサイトでしか使えなくする場合には以下のように、リファラを追加します。

項目には2つ設定しましたが、一つは
Zone Apex(wwwとかを含まないドメイン名)
ワイルドカード表記が利用できるので、ご自分のwebサイトにあった設定を行いましょう。
ターゲットAPIの設定
よりセキュアに運用するために、利用したいAPIの種類も制限します。
これは複数のAPIを指定することもできますが、今回は
Maps Javascript API
設定すると以下のような感じになります。

なお、設定が反映されるまで、5分程度かかるようですので、設定値変更後は焦らずしばらく待つ必要があります。
再度検証
このAPI Keyが機能しているか確かめてみましょう。
先程生成した
API Key
index.html
head
...
<head>
<!-- Global tag: (google) - Ex Google Ajax Api -->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
const initializeMap = () => {
const geocoder = new google.maps.Geocoder();
if(google.loader.ClientLocation) {
const latlng = new google.maps.LatLng(
google.loader.ClientLocation.latitude,
google.loader.ClientLocation.longitude
);
geocoder.geocode({'latitude_longitude': latlng}, (results, status) => {
if(status == google.maps.GeocoderStatus.OK) {
alert(results[0]['formatted_address']);
};
});
}
}
google.load("maps", "3", {
'other_params': 'key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', // Your API Key
});
google.setOnLoadCallback(initializeMap);
</script>
これで、
google.load
other_parames
key
さて、Chromeのアドオンで、
これをapiの動作中のWebページでチェックさせてみると、

のように、正常に動いていることがわかります。
さて、では肝心の
google.loader.ClientLocation

...nullです。
これは
google.loader.ClientLocation
おそらくバックで動いている位置情報データベースも古いママの状態で、クライアント側のIP等を送信したとしても、正しく検証できないんだろうという結論です。
...つまりは、もうGoogle Maps Api 単体では
GeoIP
まとめ
Google Maps Api
今後自身のWebページに地図サービスを取り入れる際には、多いに利用させてもらうとして、
GeoIP
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー