cesium中加载wfs服务可以使用如下代码:
//wfs地址。如:https://***/geoserver/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=***&outputFormat=application/json
const url = 'https://***/geoserver/wfs?service=WFS&version=1.0.0&request=GetFeature&typeName=***&outputFormat=application/json'
//wfs请求可以修改参数,各个参数有不同含义,如想wfs返回json而非xml,则可使用outputFormat=application/json
//request:指定要执行的操作类型,常见的操作包括DescribeFeatureType、GetFeature、Transaction等
//outputFormat:指定返回的数据格式,可以是XML、JSON、GML等。
Cesium.Resource.fetchJson(url).then(function (data) {
let promise = Cesium.GeoJsonDataSource.load(data, {
stroke: Cesium.Color.HOTPINK,
// fill: Cesium.Color.PINK,
//strokeWidth: 3,
//markerSymbol: '?',
})
promise.then((dataSource) => {
viewer.dataSources.add(dataSource)
})
})
但有时需要加载一个非EPSG4326的wfs服务,如EPSG:32651
首先涉及坐标转换,我们可以在epsg.io上找到proj代码,通过proj4.js这个库对坐标进行转换,示例:
import proj4 from "proj4";
const epsg32651 = '+proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs';
const epsg4326 = '+proj=longlat +datum=WGS84 +no_defs +type=crs';
proj4.defs('EPSG:32651', epsg32651);
proj4.defs('EPSG:4326', epsg4326);
const transformFunc = proj4('EPSG:32651', 'EPSG:4326').forward;
console.log(transformFunc([219555.86505479272, 3355776.015674563])) //输出了4326的经纬度坐标
在正式使用时,可以通过新增crsNames来添加,如
Cesium.GeoJsonDataSource.crsNames['urn:ogc:def:crs:EPSG::32651'] = Cesium.GeoJsonDataSource.crsNames['EPSG:32651'] = function (coordinates) {
const x = coordinates[0]
const y = coordinates[1]
const res = //转换32651的x,y坐标为经纬度,可通过proj4转换,也可通过自定义转换方法转换
return Cesium.Cartesian3.fromDegrees(res.x, res.y, 0)
}