使用Openlayers/Geoserver从我的WFS源代码更改srsName

使用Openlayers/Geoserver从我的WFS源代码更改srsName,openlayers,layer,geoserver,Openlayers,Layer,Geoserver,我目前在Openlayers中使用WFS,但是层的位置错误,如果我是对的,问题来自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=

我目前在Openlayers中使用WFS,但是层的位置错误,如果我是对的,问题来自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也有同样的问题,但我只是在Geoserver(EPSG:2154)上更改了SRC natif,一切正常。现在我有同样的问题,给我下面的结果

几何图形应该位于国家的底部。我认为VectorSource有一个默认的srsname,但我不知道如何更改它。 顺便说一句,在这个链接上: 他们展示了如何使用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完全匹配,我不知道如何匹配

  • 我的矢量源有格式->数据投影->代码:“EPSG:4326”,单位:度

现在我想知道如何把所有的东西都放在同一个投影上,但我做了很多

如果我使用“EPSG:2154”(Geoserver中我的图层的本机SRC)更改地图投影,我会出现以下错误:无法读取null的属性“getExtent”

如果我试图改变我的矢量源投影,什么也不会发生,我的矢量源将保持在“EPSG:4326”


ol/源和ol/视图具有投影。默认投影为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',
  })
});

你能告诉我们发生了什么事吗?可能是一张地图的图片?最可能的问题是你的数据是以度为单位的,而你的地图是以米为单位的,如果是这样的话,重新投影数据
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',
  })
});