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

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

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

Q&A

解決済

1回答

1199閲覧

Google Maps Javascript API 表示範囲の取得方法(bounds_changedやidle以外の方法)

nippa23

総合スコア10

JavaScript

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

0グッド

0クリップ

投稿2020/07/16 09:30

編集2020/07/16 11:40

やりたいこと

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&region=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

何卒どうぞよろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

//ここからWebAPIにリクエストを投げるコードから先をconsole.log('現在表示されている南西の経度' + map_sw_lng);の後に入れればよいです。

投稿2020/07/16 15:24

kei344

総合スコア69606

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

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

nippa23

2020/07/17 08:27

kei344様 ご回答下さりどうもありがとうございます! 大変助かります! もし、可能でしたらご教授頂けますと嬉しいのですが... イベントのあるなしに関わらず(addListenerを使わず)、getBounds()で値を取ってくることは可能なのでしょうか。 お忙しいところ、申し訳ございませんが 何卒どうぞよろしくお願い申し上げます。
kei344

2020/07/17 08:30

google.maps.event.addListener(map, "idle", function () {});の中身をinitMap関数内にそのまま出せばよいのでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問