dポイントプレゼントキャンペーン実施中!

Yahooマップでマーカーを表示したり消したりしたいのですが、
内容は、マップ上でクリックされて、マーカーがひとつもなければクリックした場所にマーカーを表示し、マーカーが既にあれば、そのマーカーを消して新たにクリックされた場所にマーカーを表示したいのですが、どのようにすればいいでしょうか?

下記のソースでクリックするごとにマーカーは表示されるのですが、既にある場合に消す方法がわかりません。

よろしくお願いします。


Y.Event.addListener(ymap, 'click', onclick);
function onclick(latlng){
ymap.addFeature( new Y.Marker(new Y.LatLng(latlng.lat(),latlng.lng())));
}

A 回答 (2件)

こんにちは。



こんな感じで実装できませんか。
こうすることでクリックするごとに削除して、生成を繰り返します。


window.onload = function(){
var yMap = new Y.Map("map");
yMap.drawMap ( new Y.LatLng(35.66572, 139.73100), 17, Y.LayerSetId.NORMAL );
Y.Event.addListener ( yMap, 'click', putMark);

// マーク用の変数
var mark;
function putMark ( latlng ) {
// 表示されているマークを削除
yMap.removeFeature ( mark );
// マークを新規に生成
mark = new Y.Marker ( new Y.LatLng(latlng.lat(),latlng.lng()) );
yMap.addFeature ( mark );
}
}
    • good
    • 1
この回答へのお礼

ありがとうございます!
思っていた通りの挙動になりました。

変数の宣言をfunction外ですれば良かったんですね!
言われてみれば当たり前なんですが、記述したとおり、function内でマーカーを定義していたので、removeできなかったんですね。

本当に助かりました。ありがとうございます。

お礼日時:2012/02/09 09:09

ID登録が必要みたいなので、試してませんが、



>既にある場合に消す方法がわかりません。
以下のリファレンス(?)によれば、削除は
 removeFeature()  みたいですね。
http://developer.yahoo.co.jp/webapi/map/openloca …


常に一つ以下しかマーカーを表示しないのであれば、単純に、記録用の変数にマーカーを記憶しておいて
 1)変数が定義されていれば、マーカーを削除
 2)新しい位置にマーカーを表示(→変数に記憶)
の手順でよいのではないでしょうか。
    • good
    • 0
この回答へのお礼

そうなんです。
考え方やfujillinさんがおっしゃっていただいたような方法はわかるのですが、Javascriptでどのように記述すればよいのかわからなかったのです・・・
お恥ずかしい限りです。
なんとか、No.2さんの方法でできましたので、締め切らせて頂きます。
ご回答、ありがとうございました。

お礼日時:2012/02/09 09:07

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