質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

639閲覧

【google map】施設検索結果に相違が発生してしまう

yappi_tengen

総合スコア23

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2019/01/24 07:27

nearbySearchで検索した結果を元にgetDetailsで詳細情報を取得しようとした際、
nearbySearchの検索結果数とgetDetailsでの取得結果数に相違が発生してしまいます。

例:
・nearbySearchで検索 → 検索結果20件
・検索結果を元にgetDetailsで詳細を取得 → 9件

ただ単に詳細情報が無いのかと思いましたが、本家googleMapには詳細情報も登録されていました。
どなたか知見のある方がいらっしゃいましたらご教示願います。

import $ from 'jquery'; $(function () { 'use strict'; let map; let service; let infowindow; let place; let place_id; //初期値は東京駅に設定 let pyrmont = new google.maps.LatLng(35.681236, 139.767125); geoLocationInit(); createMap(pyrmont); // 現在地取得 document.getElementById('getCurrentLocation').onclick = function () { geoLocationInit(); }; function geoLocationInit() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(success, fail); } else { createMap(pyrmont); } }; // success function success(position) { let currentLat = position.coords.latitude; let currentLng = position.coords.longitude; let pyrmont = new google.maps.LatLng(currentLat, currentLng); createMap(pyrmont); CurrentPositionMarker(pyrmont); }; // fail function fail(pyrmont) { alert('位置情報の取得を許可して下さい。'); createMap(pyrmont); }; function createMap(pyrmont) { map = new google.maps.Map(document.getElementById('map'), { center: pyrmont, zoom: 16 }); document.getElementById('getCafeLocation').onclick = function () { nearbySearchCafe(pyrmont); } }; function createMarker(latlng, icn, place) { let marker = new google.maps.Marker({ position: latlng, map: map, animation: google.maps.Animation.DROP }); let placeName = place.name; // 吹き出しにカフェの名前を埋め込む let contentString = `<div class="sample"><p id="place_name">${placeName}</p></div>`; // 吹き出し let infoWindow = new google.maps.InfoWindow({ // 吹き出しの追加 content: contentString // 吹き出しに表示する内容 }); marker.addListener('click', function () { // マーカーをクリックしたとき infoWindow.open(map, marker); // 吹き出しの表示 }); }; // 現在地のアイコンを表示 function CurrentPositionMarker(pyrmont) { let image = '/assets/img/icon_nowPos.png'; let marker = new google.maps.Marker({ position: pyrmont, map: map, icon: new google.maps.MarkerImage( image, //マーカー画像URL new google.maps.Size(60, 60), //マーカー画像のサイズ ), }); marker.setMap(map); }; // 周辺のカフェを検索 function nearbySearchCafe(pyrmont) { let request_near = { location: pyrmont, radius: '500', type: ['cafe'] }; service = new google.maps.places.PlacesService(map); service.nearbySearch(request_near, callback); function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (let i = 0; i < results.length; i++) { place = results[i]; place_id = place.place_id; let latlng = place.geometry.location; let icn = place.icon; //nearbySearchでの検索結果 console.log(place); let request_info = { placeId: place_id, }; service.getDetails(request_info, callback_info); function callback_info(place, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { //nearbySearchで検索した結果の詳細 console.log(place); createMarker(latlng, icn, place); } }; }; }; }; }; });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

runny_nose

2019/01/24 08:21 編集

callback_infoが呼び出される回数自体は一致しているのでしょうか? 一致している場合、statusがOK以外で返ってきているためにconsole.log(place);に辿り着いていないという可能性はないでしょうか? その場合はそのエラーコードがヒントになるのでは。 statusをif文で判定するよりも前にコンソールに出力してみてください。 (もしくはelse節を追加してそこで) ↓エラーコードの一覧 https://developers.google.com/maps/documentation/javascript/places#place_details_responses
yappi_tengen

2019/01/24 08:37

ご回答ありがとうございます! callback_infoを呼んだ直後に、placeの値を出すと一部nullが返って来てしまうので、取得出来ない仕様かもしれないですね。。。 for (let i = 0; i < results.length; i++) { place = results[i]; place_id = place.place_id; let latlng = place.geometry.location; let icn = place.icon; //nearbySearchでの検索結果 // console.log(place); let request_info = { placeId: place_id, }; service.getDetails(request_info, callback_info); function callback_info(place, status) { //一部がnullで返ってくる // console.log(place); if (status == google.maps.places.PlacesServiceStatus.OK) { //nearbySearchで検索した結果の詳細 console.log(place); createMarker(latlng, icn, place); } }; };
runny_nose

2019/01/24 08:49

いえ、statusが何で返ってきてるのかを調査していただきたいのです。 console.log(place); ではなく console.log(status); をcallback_infoの先頭に仕込んでみてください。 placeがnullになった理由がstatusに書かれてるのです。
runny_nose

2019/01/24 08:54 編集

あ、できればどのplace_idがNGなのかわかるよう、 cosole.log(place_id + ' = ' + status); などのようにするとなおいいかもですね
yappi_tengen

2019/01/24 09:04

nearbySearchのstatusは正常でgetDetailsの方がOVER_QUERY_LIMITでした。。。 お騒がせ致しました。。。
yappi_tengen

2019/01/24 09:10 編集

無事に解決したのでベストアンサーは「runny_nose」さんとさせて頂きます。 お手数ですが後程、回答にコメント頂けましたら幸いです。 ありがとうございました!
guest

回答1

0

ベストアンサー

上の修正依頼のところでレスポンスのstatusを調べていただきたいとお伝えしましたが、
もしもOVER_QUERY_LIMITであった場合、
リクエストの数が多すぎるのが原因と思われます。

nearbySearchでリクエストが1件、正常に取得できたgetDetailsが9件ということなので、
おそらく1秒あたり合計10件までしかリクエストが許可されていないようですので、
下記のリンクを参考に、間隔をあけてリクエストするようにしてみてください。

Google Maps API - OVER QUERY LIMIT per second limit

投稿2019/01/24 09:10

編集2019/01/24 09:20
runny_nose

総合スコア280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yappi_tengen

2019/01/24 09:11

その方向で対応しようと思います! 本当にありがとうございました!
runny_nose

2019/01/24 09:12

すみません、回答の記載中に、コメント追記していただいたようですね。 やはりOVER_QUERY_LIMITですか。 リクエスト間隔を工夫してみてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問