
お疲れ様です。
お世話になっております。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Google マップにマーカーと同心...
-
デジタル時計の時刻合わせの方...
-
マイページはどこを開くの
-
[Java] Edgeでのアドレスバー非...
-
Youtubeのバグ
-
Outlookでこのような表示がされ...
-
パソコンを起動させたら文字の...
-
スクリプトって、何ですか?ど...
-
リンク時、親ウインドウを最前...
-
「Cancel = True」とはどういう...
-
Outlookのエラー表示について
-
小さな表示窓の呼び方は
-
サブウィンドウを常に最前面に...
-
LINEのポップアップの順番を教...
-
Javascript_submit()完了後に処...
-
MFCを使って、ひとつのkey(CStr...
-
スライドショーを全画面でなく...
-
Edge Chrom などの超初心者質問...
-
文章の自動スクロール
-
window.open("about:blank")
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Yahoo地図でマーカーを表示した...
-
VBAでオブジェクトがありません...
-
【javascript】住所から郵便番...
-
どうして+3
-
逆ジオコーディングについて
-
WordのVBAについて
-
GoogleMapsAPI ルート案内
-
Google Maps API v2 現在位置か...
-
地図画面移動のプログラムについて
-
map = new google.maps.Mapで作...
-
Google Mapを利用した情報追加...
-
PHPで入力された住所で地図表示
-
Googlemapsapi V=3ルート検索
-
郵便番号で検索⇒距離順に結果リ...
-
楽天APIについて、グーグルマッ...
-
aspのセレクトボックスにDBのデ...
-
google map の画面サイズを小さ...
-
googlemapで複数条件絞り込みで...
-
既存のgoogleマップに半径表示...
-
onMouseOver、onMouseOutイベン...
おすすめ情報