住所以外の入力内容からの地図表示は何の機能?

774 views
Skip to first unread message

engram.w...@gmail.com

unread,
Nov 16, 2018, 1:19:12 AM11/16/18
to Google-Maps-API-Japan
こんにちは。
下記のAPIのジオコードの機能を利用したコードで、入力内容から緯度経度を取得し、その地点を中心に地図を表示させております。

本来は住所を入力し、その住所から緯度経度を取得するのですが、入力内容に例えば「あいうえお」と入力しますと、名古屋市の「あいうえお」という飲食店を中心とした地図が表示されました。(もちろん住所を入力した場合はその住所を中心に地図が表示されます)

動作としては次のような感じです。
■入力された任意の文字列→その文字列で該当する施設などを検索→検索結果の施設の住所を取得→その住所を緯度経度に変換

疑問に思ったことは、なぜジオコードで名称(のような任意の文字列)からの緯度経度が取得できるのか?という点です。
探してみたのですが、ジオコードにそういった機能があるようなドキュメントは見つけられませんでした。

Places APIには名称から住所を取得する機能があるようなので、apiが内部でPlaces APIの機能※も利用しているのだろうか、などと想像しているのですが、詳しい方おられましたら仕様を教えていただけないでしょうか?
(※apiの呼び出しを、https://maps.googleapis.com/maps/api/geocode/******* ではなく、
https://maps.googleapis.com/maps/api/js?key=apiのキー&callback=drawMap という呼び出しのため、Places APIも使えているのだろうか、と思いました)

宜しくお願い致します。


コードです↓

<div id="map" style="width: 900px; height: 450px;"></div>


<script>
  function drawMap() {
    var geocoder = new google.maps.Geocoder();
    //座標を取得する
    geocoder.geocode(
      {
          'address': 入力された任意の文字列
          'region': 'jp'
      },
        function (results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            google.maps.event.addDomListener(window, 'load', function () {
              var map_tag = document.getElementById('map');
              
              // 取得した緯度経度をセット
              var map_location = new google.maps.LatLng(
                  results[0].geometry.location.lat(),
                  results[0].geometry.location.lng());
              
              //マップ表示のオプション
              var map_options =
              {
                zoom: 17,//縮尺
                center: map_location,//地図の中心座標
                //↓false:地図上に人などのアイコン表示
                disableDefaultUI: true,
                mapTypeId: google.maps.MapTypeId.ROADMAP//地図の種類
              };

              //マップを表示する
              var map = new google.maps.Map(map_tag, map_options);

              //地図上にマーカーを表示
              var marker = new google.maps.Marker({
                position: map_location,//マーカー表示座標
                map: map//マーカー表示地図
              });
            });
          } else {
            //google.maps.GeocoderStatus.OK以外の処理
            alert('該当データがありません。');
          }
        }
      );
  }
</script>    
    
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=apiのキー&callback=drawMap">
</script>


engram.w...@gmail.com

unread,
Nov 16, 2018, 1:52:49 AM11/16/18
to Google-Maps-API-Japan
補足です。
引き続き調べていましたら、下記に想像していた機能のことが記載されておりました。

機械翻訳して確認したのですが、「Use cases and API recommendations」の部分で、
ユーザーのあいまいな入力内容に対して、
「Use the Places API Place Autocomplete service to obtain a place ID, then the Geocoding API to geocode the place ID into a latlng.」とありました。

機械翻訳では、
「Places API Place Autocompleteサービスを使用してプレースIDを取得し、ジオコーディングAPIを使用してプレースIDをlatlngにジオコードします。」
とあり、まさにこれかと思いました。

先ほどあげたコードでこの内容を実現できているのかが、まだハッキリしないのですが。。


2018年11月16日金曜日 15時19分12秒 UTC+9 engram.w...@gmail.com:

Masashi.K

unread,
Nov 16, 2018, 2:19:43 AM11/16/18
to google-map...@googlegroups.com
ジオコーディングとは、住所だけでなく地名、ストリート名、ランドマーク名などの
データから緯度経度に変換することを意味します。

今回のケースで言えば、偶然「あいうえお」という店名があったので
それが返されたのでしょう。

Places APIは Geocoding + 場所の情報を提供するAPIです。
メールに書かれたコードを見る限りでは、Places APIは使用していませんね。

Google Places API の AutoCompleteはこれです。  

>Use the Places API Place Autocomplete service to obtain a place ID, then the Geocoding API to geocode the place ID into a latlng.

オートコンプリートを使って、place IDを取得し、そこからGeocoding APIを使って
緯度経度を取得してください、となってます。

少し脱線すると、2018年6月から、Google Maps APIが使用量に応じて課金されるようになりました。
この課金の対象には、Google Places Auto Completeでの検索も含まれます。
この時、オートコンプリートの検索結果に含まれるフィールドを指定することが可能です。
placeIdOnly = trueにすると、placeIdだけを返すようになります。
placeId だけを検索することで価格を抑えることができます。
ただしそのままでは何にも使えないので、placeId からジオコーディングするように勧めています。




--
このメールは Google グループのグループ「Google-Maps-API-Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-maps-api-...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-map...@googlegroups.com にメールを送信してください。
https://groups.google.com/group/google-maps-api-japan からこのグループにアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

engram.w...@gmail.com

unread,
Nov 16, 2018, 3:18:14 AM11/16/18
to Google-Maps-API-Japan
Masashi.K様、こんにちは。
ご返答ありがとうございます。

> ジオコーディングとは、住所だけでなく地名、ストリート名、ランドマーク名などのデータから緯度経度に変換することを意味します。
> 今回のケースで言えば、偶然「あいうえお」という店名があったのでそれが返されたのでしょう。

なるほど、Places APIなどではなく、ジオコーディング本来の機能なのですね。

> Places APIは Geocoding + 場所の情報を提供するAPIです。メールに書かれたコードを見る限りでは、Places APIは使用していませんね。

ご確認いただきありがとうございます。
Places APIのリンクもありがとうございます。

> 少し脱線すると、2018年6月から、Google Maps APIが使用量に応じて課金されるようになりました。
> この課金の対象には、Google Places Auto Completeでの検索も含まれます。
> この時、オートコンプリートの検索結果に含まれるフィールドを指定することが可能です。
> placeIdOnly = trueにすると、placeIdだけを返すようになります。
> placeId だけを検索することで価格を抑えることができます。ただしそのままでは何にも使えないので、placeId からジオコーディングするように勧めています。

節約方法まで、ありがとうございます。
参考にさせていただきます。


2018年11月16日金曜日 16時19分43秒 UTC+9 Masashi.K:
このグループから退会し、グループからのメールの配信を停止するには google-maps-api-japan+unsub...@googlegroups.com にメールを送信してください。
Reply all
Reply to author
Forward
0 new messages