GMarkerManagerで表示したマーカーを消すには。

159 views
Skip to first unread message

Yotashi

unread,
May 11, 2007, 1:10:20 AM5/11/07
to Google-Maps-API-Japan
たびたびすいません。

var mmgr = new GMarkerManager(Gmap);
mmgr.addMarkers(markers,0);
mmgr.refresh();

上のような感じでマーカーを表示した後、クリックイベントで消したいのですが、このmarkers(マーカーの配列)のみ消すにはどうしたらいいでしょ
う。

map.clearOverlays() ;だと、他のオーバーレイも一緒に消えてしまうので困っています。

takane

unread,
May 11, 2007, 7:44:57 AM5/11/07
to Google-Maps-API-Japan
> 上のような感じでマーカーを表示した後、クリックイベントで消したいのですが、このmarkers(マーカーの配列)のみ消すにはどうしたらいいでしょ
> う。
基本的にはGMarkerManagerで登録したマーカーを消す手段は用意されていないようです。

> map.clearOverlays() ;だと、他のオーバーレイも一緒に消えてしまうので困っています。
clearOverlaysを使用しても地図をスクロールさせると表示された記憶がありますので、
全部消す用途にも用いることはできないんじゃないかな、と思います。

単にマーカーを見えなくするという事であれば(試してないので動くかどうか分からないですけど)
version2.77でGMarkerクラスに実装されたhide()メソッドを利用してみてはいかがでしょうか。

Yotashi

unread,
May 11, 2007, 7:50:01 PM5/11/07
to Google-Maps-API-Japan
> > map.clearOverlays() ;だと、他のオーバーレイも一緒に消えてしまうので困っています。
>
> clearOverlaysを使用しても地図をスクロールさせると表示された記憶がありますので、
> 全部消す用途にも用いることはできないんじゃないかな、と思います。
>
> 単にマーカーを見えなくするという事であれば(試してないので動くかどうか分からないですけど)
> version2.77でGMarkerクラスに実装されたhide()メソッドを利用してみてはいかがでしょうか。

takaneサン、ありがとうございます。
確かにclearOverlays()に関しては、表示している範囲が消えるだけで効果は発揮していませんでした。スクロールしてみると、別のところは
消えていませんでした。
hide()も試しましたが、やはり普通のGMarkerじゃないからだめみたいです。
もう少しがんばってみます。

Yotashi

unread,
May 11, 2007, 10:06:26 PM5/11/07
to Google-Maps-API-Japan
mapにmoveendリスナーが登録されていて、そいつが再描画しているようなので、
GEvent.clearListeners(map,'moveend');
で再描画をやめさせることはできました。

しかし、他にmoveendイベントを仕込んであるのでもう一度addListenerしなければいけない。もっといい方法がないでしょうか。
http://www.google.com/apis/maps/documentation/reference.html
removeListener(handle);
このhandleに何かを指定してイベントリスナーを取り去れないでしょうか。

takane

unread,
May 12, 2007, 12:33:43 PM5/12/07
to Google-Maps-API-Japan
> hide()も試しましたが、やはり普通のGMarkerじゃないからだめみたいです。
>もう少しがんばってみます。
私も投稿してから試してみましたが、スクロールさせると再表示されてしまうみたいですね。
http://www.dammaps.jp/gmarkertest.html
ついでに登録時のマーカーとはべつのマーカーが再生成されるために、hide()メソッドがつかえなくなるようで。

で、別の方法としてGoogleが提供しているライブラリに削除も可能なマーカー管理オブジェクトがあるみたいです。
http://googlemapsapi.blogspot.com/2007/03/new-open-source-utility-library-for.html
サンプル見てみると
http://gmaps-utility-library.googlecode.com/svn/trunk/markermanager/release/examples/
addMarkersでmarkerを追加して refleshを呼ぶと表示
removeMarkerにmarkerを渡すとそれが消えて
clearMarkersを呼ぶとオールクリア
と、GMarkerManagerと似たような使い方してるみたいです。
Apache License, Version 2.0 なので、気軽に使えると思います。
お役に立てれば。

takane

unread,
May 14, 2007, 9:13:59 AM5/14/07
to Google-Maps-API-Japan
連続してすいません。
リンクを投げただけというのもなんなので、サンプルに組み込んでみました。
http://www.dammaps.jp/gmarkertest.html
「MarkerManagerを使用」ボタンを押すとMarkerManagerを使用して描画します。
スピードもGMarkerManagerをつかった場合とそんなに変わらないような気がします。

プログラムもライブラリのソースコードを取り込む行と
GMarkerManagerオブジェクトを作る変わりにMarkerManagerを生成すれば(Gを消すだけですね)
マーカーを追加したりするメソッドなんかは一緒なのでそのまま動くと思います。
しかも、removeMarkerを使えば懸案のマーカー削除が思いのままです。
今大量のマーカーを手軽に扱おうとしたら、これが一番の選択肢なんじゃないでしょうか。
ひょっとして、なにか落とし穴があるのかな?

Yotashi

unread,
May 14, 2007, 10:39:32 PM5/14/07
to Google-Maps-API-Japan
takaneさん。ありがとうございます。
こちらもMarkerManagerオブジェクト実装してみました。
よくできていますね。
こちらは解決したのですが、展開しようとしている配列が大きすぎるせいかScriptがしょっちゅうとまるのが悩みです。
いったんロードした配列は保持したまま、見せたり見せなかったりする(hide,show)メソッドがあればもっとうれしいです。


Reply all
Reply to author
Forward
0 new messages