マウスオーバーでリーフレットマーカーの色を変更する方法


9

Leafletメソッドsetstyleがポリゴンの色を変更するが、マーカーの色は変更しない理由を理解するのに苦労しています。

ポリゴンは正常に動作します:

ポリゴン

ただし、マーカーの色は変わりません。

マーカー

マーカーの上にマウスを置くと、その色が変わります。setStyleがこれを行うようです。しかし、私は続けますlayer.setStyle is not a function

AngularとLeafletを一緒に使用してマップを作成しています(angular-leaflet-directiveを使用しています)。

コードのマウスオーバー部分は次のとおりです。

$scope.$on("leafletDirectiveMap.geojsonMouseover", function (ev, leafletEvent) {
        pointMouseover(leafletEvent);
    });

    function pointMouseover(leafletEvent) {
        var layer = leafletEvent.target;
        layer.setStyle({
            weight: 2,
            color: '#666',
            fillColor: 'white'
        });
    }

マーカーがマウスオーバーさpointMouseverれると起動し、LeafletEvent.targetでsetStyleを呼び出そうとします。LeafletEventをconsole.loggedしましたが、確かにそのTarget部分があります:

目標

マーカーではなくポリゴンにsetStyleが機能するのはなぜですか?マーカーの色を変更する方法は何ですか?


2
GitHubのLeaflet.StyleEditorをチェックしてください。デモを機能させる方法を理解するのに少し時間がかかりましたが、1)スタイルツールをクリックします。2)マーカーをクリックします。3)キーポイント ...アイコン設定をデフォルト以外のものに変更します。4)選択します。色。出来上がり!かなり滑らか。
RyanKDalton 2014

そして、Leaflet StyleEditorは、アイコンに次の形式のMapbox URLを与えることによって魔法をかけます:api.tiles.mapbox.com/v3/marker/pin-m-circle+ffc871.pngここで、ffc871は16進数の色の文字列です。どうやら、それは任意の6桁の16進数文字列である可能性があります。:しかし、おそらくこれが最善、この目的のために設計されているようだMakiMarkers、使用して行われgithub.com/jseppi/Leaflet.MakiMarkers
LarsH

回答:




5

カイル・ペネルの回答を参照してください:

リーフレットのポリゴンはsetStyleに応答しますが、マーカーはsetIconを使用して変更できます

次の行を使用できます。

// create custom icon
IconStyleOne = L.icon({
            iconUrl: 'img/image1.png'
        });
IconStyleTwo = L.icon({
            iconUrl: 'img/image2.png'
        });

// ...

//Create empty geojson with mouseover and mouseout events
geojson_feature = L.geoJson(false, {
    pointToLayer: function (feature, latlng) {
        return L.marker(latlng, {icon: IconStyleOne});
    },
    onEachFeature: function(feature,layer)
            {
            layer.on("mouseover",function(e){
                layer.setIcon(IconStyleOne)
            });
            layer.on("mouseout",function(e){
                layer.setIcon(IconStyleTwo)
            });
            }
}).addTo(this.map);

1
カイル・ペネルには素晴らしい質問と答えがあります;)
カイル・ペネル

2

CSSを使用すれば、何百万もの異なるアイコン画像を作成する必要なく、それを行うことができます。

  1. マーカーを追加
  2. CSSのbackgroundcolor属性を見つけて変更します。

ここにあります:

var marker = L.marker([50,-20], {icon: myIcon}).addTo(map);
marker.valueOf()._icon.style.backgroundColor = 'green'

これは背景色のみを変更するのですか?典型的なアイコンの例を教えてください。
LarsH 2016年

1
@LarsH、はい、これは背景を変更します(青いティアドロップアイコンの後ろに緑色の四角を置きます)。残念ながら、塗りつぶしの色を変更することはできません。他の人が指摘したように、アイコンにはカラープロパティがありません。これは単なる画像(jpgまたはpng)であり、画像全体を交換する必要があります。
JMers

1

リッキーの答えを/programming/7415872/change-color-of-png-image-via-cssと組み合わせると、次のようなことができます。

var marker = L.marker([50,-20], {icon: myIcon}).addTo(map);
marker.valueOf()._icon.style.filter = 'hue-rotate(180deg)';

で遊んだり、色を増やしsaturate()たりすることもできbrightness()ます。

その質問への回答で述べたように、すべてのブラウザーでサポートされているわけではありません:https : //caniuse.com/#feat=css-filters

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.