ol遇见OGC系列——WFS

一、WFS的概念

Web Feature Service(网络要素服务),简称WFS。支持对OpenGIS简单要素的数据编辑操作(插入,更新,删除,检索),实现服务器端和客户端之间的要素交互
主要有GetCapabilities,DescribeFeatureType、GetFeature服务操作:

  1. GetCapabilities:获取用于查询WFS服务的相关信息,包括支持的操作、支持的格式、空间坐标、包含的资源等。它主要的目的是使客户端在使用GetFeature请求前可以对WFS服务有一个基本的了解,从而可以设置正确的参数。
  2. DescribeFeatureType:生成一个 Schema 描述,该 Schema 描述了 WFS 服务提供的要素类型(Feature Type),以及要素类型的结构信息。该 Schema 还定义了 WFS 服务所期望的要素实例在输入时如何编码以及输出时如何生成要素实例。
  3. GetFeature:获取要素信息,通过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服务接口说明

二、WFS 的getFeature的详细说明

一。参数列表

参数名称是否必须默认值举例含义
VERSION1.1.0version=1.1.0或version=1.0.0版本号
SERVICEWFSWFS服务名称
REQUEST=GetFeature请求操作(固定值)
TYPENAME图层名称
OUTPUTFORMATapplication/json输出类型
BBOXBBOX=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等其他系列

断断续续地写了很久,后续还是要坚持写下去。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值