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-plug_8436280178_mini-thumbnail

TwitterBootstrap3 用のバリデーションチェックプラグイン BootstrapValidator の導入から Live チェックまでを試してみた

BootstrapValidator は、TwitterBootstrap3 で構築したサイト用の

記事を読む

icatch-automatic_2714993937_mini-thumbnail

Grunt + QUnit + PhantomJS でテストを自動実行してくれる環境を構築する

先日投稿した GoogleMap サンプルのプロジェクトに Grunt の LiveReload を

記事を読む

icatch-mist_mini

jQuery を使ってページの opacity を徐々に上げて fadeIn して見せる

仕事で HTML を使ってコンテンツをいくつか作成しました。 その際に他でも使い回しが効くスニペット

記事を読む

icatch-bootstrap3

TwitterBootstrap3 をベースにした画面に GoogleMap を埋め込む

このところ立て続けに GoogleMap を JavaScript から扱う記事を投稿してます。 意

記事を読む

icatch-pointer_7269926502_mini-thumbnail

GoogleMaps の JavaScript API (v3) を使って地図上に複数の Marker を表示するサンプル

これまで GoogleMaps API を使って Marker やら InfoWindow を表示す

記事を読む

icatch-googlemap_4866826566_mini-thumbnail

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

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

記事を読む

icatch-googlemap_3384984991_mini-thumbnail

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

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

記事を読む

icatch-where

jQuery を使ってファイルアップロードフォームのファイルが選択されているかを確認する方法

HTML に設置したファイルアップロードフォームにファイルが選択されているかを確認する方法を調べまし

記事を読む

icatch-class_303144538_mini-thumbnail

JavaScript のクラス定義

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

記事を読む

icatch-googlemap_3384995399_mini-thumbnail

GoogleMap を使って住所から緯度・経度を計算する

先日も GoogleMpa のジオコーディングを使った地図を表示するメモをアップしましたが、今回も

記事を読む

Googleアドセンス用(PC)

Message

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


七 + = 12

次の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 ↑