OL: изменение проекции (с использованием Proj4) не показывает слой геоджона (несмотря на то, что setVisible имеет значение true) - PullRequest
0 голосов
/ 31 декабря 2018

Используя переключатель слоев, можно переключать видимость нескольких слоев GEOJSON.Например, слой A виден (так что setVisible имеет значение true) на карте с проекцией 3857. Когда я меняю проекцию, например, на 4326 (или другую, используя Proj4), я получаю новую карту, показывающую эту новую проекцию, но мой слой A не являетсявидимый.В переключателе слоев этот слой A все еще проверен.Даже установить / снять флажок ничего не делает.И когда я делаю getVisible на слое A, он все равно возвращает 'true'.

Если я изменю проекцию карты на исходную (3857), мой слой станет видимым.

Как сделать так, чтобы слой A оставался видимым, даже если я изменил проекцию?

1 Ответ

0 голосов
/ 31 декабря 2018

Векторные слои (и оверлеи) не перепроектируются автоматически.Если вы меняете проекцию вида, вам также необходимо преобразовать векторы и наложения в новую проекцию.Этот код будет работать до тех пор, пока вы не используете группы слоев.

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);
        });
    }
});
...