OL:改变投影(使用 Proj4)不显示 geojson 层(尽管 setVisible 为真)
OL: changing projection (using Proj4) does not show geojson layer (despite setVisible is true)
使用图层切换器可以切换多个 GEOJSON 图层的可见性。
例如。 A 层在投影为 3857 的地图上可见(因此 setVisible 为真)。
当我将投影更改为例如4326(或使用 Proj4 的另一个),我得到显示此新投影的新地图,但我的图层 A 不可见。在图层切换器中,A 层仍处于检查状态。即使 check/uncheck 复选框也没有做任何事情。当我在 A 层上执行 getVisible 时,它仍然 returns 'true'。
如果我将地图投影更改为原始地图投影 (3857),我的图层将可见。
即使我改变投影,我怎样才能让图层 A 保持可见?
矢量图层(和叠加层)不会自动重新投影。如果更改视图投影,您还需要将矢量和叠加层转换为新投影。只要您不使用图层组,此代码就可以使用。
map.getOverlays().getArray().forEach(function(overlay){
if (overlay.getPosition()) {
overlay.setPosition(ol.proj.transform(overlay.getPosition(), oldProjection, newProjection));
}
});
map.getLayers().getArray().forEach(function(layer){
if (layer.getSource() && layer.getSource().forEachFeature) {
layer.getSource().forEachFeature(function(feature){
feature.getGeometry().transform(oldProjection, newProjection);
});
}
});
使用图层切换器可以切换多个 GEOJSON 图层的可见性。 例如。 A 层在投影为 3857 的地图上可见(因此 setVisible 为真)。 当我将投影更改为例如4326(或使用 Proj4 的另一个),我得到显示此新投影的新地图,但我的图层 A 不可见。在图层切换器中,A 层仍处于检查状态。即使 check/uncheck 复选框也没有做任何事情。当我在 A 层上执行 getVisible 时,它仍然 returns 'true'。
如果我将地图投影更改为原始地图投影 (3857),我的图层将可见。
即使我改变投影,我怎样才能让图层 A 保持可见?
矢量图层(和叠加层)不会自动重新投影。如果更改视图投影,您还需要将矢量和叠加层转换为新投影。只要您不使用图层组,此代码就可以使用。
map.getOverlays().getArray().forEach(function(overlay){
if (overlay.getPosition()) {
overlay.setPosition(ol.proj.transform(overlay.getPosition(), oldProjection, newProjection));
}
});
map.getLayers().getArray().forEach(function(layer){
if (layer.getSource() && layer.getSource().forEachFeature) {
layer.getSource().forEachFeature(function(feature){
feature.getGeometry().transform(oldProjection, newProjection);
});
}
});