質問、マーカーをクリックした時の情報ウィンドウ表示による map 移動

150 views
Skip to first unread message

山田 隆二

unread,
Sep 24, 2007, 12:20:18 PM9/24/07
to Google-Map...@googlegroups.com
よろしくお願いします。
google map apiの質問です。

データベースからマーカーをプロットしてクリックしたら
情報ウィンドウを表示させたいと思っています。


mapの中心から距離の近い順に20個のマーカーを表示させるま
ではできました。
マーカーがmapの端のほうにあるとクリックした時に情報ウィ
ンドウを表示さ
せるために、地図が移動して(ドラッグした時と同じ動き)、moveend
イベ
ントが発動されて中心が変わってしまい、新たな中心から20個
を選んできてマー
カーをプロットしなおしてしまいますので、情報ウィンドウは
すぐ閉じられて
しまいます。

何かいい対策はないでしょうか?

window.onload=function(){
map=new GMap2(document.getElementById("gmap"));
map.setCenter(new
GLatLng(35.65848180227598,139.70150470733642),16);
map.addControl(new GLargeMapControl());
gGeo=new GClientGeocoder();

httpobj=GXmlHttp.create();
httpobj.open("get","test11.php?x=139.7015&y=35.6584");
httpobj.onreadystatechange=function(){
if((httpobj.readyState==4)&&(httpobj.status==200)){
addmarker();
}
httpobj.send(null);

GEvent.addListener(map,"moveend",function(){
var x1=(map.getCenter()).lng();
var y1=(map.getCenter()).lat();
httpobj=GXmlHttp.create();
httpobj.open("get","test11.php?x="+x1+"&y="+y1);
httpobj.onreadystatechange=function(){
if((httpobj.readyState==4)&&(httpobj.status==200)){
addmarker();
}
}
httpobj.send(null);
});
}
//中心の緯度経度をtest11.phpに渡し、中心と各データ(緯度
、経度がある)
//との距離を計算し、近い順に20個をxml形式ではき出す
//渡されたXMLデータをもとに20個プロット
function addmarker(){
map.clearOverlays();
var xmldata=httpobj.responseXML;
var pointdata=xmldata.getElementsByTagName("point");
for(var i=0;i<pointdata.length;i++){
var mx=pointdata[i].getElementsByTagName("x")
[0].firstChild.nodeValue;
var my=pointdata[i].getElementsByTagName("y")
[0].firstChild.nodeValue;
var marker=new GMarker(new GLatLng(my,mx));
map.addOverlay(marker);
GEvent.addListener(map,"click",function(marker,point){
if(marker){
marker.openInfoWindowHtml("abcde");
}
});
}
}


ソースは以上です。

初心者で至らない点が多数ですがご教授ください。


--------------------------------------
Easy + Joy + Powerful = Yahoo! Bookmarks x Toolbar
http://pr.mail.yahoo.co.jp/toolbar/

おさ

unread,
Sep 25, 2007, 7:56:50 PM9/25/07
to Google-Maps-API-Japan
私も同じ現象で悩んだことがありますが、やっつけ的な対応をしたことがあります。

まずフラグとなるグローバル変数を用意しておきます。
マーカーがクリックされてウィンドウを開く前にフラグを立てておき、
moveendイベントの中ではフラグが立っていたらマーカーを読みに行かない
という判定を追加して、ウィンドウが開くことによって発生するスクロールでの
再読込を防止しました。

ほかに上手い対応方法があればわたしも知りたいです。
よろしくお願いします。

Reply all
Reply to author
Forward
0 new messages