初質問になります。
書き方などに変なところがあれば指摘お願いいたします。
googlemapに関しての質問です。
現在MICROSOFTACCESS+HTML+JAVASCRIPTを使用してgooglemapに複数のポイントを表示しております。
ですが10件までは表示ができますが、以降は表示の間隔が短いため表示されません。
原因自体はわかっているのですが、javascriptに関して今回初めて開発を行ったためどの部分に間隔をあけていいか不明のため投稿させていただきました。
htmlとjavascript内容を載せますので、ご指摘をお願いいたします。
html内容
<!-- saved from url=(0017)http://localhost/ -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="IE=11; charset=UTF-8"/>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="IE=11" />
<title></title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false" …
<script type="text/javascript" src="mapdata.js"></script>
<script type="text/javascript">
var geocoder;
var map;
var currentInfoWindow = null;
function initialize() {
geocoder = new google.maps.Geocoder();
var myOptions = {zoom: mapzoom, mapTypeId: google.maps.MapTypeId.ROADMAP}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
for (var i = 0; i < places.length; i++) {
var place = places[i];
var info = '<b>' + place[1] + '</b><br/><br/>' + place[0];
codeAddress(place[0], info, place[2], place[3]);
}
}
function codeAddress(address, info, flg ,iconad) {
geocoder.geocode({'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (flg == 0) {
map.setCenter(results[0].geometry.location);
}
else {
var marker = new google.maps.Marker({map: map , position: results[0].geometry.location , icon: iconad});
var infowindow = new google.maps.InfoWindow({content: info ,position: marker });
google.maps.event.addListener(marker, 'click', function() {
if (currentInfoWindow) {
}
infowindow.open(map,marker);
currentInfoWindow = infowindow;
});
}
}
});
}
</script>
</head>
<body onload="initialize()" style="margin:0px; padding:0px">
<div id="map_canvas" style="width:100%; height:100%;"></div>
</body>
</html>
javascript内容
var mapzoom = 15;
var places = [
['住所', "", 0],
['住所','1', 1,'画像1.png'],
['住所1','2', 1,'画像2.png'],
['住所2','3', 1,'画像3.png'],
['住所3','4', 1,'画像4.png'],
['住所4','5', 1,'画像5.png'],
['住所5','6', 1,'画像6.png'],
['住所6','7', 1,'画像7.png'],
['住所7','8', 1,'画像8.png'],
['住所8','9', 1,'画像9.png'],
['住所9','10', 1,'画像10.png'],
['住所10','11', 1,'画像11.png'],
['住所11','12', 1,'画像12.png'],
['住所12','13', 1,'画像13.png'],
['住所13','14', 1,'画像14.png'],
['住所14','15', 1,'画像15.png'],
['住所15','16', 1,'画像16.png']
];
どうぞよろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ANo1です。
事前にジオコーディングを行っておくのがお勧めです。
>どういった風な変更を行えばいいか教えていただけますでしょうか?
例えば、データを
['住所1', 'Lat1', 'Lng1', '2', 1, '画像2.png'],
とでもしておけば、住所データは表示用などで使用するとしても、マップの表示に際しては、検索処理を行わなくても、LatLngデータを用いて直接マーカー表示などが可能になりますよね?(順序等は使いやすいように)
事前の処理なら余程大量でもない限り、御提示の方法で10件ずつやっても大した手間にはならないものと想像します。
もしもデータが大量な場合は、それこそ事前に処理しておかないと大変なことになってしまいますね。
とは言え、間欠的にリクエストする方法は、事前のリクエストでも使うことは可能です。
例えば、住所データが変数address_dataに配列ですでにあるとして、以下のような要領でしょうか。
(処理の手順のみです。エラー処理等は考慮していません)
var address_data = [ ~~~~ ]; //住所データ
var dataIndex = 0; //次の処理順のインデックス
var rest = address_data.length; //終了処理カウント用
var interval = 50; //リクエスト間隔(mmsec)
intermit();
function intermit(){
//geocoderへリクエスト送信
geocoder.geocode({'address': address_data[dataIndex] },
//callback処理
function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
//結果の記録 (または表示等の処理)
}
if( --rest <= 0 ) alert("全処理完了 !"); //callback処理の完了チェック
}
});
//次のリクエスト処理
if( address_data[++dataIndex] ) setTimeout(intermit, interval);
}
※ 制限の具体的な時間間隔を把握できていませんので、リクエスト間隔は適当に調節する必要があると思います。
No.1
- 回答日時:
こんにちは
ご存知のように、ジオコーディングは負荷が大きいので、使用制限が設けられているようです。
簡単に検索してみたところ「50 requests per second」の記載は見つかりましたが、10件で止まるものは見つけられませんでした。(くまなく探したわけではありません)
https://developers.google.com/maps/documentation …
(api v2の頃に試したことがありますが、20件までいけたような… 確か、超えると、レスポンスにその旨のメッセージが返されたと記憶しています)
ともあれ、そのままで実行させたいのであれば、タイマーを設けて前回のリクエストから0.02秒(?)ほど経ったら次のリクエストを行うといったようにすればよさそうですね。(時間間隔は調整が必要かも知れません)
タイマーを設けるのが面倒なら、setTimeoutなどで繰り返すような仕組みにすることでも、同様のことが可能と思います。
しかしながら、同じデータに対して表示する度にリクエストを行うのは、非効率的ではないのでしょうか?
住所データ(mapdata.jsかな?)作成時に、事前に一度だけジオコーディングを行っておいて、座標を併せてデータ化しておくのが良さそうに思います。
これによって、表示にも時間がかからなくてすむという利点もあります。(都度リクエストすると、制限でトータルの表示時間がかかる)
回答ありがとうございます。
settimeoutをとりあえず使用してみようと思います。
その際どの部分にセットすればよろしいか教えていただけますでしょうか?
そのほか一度だけのジオコーディングでもやってみようと思いますが、どういった風な変更を行えばいいか教えていただけますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- その他(プログラミング・Web制作) Leafletで画像をon、offさせる方法について 2 2022/11/01 15:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Gifアニメ、最後のコマに行った...
-
HTMLで条件分岐はできますか?
-
画像ランダム表示、しかしダブ...
-
javascriptで毎月替わる画像
-
画像をクリックしてその地点の...
-
画像クリック→メッセージボック...
-
innerHTMLで、表示すると、一部...
-
画像を切り替えランダム表示
-
lightboxで複数サムネイル表示
-
JavaScriptでスライドショー
-
曜日と時間を指定して表示画像...
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
jqueryのsortableで一部ソート...
-
removeEventListenerについて
-
Slick.jsのオプションrtlについて
-
JavaScriptで変更した属性の元...
-
どの<li><a> が押されたか判別...
-
複数画像のランダム複数表示(...
-
クリックで色変更後に既に変更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
textareaに画像を表示したい
-
JavaScript スライドの画像にリ...
-
1枚の画像をクリックして複数の...
-
HTMLで条件分岐はできますか?
-
Javascript で共通の処理をどこ...
-
Gifアニメ、最後のコマに行った...
-
JavaScriptとチェックボックス...
-
画像の重なりの順序を代える方...
-
画像ランダム表示、しかしダブ...
-
javascriptで毎月替わる画像
-
1枚の画像をクリックすると複数...
-
オンマウスで、画像切り替え+...
-
透過pngの透明部分以外をクリッ...
-
Javascriptで指定した日付と時...
-
jQueryスライドショー画像への...
-
JavaScript で flexslider の画...
-
lightbox2をiframeから外に表示...
-
重なった画像にクリックイベン...
-
Twitterの埋め込みしたWebペー...
-
画像をフォルダに入れれば表示...
おすすめ情報