Leafletで画像をon、offさせる方法について知りたいです。
現在、画像を表示させる際にはGeotiff画像からpng画像に変換した後に
var image1 = "./png/test.png";
var bounds1 = L.latLngBounds(
[36 ,138],
[37,139]
);
L.imageOverlay(image1, bounds1, { opacity: 1.0 }).addTo(map);
var image2 = "./png/test2.png";
var bounds2 = L.latLngBounds(
[36 ,138],
[37,139]
);
L.imageOverlay(image2, bounds2, { opacity: 1.0 }).addTo(map);
のように表示しているのですが、上記の書き方ですと同じ領域に複数枚の画像がある時に、
最後に指定された画像のみが表示されてしまいます。上記ですと、image2の画像が最上位に来てしまいます。
L.control.layers
を使用して、任意の画像のon、offをさせていきたいのですが、どのように制御したら良いのか教えて頂きたいです。
No.2ベストアンサー
- 回答日時:
No1です。
No1の回答中、画像のアドレスでご提示の「./png/~~」の部分を「./img/~~」としてしまいました。
訂正しておきます。
また、画像ディレクトリの「./png/」部分が共通なら、いちいち個別に記述しなくてもよいので、ついでにNo1をコンパクトにした例を以下に・・
//画像名をカンマ区切りで列挙(スペース等いれないこと)
const data = "test.png, test2.png,test3.png,test4.png";
const disp = (s => {
const bound = L.latLngBounds([36 ,138], [37,139]),
imgs = s.split(',').map(d => L.imageOverlay('./png/'+d, bound).addTo(map));
return n => {imgs.forEach((d, i)=>d.setOpacity(i==(n-1)?1:0))};
})(data);
disp(2);
※ 表示したい画像番号(=1始まりです)を指定して「 disp(1); 」のようにすることで、その順の画像が表示されるようになります。
No.1
- 回答日時:
こんにちは
Leafletを使ったことはありませんので、Documentを見ただけですが・・
>L.control.layersを使用して、任意の画像のon、offを~
複数の画像等をまとめておいて、制御するのにはlayerGroup化して制御するのは有効だと思いますが。
https://leafletjs.com/examples/layers-control/
一方で、画像単体を個々に「表示/非表示」だけの制御をしたいのなら、グループ化する必要もないのではないでしょうか?
直接、対象の画像の表示非表示を制御してしまった方が簡単な気がします・
(layerGroupで制御しても結果的には同様ですが・・)
また、ご質問の例で言えば、表示/非表示は opacityの1, 0に置換えてしまうのが、メソッドが用意されているようなので簡単そうです。
複数の画像セットを組み合わせたものを、セットで切り替えるような場合にはグループ化を利用したほうがよさそうですけれど・・
方法はいろいろあると思いますが、複数画像を同じ位置に表示しておいて入れ替えるということで良いのなら、配列を利用してまとめてしまう方がやりやすいと思います。
例えば、
const images = {
bound: L.latLngBounds([36 ,138], [37,139]),
src : ["./img/test.png", "./img/test2.png", "./img/test3.png", "./img/test4.png"],
elements: []
};
などと定義しておいて、mapに追加するには、
images.src.forEach( d=> {
images.elements.push( L.imageOverlay(d, images.bound).addTo(map));
});
で、まとめて追加できます。
表示の制御には
const dispImage = n => {
images.elements.forEach( (d, i) => {d.setOpacity(i==n?1:0)});
}
のような関数を用意しておいて、必要に応じて、
dispImage(2);
のように呼び出せば、指定した3番目(indexは0始まり)の画像だけが表示されます。
※ もしも、画像がご提示の2個だけならば、配列にせずに直接制御したほうが簡単かもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- Windows 10 Win10PCのExploreで大量の画像ファイルを表示させる際に、画像の中身を表示させる方法 2 2023/06/12 06:55
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- Excel(エクセル) 【EXCEL】空白でないセルの位置を検索したい 3 2022/04/26 22:03
- 教えて!goo 「教えて!goo」や「Yahoo知恵袋」に投稿する際の画像についてお聞きします。 2 2023/05/23 12:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Pythonでgif画像が上手く作れない
-
jqueryスライダーを2段でスライ...
-
EXCEL VBA 複数のImageコントロ...
-
【EXCEL VBA】ダブルクリックで...
-
画像をフーリエ変換するソース...
-
こんなことてしますか??
-
Excel ユーザーフォームで表示...
-
uwscについて質問です。
-
gif 画像上の ボタンに リン...
-
VBA シート毎に画像挿入
-
イメージマップでマウスオーバ...
-
uwcs のマクロで画像認識をして...
-
ヒストグラム類似度による画像...
-
Leafletで画像をon、offさせる...
-
Pythonのプログラム初心者の問題
-
UWSCの画像認識と条件分岐につ...
-
自作の地図をグーグルマップの...
-
EXCELに貼り付けた画像の位置を...
-
gif画像が壊れて読み込まない
-
画像のビット数を変更する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
こんなことてしますか??
-
【EXCEL VBA】ダブルクリックで...
-
Excelで画像URLを1つずつセル...
-
EXCEL VBA 複数のImageコントロ...
-
HTMLで画像をポップアップで表...
-
背景画像の繰り返しについて
-
Excel ユーザーフォームで表示...
-
gif 画像上の ボタンに リン...
-
VBA シート毎に画像挿入
-
jQuery . プログラミング 助け...
-
VBAのユーザーフォームのイメー...
-
jqueryスライダーを2段でスライ...
-
ホームページバナーを(画像が...
-
「using Windows」でエラーが出る
-
スマホでサイトの画像を長押し→...
-
【WPF】画像の切り替え
-
PowerPoint VBA で画像の鮮明度...
-
画像のピクセルデータの取得
-
UWSCの色判定
-
UWSCを使った画像認証マク...
おすすめ情報