30

Mapbox-GL を使用してマッピング Web アプリケーションを構築しています。クールな機能がたくさんあります。Mapbox Web サイトの例に従って、ベース マップ (衛星、地形など) を切り替えるボタンを設定しました。

私が抱えている問題は、スタイルを変更すると、レイヤーとして読み込まれたポリゴンが削除され、マップが再読み込みされることです。ユーザー クエリに基づいて、Mongo データベースからポリゴンをレイヤーとして読み込みます。ベースマップを変更して、それらのレイヤーを保持できるようにしたいです。

マップをリロードせずに、または少なくともレイヤーをドロップせずにスタイルを変更する方法はありますか?

これはスイッチャーのコードです。例と同じですが、カスタム スタイルの条件を追加しました。

 var layerList = document.getElementById('menu');
    var inputs = layerList.getElementsByTagName('input');

    function switchLayer(layer) {
        var layerId = layer.target.id;
        if (layerId === 'outdoors') {
            map.setStyle('/outdoors-v8.json');
        } else {
        map.setStyle('mapbox://styles/mapbox/' + layerId + '-v8');
        }
    }

    for (var i = 0; i < inputs.length; i++) {
        inputs[i].onclick = switchLayer;
    }
4

3 に答える 3

6

たぶん私は遅れていますが、記録のために:

  • style.loadパブリック API の一部ではありません
  • map.on('styledata')スタイルの変更を監視するために使用します

参照してください:

于 2020-03-03T20:25:34.150 に答える
1

Other answers suggest that map.on('styledata') is the correct approach. But it doesn't fire reliably, and the related isStyleLoaded is inaccurate.

Looks like we're stuck using style.load for now.

于 2021-03-31T15:06:42.130 に答える