本文关注的是什么是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

【学习笔记】CSW网络目录服务相关推荐

  1. HALCON 20.11:深度学习笔记(4)--- 网络和训练过程

    HALCON 20.11:深度学习笔记(4)--- 网络和训练过程 HALCON 20.11.0.0中,实现了深度学习方法.关于网络和训练过程如下: 在深度学习中,任务是通过网络发送输入图像来执行的. ...

  2. php怎么统计流量,PHP学习笔记:php网络流量统计系统

    PHP学习笔记:php网络流量统计系统 说明:代码来源<PHP和MySQL Web应用开发>一书,还有就是代码有些是经过修改的,经过我的测验全部都可以用. 这里面ip地址显示的正常的,我电 ...

  3. 黑马程序员_java自学学习笔记(八)----网络编程

    黑马程序员_java自学学习笔记(八)----网络编程 android培训. java培训.期待与您交流! 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无 ...

  4. 10月15日计算机视觉基础学习笔记——分割网络的设计

    文章目录 前言 一.分割器的设计 1.优化:减小 feature map 2.上采样 up sampling 二.经典分割模型的涨点方法 前言 本文为10月15日计算机视觉基础学习笔记--分割网络的设 ...

  5. 【MATLAB强化学习工具箱】学习笔记--actor网络和critic网络的结果放在哪里?

    原算例见 [MATLAB强化学习工具箱]学习笔记--在Simulink环境中训练智能体Create Simulink Environment and Train Agent_bear_miao的博客- ...

  6. 唤醒手腕Python全栈工程师学习笔记(网络爬虫篇)

    唤醒手腕Python爬虫学习笔记,喜欢的同学们可以收藏下,谢谢支持. 01.基础语法知识点 字符串的分割 webString = 'www.baidu.com' print(webString.spl ...

  7. Netty学习笔记二网络编程

    Netty学习笔记二 二. 网络编程 1. 阻塞模式 阻塞主要表现为: 连接时阻塞 读取数据时阻塞 缺点: 阻塞单线程在没有连接时会阻塞等待连接的到达,连接到了以后,要进行读取数据,如果没有数据,还要 ...

  8. 开源 - 学习笔记 - 青阳网络文件传输系统初体验

    青阳网络文件传输系统 - 学习笔记 创建个启动脚本 账号权限配置 服务配置 参考资料 创建个启动脚本 @echo off title 青阳网络文件传输系统 start /B java -server ...

  9. html调用js函数_Java Web初学者探索学习笔记10—网络API的js数据接口调用解决方案...

    声明:本学习笔记内容均为小蔡蜀黍亲自整理和原创,如需借引,请注明出处! 1. 时间戳转化为时间 1.1 时间转换函数准备 1.2 时间函数的具体使用 2. 远程js函数调用 调用的js为天天基金网的实 ...

  10. linux学习笔记:网络诊断工具-mtr命令

    网络诊断工具-mtr命令 最近在面试的过程中,被问到了mtr命令,一脸懵逼,据面试官了解,该命令在公司里是经常使用的,借此我也来学习一下! 网络诊断的背景 网络诊断工具包括ping,tracerout ...

最新文章

  1. onvif_discover虚拟摄像头
  2. 【Python基础】07、Python类与面向对象
  3. 每日一题(易错):这条SQL语句,有什么作用?
  4. AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象...
  5. 高校云计算机中心建设方案,最新某大学云数据中心建设方案.pdf
  6. 实战!手把手教你如何编写一个Linux驱动并写一个支持物联网的LED演示demo
  7. Spring 注解编程之注解属性别名与覆盖
  8. windows server 2012 安装 VC2015 安装失败0x80240017解决方法
  9. 学习日志2:ARM开发板—触摸屏
  10. python自动翻译视频字幕_python利用google翻译方法实例(翻译字幕文件)
  11. afrog 发布新版 Release 1.3.6 漫天星辰
  12. Vue的渐进式怎么理解
  13. Pytorch中的多项分布multinomial.Multinomial().sample()解析
  14. Basler工业相机python开发(Pypylon)
  15. Python必学基础
  16. 大数据的特点和快的原因
  17. 安卓APP之加固技术
  18. 基于RestTemplate的在线武器库
  19. 第一阶段验收之软件评审
  20. 产品功能树图_数据产品经理之图表设计

热门文章

  1. 用JAVA 做一个简易版的坦克大战(只实现基本功能)
  2. 正交采样 matlab,MATLAB数值积分(正交)
  3. vue 移动端头像裁剪_Vue 头像裁剪控件
  4. C++之 引用(refer)
  5. docker项目切换(nginx)、重启shell 脚本
  6. SourceTree + Gerrit
  7. 2019计算机小高考成绩,小高考没过怎么办 2021小高考难度如何
  8. Jmeter之事务控制器
  9. Moving.............
  10. md+邮件服务器+334错误,邮件发送,无尽的501错误。TCP发送邮件解决方案