SOS服务器¶
- 作者
Jeff McKenna
- 联系方式
jmckenna at gatewaygeomatics.com
- 最后更新
2016-06-14
介绍¶
SOS(传感器观测服务),目前是一份OGC讨论文件,是OGC传感器网络启用(SWE)规范组的一部分。这些规范描述了应用程序和服务如何能够通过网络访问所有类型的传感器。具体来说,SoS提供了一个用于管理已部署传感器和检索传感器数据的API。
SOS支持是 在MapServer 4.10.0或更高版本中可用. 请注意,MapServer for SoS中当前不存在客户端工具;您可以尝试 QGIS 桌面及其插件,或尝试使用JavaScript库,如 OpenLayers 作为客户。
根据MapServer的指导方针,在MapServer中实现了SoS支持 MS RFC 13:MapServer中的传感器观测服务支持 .
本文档假定您已经熟悉MapServer的某些方面:
MapServer应用程序开发和设置.map文件。
相关定义¶
以下内容摘自SoS 1.0.0规范:
- 观察
观察是一个具有描述某些现象的结果的事件。
- 观察提供
观察提供是服务提供的以某种方式相关的观察的逻辑分组。
- 观测值
描述一种自然现象的值,它可以使用各种尺度中的一种,包括名义、序数、比率和区间。
- 传感器
能够观察现象并返回观察值的实体。传感器可以是一种仪器或一个活的有机体(例如人)。
使用mapserver设置SOS服务器¶
安装所需软件¶
SoS请求由 mapserv服务 “CGI程序”。第一步是检查您的mapserv可执行文件是否包含SoS支持。验证这一点的一种方法是使用“-v”命令行开关并查找“supports=sos_server”。
例1。在UNIX上:
$ ./mapserv -v
MapServer version 4.9 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP
OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER
SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT
SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=THREADS INPUT=JPEG
INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG
例2。在Windows上:
C:\MS4W\Apache\cgi-bin> mapserv -v
MapServer version 4.9 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP
OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER
SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT
SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=THREADS INPUT=JPEG
INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG
注解
Windows用户可以安装 MS4W 支持SoS服务器。
如果您的mapserver构建中不支持sos,那么您必须在编译mapserver时考虑以下几点:
标记*-必须填写“duse-sos-svr”
需要启用*-duse-wms-svr*或*-duse-wfs-svr*标志
需要libxml2和proj库
需要Windows上的ICONV支持(-duse_ICONV)
为SoS配置 Mapfile¶
您设置的每个SOS服务器实例都需要有自己的 Mapfile 。它只是一个常规的mapserver Mapfile ,其中一些参数和一些元数据条目是必需的。为了生成有效的getCapabilities输出,大多数元数据都是必需的。
以下是参数和元数据项的列表,这些参数和元数据项通常是MapServer的可选项,但对于SoS配置是**必需的(或强烈推荐的):。**
地图级别:
地图名称
地图投影
映射元数据(在Web对象中):
sos_title
sos_onlineresource
sos_srs
sos_enable_request
见 Reference Section 完整的元数据和描述列表
层级别:
层名称
层投影
层元数据
sos_offering_id
sos_observedproperty_id
sos_observedproperty_id
sos_describesensor_url
见 Reference Section 完整的元数据和描述列表
OnlineResource URL¶
SOS联机资源元数据在映射的Web对象元数据中设置,并指定用于访问服务器的URL。这对于getCapabilities输出是必需的。如果没有提供sos-onlineresource,那么mapserver将尝试使用脚本名和主机名提供一个默认的,但是您不应该过分依赖它。强烈建议您提供SOS在线资源元数据。
以下是有效的联机资源URL:
http://my.host.com/cgi-bin/mapserv?map=mysos.map&
通过在服务器上创建包装脚本,可以从URL中隐藏“map=”参数,然后服务器的联机资源URL可以类似于:
http://my.host.com/cgi-bin/mapserv?
这将在 WMS Server 文件。
SOS服务器 Mapfile 示例¶
下面是一个最小裸SoS服务器 Mapfile 的示例。注意所需参数的注释。
MAP
NAME "SOS_DEMO"
STATUS ON
SIZE 300 300
EXTENT -66 44 -62 45
UNITS METERS
SHAPEPATH "./data/"
IMAGECOLOR 255 255 0
SYMBOLSET "./etc/symbols.sym"
IMAGETYPE png
WEB
IMAGEPATH "/ms4w/tmp/ms_tmp/"
IMAGEURL "/ms_tmp/"
METADATA
"sos_onlineresource" "http://127.0.0.1/mapserv?map=/sos/sos_test.map" ## REQUIRED
"sos_title" "My SOS Demo Server" ## Recommended
"sos_srs" "EPSG:4326" ## REQUIRED
"sos_enable_request" "*" ## REQUIRED
END
END
PROJECTION
"init=epsg:4326"
END
LAYER
NAME "test_sos_layer"
METADATA
"sos_procedure" "NS01EE0014" ## REQUIRED
"sos_offering_id" "WQ1289" ## REQUIRED
"sos_observedproperty_id" "Water Quality" ## REQUIRED
"sos_describesensor_url" "http://some/url/NS01EE0014.xml" ## REQUIRED
END
TYPE POINT
STATUS ON
DATA "sos_test"
PROJECTION
"init=epsg:4326"
END
CLASS
NAME "water quality"
STYLE
COLOR 255 0 0
SYMBOL "circle"
SIZE 8
END
END
END
END #map
测试SOS服务器¶
获取能力请求¶
getCapabilities请求允许客户机检索有关特定服务实例的服务元数据。对于SoS服务,它允许识别产品和观察到的可用财产,以及所用传感器的信息。
使用Web浏览器,访问服务器的联机资源URL,在其末尾添加参数“service=sos&request=getcapabilities”,例如。
http://my.host.com/cgi-bin/mapserv?MAP=mysos.map&SERVICE=SOS&REQUEST=GetCapabilities
如果一切顺利,您应该有一个完整的XML功能文档。搜索“警告”一词…MapServer插入以“<!”开头的XML注释。--警告:“在XML输出中,如果检测到丢失的mapfile参数或元数据项。如果在XML输出中注意到任何警告,那么在使用SOS客户机尝试服务器之前,必须修复所有警告,否则事情可能无法正常工作。
注解
所有SOS请求都需要服务参数。
获取观察请求¶
GetObservation请求旨在查询传感器系统,以按照《观测和测量规范》(O&M)中定义的格式检索观测数据,有关此O&M规范的更多信息,请访问http://www.opengeospatial.org/standards/o m。在收到getobservation请求后,SOS应满足该请求或返回异常报告。
以下是GetObservation请求的可能参数列表:
request:(必需)值必须为“GetObservation”。
service: (必需)值必须为“sos”。
version: (必需)值必须为“1.0.0”。
offering: 必需)能力文件中确定的产品。
- observedProperty: :(必需)获取的内容
能力文件。
- responseFormat: (必选)返回的格式/编码
通过回应。
- eventTime (可选)指定
需要观察。
- procedure: (选填)程序规定了传感器系统
使用。在此实现中,该过程相当于在执行描述传感器请求时将使用的传感器ID。
- featureOfInterest: (选填) 在程序运行中,它将
用定义上下角的GML信封表示。
- Result: (选填)为结果参数提供位置
基于属性值的OGC筛选表达式。
- resultModel: (选填)要成为的结果模型的标识符
用于请求的数据。SOS服务器支持的resultmodel值列在服务元数据(getcapabilities)的内容部分中。MapServer目前支持OM:观察和OM:测量。OM:测量提供了几何图形和属性的平面模型,类似于WFS GetFeature输出。OM:观察提供了一个更紧凑的定义,其中包括字段名和定义的XML头,后跟一个由分隔记录组成的“数据块”(默认值为csv分隔的输出)。默认输出为OM:Measurement。
srsName: (选填)输出响应的SRS(EPSG代码)。
以下是一些有效的例子:
例1:
http://127.0.0.1/cgi-bin/mapserv.exe?map=D:/ms4w/apps/sos/sos_test.map&
Request=GetObservation&service=SOS&Offering=WQ1289&
observedproperty=Water Quality&version=1.0.0&
responseFormat=text/xml; subtype="om/1.0.0"
例2:
http://127.0.0.1/cgi-bin/mapserv.exe?map=D:/ms4w/apps/sos/sos_test.map&
Request=GetObservation&service=SOS&Offering=WQ1289&
observedproperty=Water Quality&eventtime=<ogc:TM_Equals><gml:TimePeriod>
<gml:beginPosition>1991-05-01</gml:beginPosition><gml:endPosition>
1993-02-02</gml:endPosition></gml:TimePeriod></ogc:TM_Equals>
&result=<Filter><Or><PropertyIsEqualTo><PropertyName>COLOUR
</PropertyName><Literal>180</Literal></PropertyIsEqualTo>
<PropertyIsEqualTo><PropertyName>COLOUR</PropertyName><Literal>200
</Literal></PropertyIsEqualTo></or></Filter>&version=1.0.0
&responseFormat=text/xml; subtype="om/1.0.0"
例3:
http://127.0.0.1/cgi-bin/mapserv.exe?map=D:/ms4w/apps/sos/sos_test.map&
Request=GetObservation&service=SOS&Offering=WQ1289&
observedproperty=Water Quality&featureofinterest=<gml:Envelope>
<gml:lowerCorner srsName='EPSG:4326'>-66 43</gml:lowerCorner>
<gml:upperCorner srsName='EPSG:4326'>-64 45</gml:upperCorner>
</gml:Envelope>&version=1.0.0&
responseFormat=text/xml; subtype="om/1.0.0"
例4:
http://127.0.0.1/cgi-bin/mapserv.exe?map=D:/ms4w/apps/sos/sos_test.map&
Request=GetObservation&service=SOS&Offering=WQ1289&
observedproperty=Water Quality&version=1.0.0&
responseFormat=text/xml; subtype="om/1.0.0"&resultModel=om:Observation
描述传感器请求¶
DescribeSensor请求使客户能够检索特定传感器的特征,并在sensorML XML文档中返回信息。在此实现中,MapServer不会生成sensorML文档,而是将请求重定向到现有sensorML文档。
以下是描述传感器请求的可能参数列表:
请求:
service: (必需)值必须为“sos”。
version: (必需)值必须为“1.0.0”。
- procedure: (必需)这是指定的传感器ID
在“SoS_过程”元数据中。
- outputFormat: (必需)返回的格式编码
反应。
下面是一个有效的例子:
http://127.0.0.1/cgi-bin/mapserv.exe?map=D:/ms4w/apps/sos/sos_test.map&
Request=DescribeSensor&procedure=urn:ogc:def:procedure:NS01EE0014&
service=SOS&version=1.0.0&outputFormat=text/xml; subtype="sensorML/1.0.0"
参考截面¶
以下元数据在SOS服务器 Mapfile 的设置中可用:
注解
下面的每个元数据也可以称为“OWS”而不是“SOS”。mapserver首先尝试“sos_u*”元数据,如果找不到,则尝试相应的“ows_*”名称。使用它可以减少支持多个OGC接口的 Mapfile 中的重复量,因为“OWS”元数据几乎可以在任何地方用于多个OGC接口共享的公共元数据项。
Web对象元数据¶
ows_allowed_ip_list (或sos-allowed-ip-u列表)
ows_denied_ip_list (或SOS_拒绝的_IP_列表)
ows_language
*描述:*(可选)有关服务器的详细信息的描述性叙述。所有包含的异常文本值使用的语言的标识符。这些语言标识符应符合IETF RFC 1766的规定。如果省略此属性,则不会标识所使用的语言。示例:“en-ca”、“fr-ca”、“en-us”。默认值为“en-us”。
ows_schemas_location
*描述:*(可选)(注意名称OWS模式位置而不是SOS/uu…这是因为所有的OGC Web服务(OWS)都使用相同的元数据)根目录树,其中包含OGC SOS XMLSchema文件系列。如果希望在验证XML分析器中验证SOS输出,则此URL必须是实际.xsd文件所在的有效URL。默认值为http://schemas.opengis.net/sos/。
ows_updatesequence
sos_abstract
sos_accessconstraints
SOS地址类型、SOS地址、SOS城市、SOS国家、SOS邮政编码、SOS州或省
sos_contactelectronicmailaddress
sos_contactfacsimiletelephone
sos_contactinstructions
SOS联络组织、SOS联络人、SOS联络位置
sos_contactvoicetelephone
sos_enable_request (或) ows_enable_request)
*说明:*要启用的请求的以空格分隔的列表。默认值为“无”。可以启用以下请求: GetCapabilities, GetObservation 和 DescribeSensor.
实例:
GetCapabilities 和 GetObservation:
"sos_enable_request" "GetCapabilities GetObservation"
启用除'getcapabilities'之外的所有请求`
"sos_enable_request" "* !GetCapabilities"
sos_encoding_blockSeparator
sos_encoding_tokenSeparator
sos_fees
sos_hoursofservice
sos_keywordlist
sos_maxfeatures
sos_onlineresource
sos_role
sos_service_onlineresource
sos_srs
*描述:*(必需)包含一个EPSG投影代码列表,该代码应被广告为可用于此服务器中的所有层。该值可以包含一个或多个由空格分隔的epsg:<code>对(例如,“epsg:4269 epsg:4326”)。该值应为大写(epsg:42304…..而不是epsg:42304),以避免区分大小写的平台出现问题。
sos_title
层对象元数据¶
- ows_allowed_ip_list
与Web对象中的“允许使用”列表相同。
- ows_denied_ip_list
与Web对象中的“OWS拒绝”列表相同。
sos_describesensor_url
*描述:*(必需)此元数据项只是在从MapServer生成描述传感器之前的临时度量。现在,当用一个过程(sensorid)发送一个describeSensor请求时,它将把它重定向到这个元数据项定义的URL。
在MapServer5.0中,可以在URL上使用变量替换。例如“sos-describessensor-url”http://foo/foo?mysensor=%procedure%“”n将用来自请求的过程值替换元数据中的%procedure%。
"sos_describesensor_url" "http://some/url/NS01EE0014.xml"
sos_enable_request (或) ows_enable_request)
*说明:*要启用的请求的以空格分隔的列表。默认值为“无”。可以启用以下请求: GetCapabilities, GetObservation 和 DescribeSensor.
实例:
GetCapabilities 和 GetObservation:
"sos_enable_request" "GetCapabilities GetObservation"
启用除'getcapabilities'之外的所有请求`
"sos_enable_request" "* !GetCapabilities"
sos_u[item name]_别名
sos_u[item name]_定义
sos_u[item name]om
sos_observedproperty_authority
sos_observedproperty_id
sos_observedproperty_name
sos_observedproperty_version
sos_offering_description
sos_offering_extent
Description: (Optional) Spatial extents of offering, in minx, miny, maxx, maxy 格式:
"sos_offering_extent" "-66, 43, -62, 45"
作为产品一部分返回的边界框的逻辑如下:
注意,它是一个强制元素,需要一个ESPG代码和下/上角坐标
在产品的第一层中查找ESPG参数(可以是OWS/SOS_SRS或具有EPSG代码的投影对象(强制)
寻找SOS提供的范围。如果元数据不可用,将使用产品中所有层的范围来计算它。
以下是getCapabilities请求的示例结果:
<gml:boundedBy> <gml:Envelope> <gml:lowerCorner srsName="EPSG:4326">-66 43</gml:lowerCorner> <gml:upperCorner srsName="EPSG:4326">-62 45</gml:upperCorner> </gml:Envelope> </gml:boundedBy>
sos_offering_id
sos_offering_intendedapplication
sos_offering_name
sos_offering_timeextent
*说明:*(可选)发售时间范围,格式为“开始/结束”。下面是一个例子:
"sos_offering_timeextent" "1990/2006"
如果未指定END,则将其设置为NOW。以下是getCapabilities请求的示例结果:
<sos:eventTime> <gml:TimePeriod> <gml:beginPosition>1990</gml:beginPosition> <gml:endPosition>2006</gml:endPosition> </gml:TimePeriod> </sos:eventTime>
sos_procedure
-
"sos_procedure" "NS01EE0014"
注解
SOS程序也可以是一个列表,用空格分隔,即:
"sos_procedure" "35 2147 604"
所有 sos_procedure 来自产品中各层的链接将一起输出,如从getCapabilities响应中获取的以下内容:
<procedure xlink:href="urn:ogc:object:feature:Sensor:3eTI:csi-sensor-1"/> <procedure xlink:href="urn:ogc:object:feature:Sensor:3eTI:csi-sensor-2"/>
sos_procedure_item
sos_timeitem
层元数据API¶
如果 sos_metadataurl_href
未定义,MapServer将为给定层提供指向层元数据API的链接。见 Layer Metadata API 有关详细信息的文档。
使用SOS程序和SOS程序项¶
在MapServer 5.0中,SoS支持已升级为使用名为SoS_procedure_item的新元数据。sos_procedure_item的值是包含过程值的字段/属性名称。此元数据的使用以及SoS_过程在此处按请求类型进行了描述(有关详细说明,请参阅https://github.com/mapserver/mapserver/issues/2050):
应该注意的是,对于仅使用sos_procedure_项定义的非常大的数据集,这可能会导致处理成本高昂,因为mapserver必须处理属性数据。如果处理大型观测数据集,建议相应地设置和管理数据集。
GetCapabilities¶
如果定义了SOS程序,则使用它
如果没有,则查找sos_procedure_item:从该元数据指定的层属性中提取过程值。但对于具有大量特性的层来说,这并不是很耗时。
如果没有定义,则返回异常
DescribeSensor¶
如果定义了SOS程序,则使用它
如果没有,则查找sos_procedure_item:从该元数据指定的层属性中提取过程值
如果没有定义,则返回异常
GetObservation¶
可以定义SoS_程序和SoS_程序项。以下是案例:
- 案例1仅定义了SoS_过程。
使用此元数据将层与请求中发送的过程值匹配
当输出<member/procedure>时,输出元数据的值
注解
如果每个层对象定义了多个过程,则输出观测将具有不正确的sos:procedure值,因为无法将过程映射到观测。这就是应该使用SOS程序项的地方(即当多个程序组成一个层对象时)。
- 案例2:只定义了程序项。
使用sos_过程项并在层上执行查询,以使过程与层匹配。
输出<member/procedure>时,使用procedure_项作为仅输出与功能对应的属性值的方法。
- 案例3:两者都有定义。
签入SoS_过程以将该过程与层匹配。
输出<member/procedure>时,使用procedure_项作为仅输出与功能对应的属性值的方法。