转载:https://ethanblog.com/tech/all-about-wms-wfs-and-wcs.htmlhtml
前面几节介绍了GeoServer基础教程的一些基本操做,相信你们对GeoServer的基本操做都比较熟悉了。咱们知道GeoServer使用开放地理空间联盟(OGC)提出的开放标准,支持三种空间数据互操做的接口规范WMS、WFS和WCS,这一节咱们就来介绍这三种规范,为之后使用这些规范开发基于GeoServer的Web应用打下基础。服务器
首先简单介绍一下OGC(Open Geospatial Consortium,开放地理信息协会)和Web Services以及他们之间的关系。网络
OGC是一个非赢利的国际化标准制定组织,领导进行对地理数据相关的操做和服务标准的制定。OGC最主要的一项计划是互操做计划(Interoperability Program,简称IP),该项目的目标是提供一套综合的开放接口规范,以使软件开发商能够根据这些规范来编写互操做组件,从而知足互操做需求。数据结构
Web Services即Web服务,它是自包含的、模块化的应用程序,它能够在网络中被描述、发布、查找以及调用。Web服务的一个主要思想,就是将来的应用将由一组应用了网络的服务组合而成。在Web Services体系中,全部东西都是服务,这些服务发布一个API供网络中的其余服务或者应用使用,而且封装了实现细节。Web Services是OGC规范以及创建面向服务的空间共享体系的基础技术体系。空间信息Web服务是在Web服务技术和标准基础之上实现的地理空间信息网上在线服务。它利用Web服务技术提供的公共接口、交换协议和服务规范,提供应用客户管理、注册服务、编码、处理服务、描述服务和数据服务等。主要的应用客户包括发现客户、地图浏览客户、影像利用客户等。空间信息Web服务除了采用基本的Web服务技术协议外,还须要相关地理空间信息及处理的技术协议,目前主要有OGC、ISO/TC211和W3C等组织在进行相关协议标准的制定。 OGC Web服务(OWS)便是典型的空间信息Web服务标准体系。分布式
OGC Web服务公共执行规范详细描述了OWS接口执行规范包含的公共方面:模块化
这些规范目前包括网络地图执行规范(WMS)、网络特征数据执行规范(WFS)、网络覆盖执行规范(WCS)。下面逐一为你们介绍。学习
Web地图服务(WMS)利用具备地理空间位置信息的数据制做地图。在WMS规范中将地图定义为地理数据可视的表现,WMS返回的不是地图数据,而是地图图象。编码
WMS规范定义了三个操做:spa
该操做的目的在于获取服务元数据,元数据是对服务器信息内容和可接受的请求参数值的一种机器可读性(而且能够人读)描述。翻译
GetCapabilities操做的参数详解:
FORMAT:该可选参数规定服务元数据的格式要求。WMS服务器上GetCapabilities请求支持的值由服务元数据中的一个或多个<Request><GetCapabilities><Format>元素列出.。若是请求描述的格式不被服务器支持,服务器应该返回默认的text/xml格式。
VERSION:肯定请求服务的版本。
SERVICE:该强制性参数指示哪一个可用的服务类型将被激活,在WMS上当激活一个GetCapabilities时,值”WMS”就应该被使用。
REQUEST:要激活GetCapabilities操做,值”GetCapabilities”就应该被用到。
UPDATESEQUENCE:该可选参数是为维持缓冲区一致而设置的,它的值能够为一个表明一个符合ISO 8601:2004格式(原文附录D)的时间标签(timestamp)的integer、string或者其余string。服务器可能包含一个UpdateSequence值于服务元数据中,若是这样,当Capablities被改变(e.g.当新的maps添加到给服务中)的时候,这个值应该被增长。客户端可能在其GetCapabilities请求中包含该参数。
GetMap操做返回一幅地图(map),接收到GetMap请求后,WMS要么知足请求要么发送一个异常。
GetMap请求的参数详解:
LAYERS:该参数值是一个逗号分隔的列表,列表元素为有效图层名称。这些名字应该是在服务元数据中的<Layer><Name>元素中已经定义过的字符内容。WMS在绘制map的时候,应该将该列表最左边的层放到层栈的最底部,下一个放在前一个的上面,依此类推。其中可选的<LayerLimit>元素在服务元数据中为一个正数。代表了客户端在一次GetMap请求中容许请求的最大图层数。若是忽略了该元素,则服务器没有该限制。
STYLES:以逗号分隔的列表形式表示的请求的每一图层的STYLE。STYLE值应该有效,而且STYLE值与LAYERS参数值老是一一对应的。因此,每一个map都是按照LAYERS的STYLE绘制各个layer,而各个Layer的名称必须符合默认的混合形式,则在STYLE参数中应该用逗号来分隔一个空值(如”STYLE=style1,style2”),若是服务器为一个layer发布多个Style,而客户端发送了一个默认style的请求,选择哪一个style做为默认值就是服务器的标准了。元数据中styles的顺序并不能代表哪一个为默认的值。客户端开发人员应该最大限度地减小用户不注意地请求或无心识地得到扭曲的地图。
CRS:CRS参数声明了应用到BBOX请求参数的层CRS。该参数的值必须为所请求的服务器元数据中已经定义过或从请求层中继承过的.。WMS没必要支持全部的CRS,可是,对于其已经在服务元数据发布的CRS应该支持。若是客户请求其不支持的CRS,服务器应该返回一个异常(code=”InvalidCRS”) 。若是WMS服务已经声明了一个层的CRS=CRS:1,如前所述,表示该层没有定义好一个坐标参考系统,所以不能与其余层联合显示。客户端应该在GetMap中指定CRS=CRS:1,不然,服务器可能发送一个服务异常。当CRS在 请求中使用时,BBOX参数的单位应该为像素。
BBOX:该参数容许客户请求一个特定的Bounding Box。该参数的值为逗号分隔的一串实数列表,形如:”minx,miny, maxx, maxy”,它们分部表明请求图层CRS下的区域坐标:最小x、最小y、最大x、最大y。其x、y轴的单位、方向、增量都在层CRS中定义。BoundingBox和map像素矩阵之间的关系是BoundingBox包围在像素矩阵的外边,而不是经过地图周边像素的中心,在该内容中,单个像素描述地面的一个区域。
FORMAT:该强制参数声明了地图的要求格式。WMS服务器支持的GetMap请求格式值在服务元数据中以<Request><GetMap><Format>形式列出。<Format>的整个MIME字符串值被用来表示FORMAT参数的值,而这个值没有默认值。在HTTP环境下,MIME类型应该使用内容类型实体头文件设置为返回对象。若是请求指定了一个服务器不支持的格式,服务器应该发送一个服务异常(code = ”InvalidFormat” )。
WIDTH、HEIGHT:该强制参数指定产生的地图整数值大小,单位为像素。Map CS适用于map,WIDTH-1指定了Map CS中x轴方向的最大值,而HEIGHT-1则为y轴方向的最大值.。若是请求的格式为picture,则返回的图片将不考虑MIME类型,准确地为指定的width和height像素值。在这种状况下,若是BBOX的比率和width/height的比率不一致时,WMS将会拉伸返回的地图以使得最终像素可以在BBOX比率下自动生成。换句话说,就是使得在一个输出像素不是方形的,或者拉伸图像区域到不一样比率的设备上也可以使用该定义去请求一幅地图。若是WIDTH/HEIGHT比率与X、Y以及像素尺寸的比率不一致,那么就会发生图像扭曲。
TRANSPARENT:该可选参数定义地图背景是否透明,可取值:”TRUE” 和FALSE”,默认和参数缺省时取值:FALSE.。绘制透明像素地能力使得不一样的地图请求能够被叠置生成一个复合地区。强烈推荐每一个WMS提供一种能够提供透明图层的格式以使得图层能够与其余图层叠置.。注意:image/gif格式具备透明性而且可让一般客户彻底显式。image/png格式提供一个范围内的意义的点,或实体将不能设成透明的,而客户端可能仍然请求TRANSPARENT=TRUE当FORMAT参数包含一个图形元素格式,TRANSPARENT参数可能在请求中出现,但其设置值将会被WMS忽略。
BGCOLOR:该可选参数为一个字符串,用来指定地图将要使用的背景色(无数据区)。BGCOLOR一般的格式为一个RGB值的十六进制编码,其中对于每一个颜色值red、green和blue使用两个十六进制字符,因此该值的范围为00到FF(十进制的0和255)。其 格式为oxRRGGBB,RRGGBB大小写都是容许的。而”0x”必须为小写的”x”,若是该参数在请求中缺失,则默认的值为oxFFFFFF(对应的值为白色)。当FORMAT值为图像格式时,服务器应该设置背景像素值为BGCOLOR值,当FORMAT的值为图形元素格式(它们没有显式的背景),或者图像格式时,WMS应该避免为前景元素使用BGCOLOR值,由于这样在该背景颜色下,它们将不可见。当图层已经肯定为不透明”opaque”时,地图上的重要点、实体将不显式任何背景。
GetFeatureInfo是一个可选操做。它只支持可查询属性被定义或继承为“1”(真)的层。客户端不得向其余层发出GetFeatureInfo要求。若是一个WMS收到一个GetFeatureInfo请求,但不支持它,它会回应一个格式正确的服务异常反应(XML代码= OperationNotSupported)。
GetFeatureInfo操做设计的目的是为一个WMS的客户端提供更多返回地图请求的地图要素的信息。GetFeatureInfo典型用例,一个用户看到一个地图请求响应,在地图上选择一个点(I,j)来获取更多信息。基本操做为客户端提供指定哪一个像元被访问, 哪一个层应该进行调查,信息应该返回什么样格式的功能。由于WMS的协议是无状态的, 对于WMS,GetFeatureInfo请求经过包括大部分原始GetMap请求参数(除了VERSION和REQUEST)代表用户正预览的是什么地图。从GetMap请求下的空间范围信息((BBOX,,CRS,,WIDTH,,HEIGHT)来看,随着用户选择的I、J点的变化,WMS返回关于位置的附加信息。
GetFeatureInfo的请求参数详解:
QUERY_LAYERS:QUERY_LAYERS参数规定查询的图层。它的值是一个以逗号分隔的一个或多个图层列表。此参数应至少包含1个图层的名称,但也能够包含比原来的GetMap请求的层少。若是在QUERY_LAYERS中规定查询的图层没有在WMS中的元数据中被定义,将返回<服务异常(code = LayerNotDefined)。
INFO_FORMAT:INFO_FORMAT参数表示返回的特征信息时使用何种格式。WMS服务器支持的GetFeatureInfo请求格式值在服务元数据中以<Request><FeatureInfo><Format>形式列出。<Format>的整个MIME字符串值被用来表示INFO_FORMAT参数的值,而这个值没有默认值。在HTTP环境下,MIME类型应该使用内容类型实体头文件设置为返回对象。若是请求指定了一个服务器不支持的格式,服务器应该发送一个服务异常(code = ”InvalidFormat” )。
FEATURE_COUNT:FEATURE_COUNT参数规定在返回的每一个图层中所容许包含的特征数据量的最大值。
I,J:指示兴趣点,这是根据地图的CS定义,I和J是地图坐标系统中的一个坐标,所以I的值应介于0与i轴的最大值,J值应介于0和第j轴的最大值,点I = 0,J = 0表示该像素在地图的左上角,I向右增长而J向下增长。点(I,J)表示所指示的像素的中心。若是j或者I值无效,则服务器会发出一个服务异常(code = InvalidPoint)。
WFS是基于地理要素级别的数据共享和数据操做,WFS规范定义了若干基于地理要素(Feature)级别的数据操做接口,并以 HTTP 做为分布式计算平台。经过 WFS服务,客户端能够获得矢量数据格式描述的单个地理要素的空间数据或要素集的空间数据,并能够对单个地理要素进行编辑、 删除、 添加等数据操做。WFS采用 GML描述地理要素特征, 根据用户请求的内容返回 GML描述的空间数据。
OpenGIS的WFS实施规范为下一步操做逻辑提供支持,提出了描述使用了分布式计算平台HTTP地理特征数据处理操做界面。数据处理操做包括如下能力:
WFS规范定义了 6 个基本操做:
WCS面向空间影像数据,它将包含地理位置值的地理空间数据做为“覆盖物(COverage)“在网上相互交换。网络覆盖服务由三种操做组成:GetCapabilities,GetCoverage和DescribeCoverageType。
至此,空间数据互操做的接口规范WMS、WFS和WCS已经介绍完毕,这些都是一些理论的东西,你们能够选择粗略看看,也能够更深刻地去学习和理解。固然,若是须要深刻学习和理解应用的,紧靠这一节的内容是远远不够的。此外,考虑到WMS使用得最为频繁,我在本文中着重介绍了WMS服务的规范和请求参数,但愿有所助益。
除了本文所介绍的三种协议外,GeoServer还支持TMS、WMS-C、WMTS等多个协议,此外,Web Processing Server(WPS)做为新近推出的标准,也有了愈来愈普遍的使用,对于这些内容,最好的学习之处仍是OGC的官网(http://www.opengeospatial.org/),本文的大部份内容也是参考翻译于此,感兴趣的朋友能够多多前往学习。