例如,我创建了一个这样的地图:
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 选项。