お疲れ様です。
お世話になっております。
Google Map Apiで複数のマーカーを設置するスクリプトを組みました。
10件程度は問題なく表示されるのですが、10件を境に、表示されたり、されなかったりします。
F5で表示されるもの、されないものとまばらになるので、なんとなく原因は、処理よりも表示のほうが速いからではないか?ということなんですが、JSの処理の流れがイマイチわかっていないので、結論は出せません。
実際20件登録したところ、10件~17件の間で出たり出なかったりします。1~10件までは必ず表示され、その後ろのIDを持つものがランダムになります。
これを確実に全部表示されるようにしたいのですが、表示の前にsleepなどかけるのがよいのか、ajaxにしてみるのがよいのかなど、検討がつきません。
下記が、書いたスクリプトです。
もしよければ、アドバイスお願いします。
var markers = new Object();
var marker = new Object();
marker["name"] = "xxx";
marker["icon"] = "ylw-pushpin";
marker["address"] = "座標変換用の住所";
marker["text"] = "噴出しの中身";
marker["center"] = "中心にするかしないか";
markers[0] = marker;
20回ループ
markers[20] = marker;
googlemap(markers)
-----------googlemap(markers)
function googlemap(markers) {
if (GBrowserIsCompatible()) {
geocoder = new GClientGeocoder();
map = new GMap2(document.getElementById("map"));
map.addControl(new GSmallZoomControl());
map.addControl(new GScaleControl());
for(var i in markers){
showAddress(markers[i]);
//ここは20回ちゃんとまわってるようです
}
}
}
------------------showAddress()
function showAddress(amarker) {
if (geocoder) {
geocoder.getLatLng(
amarker['address'],
function(point) {
if(amarker['center'] == 1){
map.setCenter(point, 12);
}
//アイコンが指定されてたらアイコンを設定
if(amarker['icon']){
var marker = new GMarker(point,micon);
//アラートしてみると、ここが10回~17回ぐらいしか回ってない
}else{
var marker = new GMarker(point);
}
map.addOverlay(marker);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(ふきだしのなかみ) });
}
);
}
}
No.1ベストアンサー
- 回答日時:
それはおそらく
geocoder.getLatLng()
をループで連続してまわしているからです。
位置の取得に失敗しているため、マーカー表示できないのです。
無料サービスの方では、連続してジオコーディングできない仕様に
なっています。レスポンスのステータスに620が返っているはずです。
ステータスが200(正常以外)の時は、時間を2~3秒待って、再度
コールするようなループにすればうまくいくはずです。
ステータスによるハンドリングが面倒ならpointがnullかどうかで判定できます。
参考URL:http://code.google.com/intl/ja/apis/maps/documen …
(゜Д゜;)ガーーーーン
知りませんでした・・・。
DBに登録される時点でlat,lonにgetLatLngで変換して入れようと思います。
すっごい困ってたんです。
おかげさまで助かりました。
今すぐ変換スクリプト組んできます。
ありがとうございましたー。
No.3
- 回答日時:
連続回答してすみません。
GooglMap好きなもので....
マーカーが多量にある時の抜本的な対策ですが
位置情報は都度都度ジオコーディングするのでなく、
予め取得した結果をDB(javascriptでは無理)なり、XMLなり、
JSONなり、リテラル値で準備しておいて、そこから取得して
マーカー作成し表示させるのです。
それでもマーカーが100個..-> 1000個になると、ブラウザーが
ハング状態になります。
そんな時は、GMarkerManagerクラスを使って、マップスケール毎に
表示するマーカーを制御したりします。
それでも遅いなら、「Google Maps API for Flash」の方を使います。
No.2
- 回答日時:
補足
待つのは2~3秒でなく、
0.2~0.3秒でもだいじょうぶそうです。(混み具合によります)
参考投稿(よそですが)
http://groups.google.com/group/Google-Maps-API-J …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- その他(プログラミング・Web制作) python 2 2022/12/23 09:06
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- その他(プログラミング・Web制作) Leafletで画像をon、offさせる方法について 2 2022/11/01 15:34
- JavaScript gasについて 1 2022/05/31 21:51
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホームページビルダー16 地図...
-
iPhoneサイトにgooglemapを掲載...
-
LightWindowのサイズがおかしい...
-
map = new google.maps.Mapで作...
-
googlemapsとjavascriptの勉強...
-
マイページはどこを開くの
-
デジタル時計の時刻合わせの方...
-
デスクトップ画面を4分割するには
-
ウインドウを毎回同じ位置、大...
-
Excelでワードアートや図を常に...
-
エクセルのシート上に別のシー...
-
ポップアップウィンドウがブロ...
-
Javascript_submit()完了後に処...
-
5ちゃんねる
-
エクセルVBAでフォームのListbo...
-
【Android】ユーザー補助機能ボ...
-
リストビューをスクロールさせ...
-
スライドショーを全画面でなく...
-
Excelで一部分だけを常に表示さ...
-
PDFを(htmlのように)無限に縦...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Yahoo地図でマーカーを表示した...
-
VBAでオブジェクトがありません...
-
【javascript】住所から郵便番...
-
WordのVBAについて
-
googlemapで複数条件絞り込みで...
-
GoogleMap のマーカーに数値を...
-
GoogleMapsでルート内の座標を...
-
GoogleMapお店の情報をJSONで取...
-
google map の画面サイズを小さ...
-
Google Map Api 複数のマーカ...
-
Google マップにマーカーと同心...
-
逆ジオコーディングについて
-
ホワイトボードに水性顔料マー...
-
spanの位置、サイズを取得したい
-
PHPで入力された住所で地図表示
-
googlemap api で複数マーカー表示
-
ホームページの案内地図をマッ...
-
入力した住所の画面内でグーグ...
-
グーグルマップ(Googlemap)を...
-
Google maps API 吹き出しに画像
おすすめ情報