アプリ版:「スタンプのみでお礼する」機能のリリースについて

お疲れ様です。
お世話になっております。

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(ふきだしのなかみ) });
}
);
}
}

A 回答 (3件)

それはおそらく


geocoder.getLatLng()
をループで連続してまわしているからです。
位置の取得に失敗しているため、マーカー表示できないのです。
無料サービスの方では、連続してジオコーディングできない仕様に
なっています。レスポンスのステータスに620が返っているはずです。
ステータスが200(正常以外)の時は、時間を2~3秒待って、再度
コールするようなループにすればうまくいくはずです。
ステータスによるハンドリングが面倒ならpointがnullかどうかで判定できます。

参考URL:http://code.google.com/intl/ja/apis/maps/documen …
    • good
    • 1
この回答へのお礼

(゜Д゜;)ガーーーーン
知りませんでした・・・。

DBに登録される時点でlat,lonにgetLatLngで変換して入れようと思います。

すっごい困ってたんです。
おかげさまで助かりました。
今すぐ変換スクリプト組んできます。
ありがとうございましたー。

お礼日時:2009/09/10 20:33

連続回答してすみません。


GooglMap好きなもので....
マーカーが多量にある時の抜本的な対策ですが
位置情報は都度都度ジオコーディングするのでなく、
予め取得した結果をDB(javascriptでは無理)なり、XMLなり、
JSONなり、リテラル値で準備しておいて、そこから取得して
マーカー作成し表示させるのです。

それでもマーカーが100個..-> 1000個になると、ブラウザーが
ハング状態になります。
そんな時は、GMarkerManagerクラスを使って、マップスケール毎に
表示するマーカーを制御したりします。

それでも遅いなら、「Google Maps API for Flash」の方を使います。
    • good
    • 0

補足


待つのは2~3秒でなく、
0.2~0.3秒でもだいじょうぶそうです。(混み具合によります)

参考投稿(よそですが)
http://groups.google.com/group/Google-Maps-API-J …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!