根据OGC标准,WFS的请求有两种方式,一种是url带参数形式,另一种是XML的请求方式。
以下是一个WFS使用KVP格式的GetFeature操作示例:
http://www.someserver.com/wfs? SERVICE=WFS& VERSION=1.1.0& REQUEST=GetFeature& PROPERTYNAME=InWaterA_1M/wkbGeom,InWaterA_1M/tileId& TYPENAME=InWaterA_1M& FILTER=<Filter><Within><PropertyName>InWaterA_1M/wkbGeom<PropertyName> <gml:Envelope><gml:lowerCorner>10,10</gml:lowerCorner> <gml:upperCorner>20 20</gml:upperCorner></gml:Envelope></Within></Filter>
以下是一个WFS使用XML格式的GetFeature操作示例:
<?xml version="1.0" ?>
<GetFeature version="1.1.0" service="WFS" handle="Query01"
xmlns="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml" xmlns:myns="http://www.someserver.com/myns"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs ../wfs/1.1.0/WFS.xsd">
<Query typeName="myns:Hydrography">
<wfs:PropertyName>myns:geoTemp</wfs:PropertyName>
<wfs:PropertyName>myns:depth</wfs:PropertyName>
<ogc:Filter>
<ogc:Not>
<ogc:Disjoint>
<ogc:PropertyName>myns:geoTemp</ogc:PropertyName>
<gml:Envelope srsName="EPSG:63266405">
<gml:lowerCorner> -57.9118 46.2023 <gml:lowerCorner>
<gml:upperCorner>-46.6873 51.8145</gml:upperCorner>
</gml:Envelope>
</ogc:Disjoint>
</ogc:Not>
</ogc:Filter>
</Query>
</GetFeature>
当使用XML格式请求时,特别注意使用Ajax请求时,必须要设置数据的传输采用Request Payload方式发送数据
例:
$.ajax({
url: url,
type: "POST",
contentType: 'text/plain;charset=UTF-8', // 这里必须设置,否则会默认以form表单数据进行发送
traditional: true,
data: '这里是XML内容',
success: function(result){
// 这里获取到返回的features数据 // ...
}
});
另外,还可以使用更新潮的fetch方式请求:
fetch(url, {
method: 'POST',
body: '这里是XML内容'
}).then(function(response) {
return response.json();
}).then(function(json) {
var features = new ol.format.GeoJSON().readFeatures(json); //...
});
有的浏览器还没有对fetch进行支持,所以可以通过 if(!self.fetch) {...} 进行判断使用。