GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务

目录

GeoServer发布服务

Cesium请求服务

解决跨域问题

 401报错问题


GeoServer发布服务

1.打开开始菜单,找到安装的GeoServer文件夹,点击Start GeoServer开启GeoServer,出现下图说明启动成功。

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第1张图片

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第2张图片

 2.点击开始菜单中GeoServer Web Admin Page,或浏览器手动输入localhost:自己设置的端口号/geoserver/web,登录自己的账号。

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第3张图片

3. 新建一个工作区。工作区->>添加新的工作区->>填写工作区名称和命名空间(随便填)->>保存,也可以设置成默认工作区。

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第4张图片

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第5张图片

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第6张图片

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第7张图片

4. 添加新的数据。数据存储->>添加新的数据存储,本文将要发布一个shp数据,因此选择 Directory of spatial files (shapefiles) 或者Shapefile,一个是文件夹,一个是文件。

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第8张图片

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第9张图片

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第10张图片

5. 选择刚刚新建的工作区,并给数据取一个名称,点击浏览...选择shp文件目录,字符集选择UTF-8,保存。(注意:网上说的解决中文乱码问题字符集选择GBK或GB2312,我试验了都不行)

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第11张图片

6. 发布服务。发布->>从数据中计算->>Compute from native bounds->>保存。

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第12张图片

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第13张图片

7. 图层预览Layer Preview可以查看发布的服务,点击OpenLayers,下图是我发布的数据,WMS服务。

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第14张图片

 8.GeoServer的地图服务支持很多格式,为便于后续Cesium获取要素属性数据,这里选择WFS服务的GeoJSON,可以在地址栏看到想要请求WFS服务的url。

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第15张图片

Cesium请求服务

1. WFS服务

export function wfsServiceApi(viewer) {
  return http({
    methods: "GET",
    url: "http://localhost:8090/geoserver/Cesium/ows",
    params: {
      service: "WFS",
      version: "1.0.0",
      request: "GetFeature",
      typeName: "Cesium:Export_Output", //图层名称
      outputFormat: "application/json",
    },
  })
    .then((res) => {
      const data = res.data;
      const sourcePromise = Cesium.GeoJsonDataSource.load(data);
      sourcePromise.then(function (dataSource) {
        viewer.dataSources.add(dataSource);
      });
    })
    .catch((error) => {
      console.log("请求失败,失败信息:" + error);
    });
}

2. WMS服务 

let wmsImageryProvider = new Cesium.WebMapServiceImageryProvider({
    url: "http://localhost:8090/geoserver/wms",
    layers: "Cesium:Export_Output",
    parameters: {
        service: "WMS",
        format: "image/png",
        transparent: true,
    },
});
viewer.imageryLayers.addImageryProvider(wmsImageryProvider);

解决跨域问题

Cesium按上述步骤请求服务会出现跨域问题,一开始我安装的是2.20.3版本,启动时报错failed to bind to 0.0.0.0/0.0.0.0:8080,但GeoServer Web Admin Page可以打开并且发布成功,按照网上注释web.xml或下载jar包都不能解决跨域问题,并且GeoServer网页报错503。

卸载后重新安装2.13.0版本,启动正常不报错,找到安装目录GeoServer 2.13.0\webapps\geoserver\WEB-INF下的web.xml文件,打开后搜索CORS,将搜索到的两处代码解开注释,重启GeoServer,跨域问题解决。

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第16张图片

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第17张图片

 401报错问题

解决完跨域问题后,cesium还是加载不出发布的地图服务,打开控制台发现401报错,将链接复制到浏览器发现需要登录。

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第18张图片

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第19张图片

 GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第20张图片

 点击Security的Authentication,删除Filter Chains中名为gwc的过滤器,保存。

GeoServer发布服务+跨域及401问题+Cesium调用WMS/WFS服务_第21张图片

你可能感兴趣的:(cesium,GeoServer,前端)