複数マーカーをおくと、10件目より後が表示されない

27 views
Skip to first unread message

kuro

unread,
Sep 10, 2009, 6:08:12 AM9/10/09
to Google-Maps-API-Japan
初めて投稿します。
よろしくお願いします。

こちらの存在を知らなかったので、OKWAVE(http://okwave.jp/qa5278821.html)のほうにも同じ内容で投げていま
す。
マルチになってしまって申し訳ないですが、より専門的に回答をいただきたかったので、こちらにも投稿させてください。

内容は、OKWAVEの内容と同じになります。

ユーザーがフォームから住所や噴出しの内容などを入力して、動的にマーカーを置くスクリプトをPHP+JSで作りました。

テストでちまちまと表示する分には問題なかったのですが、本番のデータ(最終的に100~200程度になるようです)
を投入したところ、10件目までは問題なかったのが、10件を境に、表示されるもの、されないものがでてきました。

なんとなく原因は、処理よりも表示のほうが速いからではないか?ということなんですが、JSの処理の流れがイマイチわかっていないので、結論は出せませ
ん。(そもそもそんなことがおきるのか?処理が終わるまでまってくれないんだろうか)
実際20件登録したところ、10件~17件の間で出たり出なかったりします。1~10件までは必ず表示され、その後ろのIDを持つものがランダムになり
ます。

PHPの配列をJSに置き換えて、多次元連想配列を作って、最後にgooglemapという関数に投げています。
HTMLソースを見ると、20件分の配列が出てしまうので、もっとスマートなやり方がよかったんですが、
JSはあまり書きなれていないことと、時間がなかったのでこういう形になりました。

ひとまず、見た目云々は置いといて、入力したデータすべてが反映されるようにしたいです。
下記のソースで直したほうがよいところはありますか?
sleepをかけるとか、ajaxにするとか、何か解決策はないでしょうか。すみませんが、よろしくお願いします。

切り分けとして、アイコンをデフォルトにしてみたのですが、それが原因ではありませんでした。
geocoder.getLatLngのpoint.lat();をalertしても、10回程度しか出ませんでした。
(もっといろんなところでアラートしてどこでおかしくなってるか確認すればよかったですね。
今家からなので、明日もっと触ってみようとは思ってますが、納期的に時間がないのですみません)


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);
}else{
var marker = new GMarker(point);
}
//アラートしてみると、ここが10回~17回ぐらいしか回ってない
map.addOverlay(marker);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(ふきだしのなかみ) });
}
);
}
}

kuro

unread,
Sep 10, 2009, 7:47:59 AM9/10/09
to Google-Maps-API-Japan
自己レスすみません。
OKWAVEのほうで回答がつきました。

無料のapiでは、geocodingに制約がつくんだそうです。
知らずに投稿してしまい、申し訳ありませんでした。

DBに投げる時点で、緯度経度に変換して登録しようと思います。
お騒がせしました。

Masashi.K

unread,
Sep 10, 2009, 8:43:43 AM9/10/09
to Google-Maps-API-Japan
kuroさん

そうですね、ジオコーディングを行いながらマーカーのマッピングは
10個以上は、高い確率で失敗しますね。
大量の時には、DB側で経度・緯度に変換しておく方法がBestです。

複数の住所を一括で変換するなら、個人的には「AGtoKML」というソフトがお勧めです。
CSVインポート・エクスポートが行えるので、簡単に変換できますよ。

http://homepage2.nifty.com/mohri/AG2KML_help.htm
Reply all
Reply to author
Forward
0 new messages