cesium中加載wfs服務(wù)可以使用如下代碼:
//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請求可以修改參數(shù)窥浪,各個參數(shù)有不同含義,如想wfs返回json而非xml舷蟀,則可使用outputFormat=application/json
//request:指定要執(zhí)行的操作類型跃巡,常見的操作包括DescribeFeatureType绘雁、GetFeature、Transaction等
//outputFormat:指定返回的數(shù)據(jù)格式舆吮,可以是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服務(wù)萝勤,如EPSG:32651
首先涉及坐標轉(zhuǎn)換,我們可以在epsg.io上找到proj代碼呐伞,通過proj4.js這個庫對坐標進行轉(zhuǎn)換敌卓,示例:
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的經(jīng)緯度坐標
在正式使用時,可以通過新增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 = //轉(zhuǎn)換32651的x,y坐標為經(jīng)緯度趟径,可通過proj4轉(zhuǎn)換瘪吏,也可通過自定義轉(zhuǎn)換方法轉(zhuǎn)換
return Cesium.Cartesian3.fromDegrees(res.x, res.y, 0)
}