GoogleMapsAPIを使ってMarkerを削除する方法

公開日: : 最終更新日:2014/05/05 JavaScript , , , ,

GoogleMaps API(v3) を使って地図上に表示されている Marker を削除する方法についてです。

TODO では Marker の非表示を説明しましたが、今回は Marker の削除です。

icatch-simcity_536954375_mini

photo credit: Duncan Rawlinson. Duncan.co via photopin cc

目次

1. Marker を非表示にする・表示する

Marker の削除は、google.maps.Marker#setMap メソッドを使います。

setMap の引数に null を設定してメソッドを実行すると、オブジェクトが地図上から Marker が削除されます。

削除した Marker は復元できないので、その点に注意してください。

コードはこんな感じです。

marker.setMap(null);

2. 動作確認

動くものは次の URL で公開しているので、実際に動かしてみたい方はご利用ください。

次はこのサイトのスクリーンショットです。
スカイツリーに Marker が付いています。

2014-04-06-2-01

図の赤丸で囲った「DELETE」ボタンをクリックすると、地図上に表示されている Maker が削除されます。

2014-04-06-2-02

試しにいくつか Marker を追加して、、、

2014-04-06-2-03

「DELETE」ボタンをクリック。
すると、確認ダイアログが表示されます。

2014-04-06-2-04

ここで「キャンセル」を選択すると、元の状態に戻るだけです。

「削除」をクリックすると、ご覧のとおり Marker が削除されます。

2014-04-06-2-05

ソースコード

上記サンプルサイトのソースコードは GitHub に登録してあります。
興味のある方はご覧ください。

Marker を削除する部分のソースコードはこんな感じで実装しました。
delete 関数で操作しています。

/**
 * GoogleMaps 上に表示する Marker と、その Marker の InfoWindow を保持するクラス。
 * 
 */
var MarkderInfoWindow = (function() {

    /**
     * コンストラクタ関数。
     * 
     * @param  {Object} marker Marker オブジェクト
     * @param  {Object} location Maker の緯度・経度を格納したオブジェクト
     * @param  {Object} centerLocation GoogleMaps 上の中心点となる緯度・経度を格納したオブジェクト
     */
    var constructor = function(marker, location, centerLocation) {
        this.marker = marker;
        this.infoWindow = this.createInfoWindow(location); // Marker に紐づく InfoWindow オブジェクト
        this.direction = LocationSort.judge(centerLocation, location); // この Marker の方角

        this.showInfoWindow();
    };

    constructor.prototype = {
        /**
         * InfoWindow を表示する。
         * 
         * @param  {Object} location Marker の緯度・経度を格納したオブジェクト
         * @return {Object}          InfoWindow オブジェクト
         */
        createInfoWindow: function(location) {
            var template = _.template($('#infowindow_template').text());
            var tag = template({
                latitude: location.k,
                longitude: location.A
            });
            return new google.maps.InfoWindow({
                content: tag
            });
        },
        /**
         * InfoWindow を表示する。
         * 
         */
        showInfoWindow: function() {
            this.infoWindow.open(this.marker.getMap(), this.marker);
        },
        /**
         * InfoWindow を非表示にする。
         * 
         */
        hideInfoWindow: function() {
            this.infoWindow.close();
        },
        /**
         * Marker と InfoWindow の表示を切り替える。
         * 
         * @param  {Object} toggleBoard 表示・非表示を判定するオブジェクト
         */
        toggle: function(toggleBoard) {
            if(toggleBoard.isHideDirection(this.direction)) { // この方角が非表示ならば
                this.marker.setVisible(false); // Marker を非表示にする
                this.hideInfoWindow(); // InfoWindow を非表示にする
            } else {
                this.marker.setVisible(true); // Marker を表示する
            }
        },
        /**
         * 保持している Marker と InfoWindow を削除する。
         * 
         */
        delete: function() {
            this.marker.setMap(null);
            this.infoWindow.close();
        }
    };

    return constructor;
    
})();

4. まとめ

以上、GoogleMapsAPI を使って Marker を削除する方法でした。

上記のサンプルサイトで実装した「DELETE」ボタンは、すべての Marker が削除されます。
選択したものだけを削除する機能もあったら便利かなぁと思っています。

特に難しいこともないので、そのうち実装してみようかなと。

5. その他の GoogleMap に関する記事

その他の GoogleMap に関する記事は次の通りです。
気になる記事があったらぜひチェックしてみてください!

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

icatch-googlemap_3384984991_mini-thumbnail

住所から GoogleMap を表示するサンプル

ここ直近の2プロジェクトで緯度・経度(もしくは住所)から GoogleMap を表示する要件がありま

記事を読む

icatch-switch_mini

jQuery を使って表示する画像を setInterval を使って切り替える

画面に表示する画像を一定期間で切り替えるスニペットです。 スライドショー的なプラグインで済ますこと

記事を読む

Head in Hands

JSON をオブジェクトに変換するときに注意したいこと

おそらくですが、これから書く内容は常識なんだと思います。 が、その常識を知らなかったためにかなりの

記事を読む

icatch-drill_mini

Underscore.js の template を使ってドリルダウンを実装するスニペット

先日、Underscore.js の template と each を使って JSON から se

記事を読む

icatch-googlemap_4866826566_mini-thumbnail

GoogleMap の Marker に InfoWindow を設定するサンプル

GoogleMap の Marker には InfoWindow を使って付加情報を設定できます。

記事を読む

icatch-painting_mini

jQuery を使ってタグに設定されているクラスをすべて取り除いた後に指定のクラスに変更する

jQuery を使ってタグに設定されているすべてのクラスを取り除いた後に指定のクラスを設定する方法で

記事を読む

icatch-class_303144538_mini-thumbnail

JavaScript のクラス定義

最近 JavaScript を使う機会が増えてきて、快適にコードが書けるように環境を少しずつ整えてき

記事を読む

icatch-format_mini-thumbnail

JavaScriptなどをフォーマットするGruntプラグイン grunt-jsbeautifier を使ってみる

Java を使ってプログラムを書いているときはソースコードをフォーマットするのに、JavaScrip

記事を読む

icatch-flag_1395019914_mini-thumbnail

GoogleMaps の JavaScript API(v3) を使って、常に1つの InfoWindow だけ表示されるように制御する

前回アップした GoogleMaps の JavaScript API (v3) を使って地図上に複

記事を読む

icatch-exception_2482521750_mini-thumbnail

Error オブジェクトの種類と独自例外オブジェクトの作成方法

JavaScript で例外オブジェクトを扱ったことがなかったので、簡単な内容ですが例外オブジェクト

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


九 + 3 =

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑