例如,我创建了一个这样的地图:
map = L.map('map',
{maxZoom: 17,
attributionControl: false,
zoomControl: false}
)
后来,我想改变" crs"并为map
对象添加一个键。
我希望可能有一个名为setOption
的方法,如下所示:
map.setOption({crs:L.CRS.BEPSG3857, customOption: true})
但不幸的是,没有这样的setOption
方法。有没有人有关于如何更改传单地图对象的Map option
的想法?
答案 0 :(得分:3)
请查看此示例,了解如何动态更改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());
答案 1 :(得分:0)
我有类似的问题。我需要动态设置scrollWheelZoom选项。
我正在使用L.version 1.3.1
如果map init上的scrollWheelZoom选项为true,它将启用相应的Handler。 因此,我们需要手动启用/禁用处理程序,以将更改应用于地图。
List of handlers/map-properties:boxZoom,doubleClickZoom,拖动,键盘,scrollWheelZoom,点击,touchZoom
My solution看起来像这样:
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选项。认为它应该对启用/禁用处理程序的所有选项都有效。因此它可能适用于您的customOption,但不适用于crs选项。