web-dev-qa-db-ja.com

初期化後にLeafletマップオブジェクトを検索する

Leafletライブラリ を使用して、別のスクリプトによってすでに初期化されているマップ上のいくつかのものを変更しようとしています。この他のスクリプトは、マップオブジェクトをグローバル変数、またはスクリプトでアクセスできる他の場所に格納しませんでした。そのため、現在私のページには地図がありますが、地図オブジェクトがありません。

私がやりたいのは、すでに初期化されているマップのオブジェクトを取得して、それに変更を加えることです。たとえば、関数L.getMap('myID')が存在する場合、そのようなメソッドを使用して、コンテナmyIDにリンクされたマップオブジェクトを取得したいと思います。

TL; DR:コンテナのIDを使用して、すでに初期化されたリーフレットマップのマップオブジェクトを取得する方法はありますか?

10
Joeytje50

Mediawiki拡張機能によって作成されたグローバル配列からマップにアクセスできます。

Es:ページの最初のマップにアクセスするため

window.maps.leafletList[0].map.getCenter()
2
Fabiano Taioli

記録として、マップが初期化される前(つまり、「他のスクリプト」が実行される前)にJSコードを挿入/実行する可能性がある場合は、作成された各マップへの参照を保持するようにリーフレットを非常に簡単にカスタマイズできます。

例えば。 L.Mapクラスで addInitHookコンストラクタフック を使用します。

// Before map is being initialized.
var mapsPlaceholder = [];

L.Map.addInitHook(function () {
  mapsPlaceholder.Push(this); // Use whatever global scope variable you like.
});

// "Other script", can be in its own separate <script> and JS file.
L.map('mapId'); // The map object is pushed into `mapsPlaceholder` array.

// Then retrieve the map object to further manipulate the map.
var map = mapsPlaceholder.pop();

デモ: https://plnkr.co/edit/mywpSbfRPFOnJ8c1RNsZ?p=preview

18
ghybs