让openlayers从visible=false的层加载数据
我有一个带有矢量源的矢量层,它的加载成本非常高,但渲染成本不高。我在GUI中有一个按钮,用于切换图层的可见性。 问题是,第一次将可见性设置为true时,加载需要很长时间。 我希望在加载其余数据(从所有可见层)的同时,提前加载层的数据,以便在可见性设置为true时,只需渲染它。 这在Openlayers中可能吗 我尝试了各种方法,比如在“precompose”中将可见性设置为true,然后在发送HTTP请求后将其设置为false(使用自定义的“loadend”事件),但我无法使其正常工作;我再也无法关闭图层了。我想这是因为在第一次加载之后,它缓存了数据,所以我的自定义“loadend”事件不再触发。 无论如何,我赞成一个更优雅的解决方案 编辑:让openlayers从visible=false的层加载数据,openlayers,openlayers-5,Openlayers,Openlayers 5,我有一个带有矢量源的矢量层,它的加载成本非常高,但渲染成本不高。我在GUI中有一个按钮,用于切换图层的可见性。 问题是,第一次将可见性设置为true时,加载需要很长时间。 我希望在加载其余数据(从所有可见层)的同时,提前加载层的数据,以便在可见性设置为true时,只需渲染它。 这在Openlayers中可能吗 我尝试了各种方法,比如在“precompose”中将可见性设置为true,然后在发送HTTP请求后将其设置为false(使用自定义的“loadend”事件),但我无法使其正常工作;我再也无
我不能像s的回答那样提前发送请求,因为没有请求。请求取决于范围和投影,因此在矢量源的
加载程序功能中发出。如果数据不改变,可以在创建图层时预加载
这是一个没有预加载的示例。打开地图5秒后,三个数据层可见。只有这样,才能从矢量源中指定的URL请求数据,然后才能看到数据以不同的速度加载,因为其中一个层必须下载40mb KML文件
var raster\u OSM=新建ol.layer.Tile({
来源:new ol.source.OSM()
});
var resolutions=ol.tilegrid.createXYZ().getResolutions();
var style\u Cnty=新的ol.style.style({
笔划:新的ol风格笔划({
颜色:“#3399CC”,
宽度:1.25
})
});
var vector\u Cnty=新的ol.layer.vector({
来源:新ol.source.Vector({
网址:'https://raw.githubusercontent.com/tanhe03/kml/master/gz_2010_us_050_00_500k.kml',
格式:new ol.format.KML({extractStyles:false})
}),
maxResolution:决议[3],
样式:功能(特征、分辨率){
变量样式=[style_Cnty];
如果(决议<决议[8]){
var geom=feature.getGeometry();
推(
新ol风格({
几何图形:geom.getInteriorPoints?geom.getInteriorPoints():geom.getInteriorPoint(),
文本:新的ol.style.text({
字体:“粗体16px无衬线”,
填充:新的ol.style.fill({
颜色:“#3399CC”
}),
背景填充:新的ol.style.Fill({
颜色:“rgba(255255,0.5)”
}),
text:feature.get('Name')
})
})
)
}
返回样式;
},
可见:假
});
var vector_State=新ol.layer.vector({
来源:新ol.source.Vector({
网址:'https://raw.githubusercontent.com/tanhe03/kml/master/gz_2010_us_040_00_500k.kml',
格式:new ol.format.KML({extractStyles:false})
}),
maxResolution:决议[1],
风格:新的ol风格({
笔划:新的ol风格笔划({
颜色:'紫色',
宽度:1.25
})
}),
可见:假
});
var vector_US=新的ol.layer.vector({
来源:新ol.source.Vector({
网址:'https://raw.githubusercontent.com/tanhe03/kml/master/gz_2010_us_outline_500k.kml',
格式:new ol.format.KML({extractStyles:false})
}),
风格:新的ol风格({
笔划:新的ol风格笔划({
颜色:“#3399CC”,
宽度:1.25
})
}),
可见:假
});
var map=新ol.map({
图层:[光栅、矢量、矢量状态、矢量状态],
目标:“地图”,
视图:新ol.view({
中心:ol.proj.transform([-96,38],'EPSG:4326','EPSG:3857'),
缩放:4
})
});
setTimeout(函数(){
向量_Cnty.setVisible(真);
向量_State.setVisible(真);
向量_US.setVisible(真);
}, 5000);代码>
html,body,.map{
保证金:0;
填充:0;
宽度:100%;
身高:100%;
}
如果数据不会更改,可以在创建图层时预加载数据
这是一个没有预加载的示例。打开地图5秒后,三个数据层可见。只有这样,才能从矢量源中指定的URL请求数据,然后才能看到数据以不同的速度加载,因为其中一个层必须下载40mb KML文件
var raster\u OSM=新建ol.layer.Tile({
来源:new ol.source.OSM()
});
var resolutions=ol.tilegrid.createXYZ().getResolutions();
var style\u Cnty=新的ol.style.style({
笔划:新的ol风格笔划({
颜色:“#3399CC”,
宽度:1.25
})
});
var vector\u Cnty=新的ol.layer.vector({
来源:新ol.source.Vector({
网址:'https://raw.githubusercontent.com/tanhe03/kml/master/gz_2010_us_050_00_500k.kml',
格式:new ol.format.KML({extractStyles:false})
}),
maxResolution:决议[3],
样式:功能(特征、分辨率){
变量样式=[style_Cnty];
如果(决议<决议[8]){
var geom=feature.getGeometry();
推(
新ol风格({
几何图形:geom.getInteriorPoints?geom.getInteriorPoints():geom.getInteriorPoint(),
文本:新的ol.style.text({
字体:“粗体16px无衬线”,
填充:新的ol.style.fill({
颜色:“#3399CC”
}),
背景填充:新的ol.style.Fill({
颜色:'rgba(255255