изменить srsName из моего источника WFS с Openlayers / Geoserver - PullRequest
0 голосов
/ 13 февраля 2020

В настоящее время я использую WFS с Openlayers, но слои находятся не в том положении, если я прав, проблема связана с srsName, но как это изменить?

Вот мой код для WFS :

var WFSSource = new VectorSource({
  format: new GeoJSON(),
  url: function(extent) {
    return 'http://localhost:8081/geoserver/occi/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=occi%3Aocci&maxFeatures=5&outputFormat=application%2Fjson';
  },
  strategy: bboxStrategy,
});

var WFSLayer = new VectorLayer({
  source: WFSSource
});

У меня была та же проблема с WMS, но я просто изменил SR C на Geoserver (EPSG: 2154) и все прошло нормально. Теперь у меня та же проблема, которая дает мне следующий результат image

Геометрия должна быть в нижней части страны. Я думаю, что VectorSource имеет имя srs по умолчанию, но я не знаю, как его изменить. Кстати, по этой ссылке: https://openlayers.org/en/latest/examples/vector-wfs.html они показывают, как использовать WFS, и у него есть эта строка кода:

url: function(extent) {
return 'https://ahocevar.com/geoserver/wfs?service=WFS&' +
    'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +
    'outputFormat=application/json&srsname=EPSG:3857&' +
    'bbox=' + extent.join(',') + ',EPSG:3857';

},

, где он определяет srsName, но не работает для меня.

----- Обновление -----

После проверки проекции я нашел следующее:

  • Моя карта имеет проекцию по умолчанию -> код: "EPSG: 3857", единицы измерения: метры

  • My TileWMS не имеет настроек, но в документации сказано, что параметры задаются динамически. Дело в том, что на Geoserver я использую "EPSG: 2154", но карта и эта TileWMS идеально совпадают, я не понимаю, как.

  • Мой векторный источник имеет формат -> dataProjection -> code: "EPSG : 4326 ", единицы: градусы

Теперь я пытаюсь понять, как поставить все с той же проекцией, но я много борюсь.

Если я меняю проекцию карты с помощью «EPSG: 2154» (собственный SR C моего слоя в Geoserver), у меня появляется следующая ошибка: Невозможно прочитать свойство 'getExtent' из null.

И если я попытаюсь изменить свою проекцию VectorSource, ничего не произойдет, мое пребывание VectorSource останется в «EPSG: 4326»

var WFSSource = new VectorSource({
  format: new GeoJSON(),
  url: function(extent) {
    return 'http://localhost:8081/geoserver/occi/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=occi%3Aocci&maxFeatures=5&outputFormat=application%2Fjson';
  },
  projection : "EPSG:2154",
  strategy: bboxStrategy
});

1 Ответ

0 голосов
/ 15 февраля 2020

ol / Source и ol / View имеют проекцию. По умолчанию проекция EPSG: 3857. Если ваши данные или базовая карта различны, тогда EPSG: 3857, вы должны определить их.

import Map from 'ol/Map';
import View from 'ol/View';
import VectorLayer from 'ol/layer/Vector';
import VectorSource from 'ol/source/Vector';

const map = new Map({
  layers: [
    new VectorLayer({
        source: new VectorSource({
            projection: 'EPSG:3857',
        })
    })
  ],
  target: 'map',
  view: new View({
    projection: 'EPSG:3857',
  })
});
...