やりたいこと
Google Maps Javascript APIを使用し、GoogleMapsを表示する。
GoogleMapsに表示されている表示範囲のmin_lat(最小の緯度)、min_lng(最小の経度)、max_lat(最大の緯度)、max_lng(最大の経度)を取得する。
取得した表示範囲をWebAPIにリクエストを投げてデータをもらう。
困っていること
Google Maps Javascript APIを使用して、GoogleMapsの表示はできました。
表示範囲の取得も以下のソースコードにより取得ができました。
しかし、表示範囲を取得する順序がWebAPIにリクエストを投げるより遅いため、
WebAPIに表示範囲を投げることができません。
ここでは、addListenerを使用して「bounds_changed」や「idle」で取得しているのですが、
どちらも変化が終わった後の取得になるため
WebAPIにリクエストを投げるほうが先に実行されてしまいます。
何か方法はございませんでしょうか。
また、質問の仕方がわかりにくかったり不備や不足などございましたら
お気軽にご指摘頂けますと幸いです。
ソースコード
javascript
1var map; 2center_lat = 35.681224; 3center_lng = 139.767082; 4var center; 5var zoon_level; 6 7// GoogleMapsの表示範囲 8var bounds; 9var map_ne_lat; 10var map_ne_lng; 11var map_sw_lat; 12var map_sw_lng; 13 14var request; 15var data; 16 17 18 19function initMap() { 20 // 別途index.htmlの方に <div id="map"></div>及び 21 // <script src="https://maps.googleapis.com/maps/api/js?language=ja®ion=JP&key=API KEY" async defer></script>を記載しております。ここでは、index.htmlのファイルの記載は割愛させていただきます。 22 var target = document.getElementById('map'); 23 24 map = new google.maps.Map(target, { 25 // 中心点 26 center: center, 27 // ズームレベル 28 zoom: zoom_level 29 }); 30 31 // 表示された範囲を取得(小数点6桁まで表示) 32 google.maps.event.addListener(map, "idle", function () { 33 bounds = map.getBounds(); 34 map_ne_lat = Math.round(bounds.getNorthEast().lat() * 1000000) / 1000000; 35 map_ne_lng = Math.round(bounds.getNorthEast().lng() * 1000000) / 1000000; 36 map_sw_lat = Math.round(bounds.getSouthWest().lat() * 1000000) / 1000000; 37 map_sw_lng = Math.round(bounds.getSouthWest().lng() * 1000000) / 1000000; 38 console.log('現在表示されている北東の緯度' + map_ne_lat); 39 console.log('現在表示されている北東の経度' + map_ne_lng); 40 console.log('現在表示されている南西の緯度' + map_sw_lat); 41 console.log('現在表示されている南西の経度' + map_sw_lng); 42 }, { once: true }); 43 } 44 45 initMap(); 46 47//ここからWebAPIにリクエストを投げるコード 48 request = new XMLHttpRequest(); 49 50 // 51 request.open('GET', `http://localhost:/hogehoge?minlat=${map_sw_lat}&minlng=${map_ne_lng}&maxlat=${map_sw_lat}&maxlng=${map_sw_lng}`, true); 52 53 request.responseType = 'json'; 54 55 request.onload = function () { 56 data = this.response; 57 console.log('データを取得しました'); 58 }; 59 60 request.send(); 61}; 62 63
以上、大変詰まってしまいました。。。
公式のこちらのリファレンスを参考にしております。
https://developers.google.com/maps/documentation/javascript/reference
何卒どうぞよろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/17 08:27
2020/07/17 08:30