目录
GeoServer发布服务
1.打开开始菜单,找到安装的GeoServer文件夹,点击Start GeoServer开启GeoServer,出现下图说明启动成功。
2.点击开始菜单中GeoServer Web Admin Page,或浏览器手动输入localhost:自己设置的端口号/geoserver/web,登录自己的账号。
3. 新建一个工作区。工作区->>添加新的工作区->>填写工作区名称和命名空间(随便填)->>保存,也可以设置成默认工作区。
4. 添加新的数据。数据存储->>添加新的数据存储,本文将要发布一个shp数据,因此选择 Directory of spatial files (shapefiles) 。
5. 选择刚刚新建的工作区,并给数据取一个名称,点击浏览...选择shp文件目录,字符集选择UTF-8,保存。(注意:网上说的解决中文乱码问题字符集选择GBK或GB2312,我试验了都不行)
6. 发布服务。发布->>从数据中计算->>Compute from native bounds->>保存。
7. 图层预览Layer Preview可以查看发布的服务,点击OpenLayers,下图是我发布的数据,WMS服务。
8.GeoServer的地图服务支持很多格式,为便于后续Cesium获取要素属性数据,选择WFS服务的GeoJSON。到这里GeoServer服务发布完成。
Cesium请求服务
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);
});
}
解决跨域问题
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,跨域问题解决。