🐥
Mapbox GL JSのremoveSourceの挙動
はじめに
先日、口頭で質問を受けた際に「sourceを削除する機能はないのではないか?」と回答しました。が、後で調べてくるとしっかりMap#removeSource
というメソッドが存在しました。あやふやな記憶に頼らずちゃんと調べないといけないといけないですね。ということで、戒めの意味も込めてremoveSource
の挙動を見ていきます。
処理の流れ
Map#removeSource
は以下の部分です。基本的にStyle#removeSource
を呼び出しているだけです。
Style#removeSource
は以下の部分です。
いくつか大事な部分を見ていきます。
まず、ソースがレイヤーで使用されている場合は削除できません。
そして、ソースの(キャッシュ)データを保持している配列から該当するソースを削除します。
サンプル
簡単なサンプルを作りました。
addSource -> addLayerとクリックとレイヤーが追加されます。この状態でremoveSourceをクリックするとコンソールにError: Source "rect" cannot be removed while layer "rect" is using it.
というエラーが表示されます。ちょうど、以下の部分のエラーメッセージですね。
まとめ
記事を書いていて、「レイヤーを消さずにソースを消そうとするとエラーになる」という話を以前どこかでしたような気がしてきました。記憶ってあてになりませんね。
GitHubで編集を提案
Discussion