【学习笔记】CSW网络目录服务

本文关注的是什么是CSW,以及如何通过CSW构造目录下的WMS等服务。


首先看看wiki:https://en.wikipedia.org/wiki/Catalog_Service_for_the_Web。如wiki词条所述,CSW,就是Catalogue Service for the Web,是OGC众多网络服务标准中的一种,用于将地理记录的目录以xml的形式发布在网络中。这里所说的目录是由描述地理数据的记录(如kml)、描述地理服务的记录(如wms)等组成的。通过对其定义的理解,我们可以得出结论,使用csw服务,应该是可以获取该目录中所有的地理数据或地理服务的元数据等信息。ok,确定了这一点,我们可以不用仔细研究csw提供的操作都有什么功能,而是尝试自己来发布、调用csw,这样理解的更快速更具体。


这里我选择使用GeoServer进行练习(最后会给出一些公共CSW服务url以供实验参考)。GeoServer是一个在自己机器上发布OGC网络服务的服务端程序,比起在网上找OGC服务要方便的多,没有安装过的可以直接到官网下载Packegs:http://geoserver.org/release/stable/。Windows安装过程不需要额外配置,十分方便。启动时需要运行start脚本。为了扩展使其能发布csw,还需要在下面Extension-Service栏下载CSW,根据http://docs.geoserver.org/2.7.1/user/extensions/csw/installing.html将相关jar包拷贝至指定目录。GeoServer也有csw相关的教程:http://docs.geoserver.org/2.7.1/user/extensions/csw/index.html。但凡是能发布csw的服务端,一定首先有一个本地的数据目录catalogue,GeoServer自然也有。前面链接的教程里也有目录的相关配置,可以以管窥豹加深对你真正需要打交道的服务端的理解

我们从最通用的GetCapabilities操作入手,如链接中教程给出的urlhttp://localhost:8080/geoserver/csw?service=csw&version=2.0.2&request=GetCapabilities。研究返回xml,在<csw:Capabilities>根标签下有四个子标签:<ows:ServiceIdentification><ows:ServiceProvider>、<ows:OperationsMetadata>、<ogc:Filter_Capabilities>

第一个是服务本身描述,如标题、摘要、关键词等,可以通过GeoServer修改这些元数据。第二个是服务发布端的信息,也就是服务发布端个人或机构等的工作地址、联系方式等相关信息,用于联系服务提供者。第三个是csw目录服务提供的操作元数据,即该服务端提供了哪些操作,分别又有哪些参数可选。第四个是服务提供的过滤器选项,可以根据空间关系、逻辑关系等进行高级过滤。


下面重点研究一下<ows:OperationsMetadata>标签。该标签下的一级子标签主要是服务端提供的操作(Operation)。如wiki所说,无论什么服务端一定都必须提供的操作有GetCapabilities、DescribeRecord、GetRecords和GetRecordById,而GetDomain、Harvest和Transaction操作是不一定的。也就是说,前面四个服务是csw服务的核心,也就是目录访问的核心。而其他的一级子标签则是所有操作都可能会有的,描述了该操作的参数(Parameter)和约束。

1、GetCapabilities

 无需多言。

2、DescribeRecord

CSW的定义中的catalogue所管理的,就是一项项record。顾名思义,该服务就是描述record支持的信息模型,这其实就是GetCapabilities该标签下的typeName参数。GeoServer推荐使用的模型是gmd:MD_Metadata,我目前看过的所有服务都支持该模型,后面record的访问也会以该模型为基础。具体实例见于GeoServer的CSW教程。

3、GetRecords

该操作可能是CSW最核心的操作,这才是真正的在访问服务端目录。url链接如http://localhost:8080/geoserver/csw?service=CSW&version=2.0.2&request=GetRecords&typeNames=gmd:MD_Metadata&resultType=results&elementSetName=full&outputSchema=http://www.isotc211.org/2005/gmd。注意这里的几个参数,基本上是对应了GetCapabilities返回值的参数类型的,如typeNames、outputSchema和resultType,分别制定了record信息模型和返回结果形式。不一样的是elementSetName这一参数,它是用于指定返回record元素的显示集合,默认是summary。为了得到完整的返回结果,这些参数都不可缺少。

再来看看GetRecords的返回xml。csw:SearchResults标签下的子标签<gmd:MD_Metadata>就对应了各个record,这里使用的是gmd:MD_Metadata信息模型。该模型下每一项record又分别有<gmd:fileIdentifier>、<gmd:dateStamp>、<gmd:contact>、<gmd:distributionInfo>、<gmd:hierarchyLevel>、<gmd:identificationInfo>这几个子标签。例如想通过目录里对应WMS的record访问WMS服务,我们要关注的信息有:

<gco:CharacterString> 对应layers参数
<gmd:CI_OnlineResource><gmd:linkage><gmd:URL> 对应服务器url
<gmd:EX_GeographicBoundingBox> 对应srs、bbox参数

在此基础上,再加上WMS服务的request=GetMap、service=WMS、version=1.1.1、format=image%2Fpng等,就可以构造出完整的WMS请求了。

4、GetRecordById

顾名思义,这是通过layer id获取具体record的方法,也不需要赘述(当然前提是知道id)。


以上基本就是需要了解的CSW服务使用方法,如有错误还请指正,谢谢!


附几个公共CSW服务:

http://221.1.205.172/newmap/ogc/csw?&request=getcapabilities

http://imosmest.aodn.org.au/geonetwork/srv/en/csw?service=CSW&request=GetCapabilities

http://www.ga.gov.au/geonetwork/srv/en/csw?request=GetCapabilities&service=CSW


转载自:https://blog.csdn.net/OldMonkeyYu_s/article/details/53669703

You may also like...