在传单中,如何更改"crs"和其他"Map options"?



例如,我创建了一个这样的地图:

    map = L.map('map',
        {maxZoom: 17,
        attributionControl: false,
        zoomControl: false}
    )

稍后,我想更改"crs"并为map对象添加一个键。

我希望可能有一个名为setOption的方法,如下所示:

map.setOption({crs:L.CRS.BEPSG3857, customOption: true})

但不幸的是,没有这种setOption方法。有没有人对如何更改传单地图对象的Map option有想法?

查看此示例,了解如何即时更改 CRS:http://jsfiddle.net/alekzonder/qxdxqsm3/

var center = map.getCenter();
if (...) {
   map.options.crs = L.CRS.EPSG3395;
} else {
   map.options.crs = L.CRS.EPSG3857;
}
map.setView(center);
map._resetView(map.getCenter(), map.getZoom());

我也有类似的问题。我需要动态设置滚动轮缩放选项。

我正在使用 L.版本 1.3.1

如果 scrollWheelZoom 选项在 map init 上为 true,它将启用相应的处理程序。因此,我们需要手动启用/禁用处理程序以将更改应用于地图。

处理程序/映射属性列表:框缩放、双击缩放、拖动、键盘、滚轮缩放、点击、触摸缩放

我的解决方案看起来像这样:

class MyMap {
    // constructor(props) {
    //  ...
    // }
    // getMapElement(){
    //  ...
    // }
    // getBaseLayer(){
    //  ...
    // }
    initMap( mapOptions ){
        if ( ! this.map  ) {
            this.map = L.map( this.getMapElement(), mapOptions );
            this.getBaseLayer().addTo( this.map );
        }
    }
    setMapOptions( newMapOptions ){
        // loop newMapOptions object
        for ( let newMapOptionKey in newMapOptions ) {
            if( newMapOptions.hasOwnProperty(newMapOptionKey)) {
                this.setMapOption( newMapOptionKey, newMapOptions[newMapOptionKey] );
            }
        }
    }
    setMapOption( newMapOptionKey, newMapOptionVal ){
        // set map option
        L.Util.setOptions( this.map, {[newMapOptionKey]: newMapOptionVal});
        // apply option to handler
        if ( this.map[newMapOptionKey] instanceof L.Handler ) {
            if ( newMapOptionVal ) {
                this.map[newMapOptionKey].enable();
            } else {
                this.map[newMapOptionKey].disable();
            }
        }
    }
}

这适用于 scrollWheelZoom 选项。认为它应该适用于所有启用/禁用处理程序的选项。因此,它可能适用于您的自定义选项,但不适用于 crs 选项。

最新更新