データベースからマーカーをプロットしてクリックしたら
情報ウィンドウを表示させたいと思っています。
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/
まずフラグとなるグローバル変数を用意しておきます。
マーカーがクリックされてウィンドウを開く前にフラグを立てておき、
moveendイベントの中ではフラグが立っていたらマーカーを読みに行かない
という判定を追加して、ウィンドウが開くことによって発生するスクロールでの
再読込を防止しました。
ほかに上手い対応方法があればわたしも知りたいです。
よろしくお願いします。