赞
踩
Web Feature Service(网络要素服务),简称WFS。支持对OpenGIS简单要素的数据编辑操作(插入,更新,删除,检索),实现服务器端和客户端之间的要素交互。
主要有GetCapabilities,DescribeFeatureType、GetFeature服务操作:
下面以geoserve自带的地图服务以例
1、GetCapabilities 获取地图服务的相关信息
http://localhost:8088/geoserver/sf/wfs?service=WfS&request=GetCapabilities ,
截取文档中部分信息
2、DescribeFeatureType 查看地图服务的空间信息和属性信息字段
http://localhost:8088/geoserver/sf/wfs?service=WfS&request=DescribeFeatureType
下载了一个文件geoserver-DescribeFeatureType.application,
3、GetFeature 获取要素信息,以geojson的格式输出
http://localhost:8088/geoserver/sf/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=sf:roads&maxFeatures=50&outputFormat=application%2Fjson
网上有很多讲解这些方式的参数设置,我在这就不一一列举出来,附上一个链接
WFS服务接口说明
一。参数列表
参数名称 | 是否必须 | 默认值 | 举例 | 含义 |
---|---|---|---|---|
VERSION | 是 | 1.1.0 | version=1.1.0或version=1.0.0 | 版本号 |
SERVICE | 是 | WFS | WFS | 服务名称 |
REQUEST=GetFeature | 是 | 请求操作(固定值) | ||
TYPENAME | 是 | 图层名称 | ||
OUTPUTFORMAT | application/json | 输出类型 | ||
BBOX | BBOX=110,25,120,30,EPSG:4326 | 矩形范围(左下角X坐标,左下角Y坐标,右上角X坐标,右上角Y坐标,EPSG:4326) | ||
FILTER | 下一节详细说明 | 过滤条件,gml格式定义空间范围,可包含属性条件。Filter是一种符合OGC规范的语言,一种XML实现的语言。SLD用它来实现复杂的Rule选择。WFS在所有需要定位操作对象的地方都会使用Filter。Filter的作用是构建一个表达式,返回值就是Feature的集合。 | ||
SORTBY | 排序字段 | |||
MAXFEATURES | 最多返回结果个数 | |||
PROPERTYNAME | 字段名称,逗号隔开 | |||
SRSNAME | 投影方式名称 | |||
EXPIRY | 排除 |
二、FILTER 详解
Filter定义了三种操作符:地理操作符(Spatial operators),比较操作符(Comparison operators)和逻辑操作符(Logical operators)。
Spatial operators定义了地理属性的操作方式,(连接为空间操作,可以看我的另一篇博客)有:Equals,Disjoint,Touches,Within,Overlaps,Crosses,Intersects,Contains,DWithin,Beyond,BBOX。
Comparison operators定义了标量属性的操作方式,他们有:PropertyIsEqualTo,PropertyIsNotEqualTo,PropertyIsLessThan,PropertyIsGreaterThan,PropertyIsLessThanOrEq,PropertyIsGreaterThanO,PropertyIsLike,PropertyIsNull,PropertyIsBetween。
Logical operators逻辑操作符,定义了组合这些操作的方式,他们有:And,Or,Not。
举例:构建一个表达式,人口在一千万以上,并且在指定的空间范围内的城市。
<Filter> <And> <!--逻辑操作--> <PropertyIsGreaterThan> <!--属性操作--> <PropertyName>population</PropertyName> <Literal>10000000</Literal> </PropertyIsGreaterThan> <BBOX> <!--空间操作--> <PropertyName>geom</PropertyName> <Envelope srsName="EPSG:4326"> <lowerCorner>-180 -90</lowerCorner> <upperCorner>180 90</upperCorner> </Envelope> </BBOX> </And> </Filter>
三、基于openlayer的实现
import { intersects} from 'ol/format/filter.js'; import { WFS,GeoJSON} from 'ol/format.js'; // generate a GetFeature request let featureRequest = new WFS().writeGetFeature({ //featureNS:region.WFS, srsName: "EPSG:4490", featureTypes: ["city"], // city 为图层名 outputFormat: 'application/json', filter: intersects(region.matchGeometryName, point) }); response = await fetch(wfsUrl, { method: 'POST', body: new XMLSerializer().serializeToString(featureRequest) }) let data = await response.json(); let features = data.features; let olfeatures = new GeoJSON().readFeatures(features);
补充:arcgis server发布的地图服务,点操作的请求
import { EsriJSON } from 'ol/format.js'; let geometryStr = "{'spatialReference':{'wkid':'4490'},'x':" + center[0] + ",'y':" + center[1] + "}"; let params = { "f": "json", "geometry": geometryStr, "geometryType": "esriGeometryPoint", "spatialRel": "esriSpatialRelIntersects", "returnGeometry": "true", "outFields": "*" }; let url = wfsUrl + "/" + "0"+ "/query"; // "0"图层的索引 url = appendParams(url, params); response = await fetch(url); let data = await response.json(); let features = data.features; let olfeatures = new EsriJSON().readFeatures(features);
下一步
1、整理arcgsi 的线、面等空间查询的方式
2、整理ogc的wms、wmts等其他系列
断断续续地写了很久,后续还是要坚持写下去。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。