:Author: Tom Kralidis, Angelos Tzotsos
:Version: OSGeo-Live 6.0
:Translator: Zhengfan Lin
:License: Creative Commons
.. image:: ../../images/project_logos/logo-pycsw.png
:scale: 80 %
:alt: project logo
:align: right
:target: http://pycsw.org/
********************************************************************************
pycsw 快速入门
********************************************************************************
pycsw 是 OGC CSW 网络地理数据编录服务的 `Python`_ 实现。
pycsw 针对的是 CSW 网络地理数据编录服务标准第 10 款 HTTP 交换协议的 2.0.2 版。其开发始于 2010 年,正式发布于 `2011`_ 年。
pycsw 为发布和获取地理信息元数据提供支持。现有数据库的元数据可以通过 OGC:CSW 2.0.2 标准获取。
pycsw 为 `开源软件`_ ,以 MIT 麻省理工开源协议发布,可运行与三大主要操作系统平台(Windows 、Linux 、Mac OS X)。
pycsw 在 OSGeo-Live DVD 已经安装。本文涉及的内容有:
* 安装 pycsw 软件
* 使用测试工具测试 pycsw 安装配置状态
* 编辑 pycsw 配置文件并使其配置在网页中显示
* 使用 INSPIRE 元数据编辑器或 GIMED 创建符合 ISO 19139 标准的 XML 元数据
* 在 pycsw 数据库导入创建的 XML 元数据文件
* 安装 QGIS CSW 客户端插件
* 在 QGIS 中通过 pycsw 编录服务查询数据
软件安装
============
系统要求
-------------------
pycsw 要求以下软件支持:
- `lxml`_ (2.2.3 版或以上) 用于 XML 支持
- `SQLAlchemy`_ (0.0.5 版或以上) 用于数据库连接
- `Shapely`_ (1.2.8 版或以上) 用于空间查询可几何操作支持
- `pyproj`_ (1.8.9 版或以上) 用于坐标转换
从源码安装
----------------------
在以下地址 `下载 pycsw`_ 或复制 SVN 库:
.. code-block:: bash
$ svn co https://pycsw.svn.sourceforge.net/svnroot/pycsw pycsw
注意 CGI 公共网关接口对安装的目录必须是开启的。例如在 Apache 中,若安装 pycsw 在 ``/srv/www/htdocs/pycsw``(URL 为 ``http://host/pycsw/csw.py``),则在 ``httpd.conf`` 输入:
.. code-block:: none
Options FollowSymLinks +ExecCGI
Allow from all
AddHandler cgi-script .py
Ubuntu/Lubuntu/Kubuntu 系统下安装
------------------------------------
在 Ubuntu 或基于其的系统环境下安装 pycsw 可以使用位于 ``pycsw/etc/dist`` 的 OSGeo-Live 安装脚本:
.. code-block:: bash
$ cd pycsw/etc/dist
$ sudo ./install_pycsw.sh
该脚本会将 pycsw 及所需软件(Apache, lxml, sqlalchemy, shapely, pyproj)安装至 ``/var/www`` 。
OpenSUSE 系统下安装
----------------------
在 OpenSUSE 12.1 安装 OBS 软件包(以 ``root`` 用户执行):
.. code-block:: bash
$ zypper -ar http://download.opensuse.org/repositories/Application:/Geo/OpenSUSE_12.1/ GEO
$ zypper -ar http://download.opensuse.org/repositories/devel:/languages:/python/OpenSUSE_12.1/ python
$ zypper refresh
$ zypper install pycsw
对于更早的 OpenSUSE 版本,修改其中的``12.1``,例如改为``11.4``。对于以后的版本可以使用``Factory``。滚动发布的版本为``Tumbleweed``。pycsw 包含在 OpenSUSE 官方的 Application::Geo 库中。
测试工具
==================
在 FireFox 中访问 ``http://localhost/pycsw/tester/index.html`` 或在 Web Services 应用组中选择 ``pycsw tester`` 可以启动软件环境测试工具。
.. image:: ../../images/screenshots/1024x768/pycsw_tester_startup.png
:scale: 75 %
在左侧下拉菜单中可以看到一系列已定义的 POST 请求。这些请求是以 XML 文档保存的。
.. image:: ../../images/screenshots/1024x768/pycsw_tester_selection.png
:scale: 75 %
例如,选择 "apiso/DescribeRecord" 这一项并单击 "Send" 按钮,可以在右侧面板得到返回的 ISO 标准的 Application Profile 记录:
.. image:: ../../images/screenshots/1024x768/pycsw_tester_describe_apiso_record.png
:scale: 75 %
选择 "GetCapabilities-SOAP" 并点击 "Send" ,将发送一个 SOAP 简单对象访问协议用于获取其功能。
.. image:: ../../images/screenshots/1024x768/pycsw_tester_soap_capabillities.png
:scale: 75 %
同时,用户可以搜索特定的数据记录。通过选择 "GetRecords-filter-bbox" 并编辑坐标可以就一定的空间范围检索。
.. image:: ../../images/screenshots/1024x768/pycsw_tester_getrecords_bbox_filter.png
:scale: 75 %
用户可以尝试测试其它各种测试项目。参考下面的内容可以做出更具体的测试。
服务功能(Capabilities)文档与配置
=======================================
pycsw 的功能文档页面在 ``http://localhost/pycsw/csw.py?service=CSW&version=2.0.2&request=GetCapabilities`` 。
在该文档中包含着该服务的元数据。通过编辑 ``/var/www/pycsw/default.cfg`` 中 ``[metadata:main]`` 下的内容可以修改元数据。对于需要 INSPIRE Discovery Service 服务(见后述)的用户,请在 ``[metadata:inspire]`` 下编辑元数据并保证 ``enabled`` 为 ``true`` 。
详尽的配置说明请参考 pycsw `文档`_ 。
创
=================
European Open Source Metadata Editor (EUOSME) 创建
---------------------------------------------------
pycsw 服务下的空间数据集或数据服务的元数据可以通过 INSPIRE 元数据标准的开源实现,European Open Source Metadata Editor (EUOSME) 编辑器来操作。该程序可以在 ``http://inspire-geoportal.ec.europa.eu/editor/`` 获得。其源码库位于 ``https://joinup.ec.europa.eu/svn/euosme/trunk`` 。
首先,用户需要选择各个选项卡,输入必需的元数据条目。这些信息包括数据所有者名称、关键字、数据源地址、数据覆盖地理范围(地名或坐标范围)等。
.. image:: ../../images/screenshots/1024x768/pycsw_euosme_metadata_input.png
:scale: 75 %
输入后点击“validation”按键可以测试数据是否符合 INSPIRE 元数据规范。
.. image:: ../../images/screenshots/1024x768/pycsw_euosme_save_metadata.png
:scale: 75 %
若测试通过,元数据可以存储为 XML 文档,可由文本编辑器或浏览器查看和编辑。
GIMED
-----------
`GIMED`_ 是一款用于编辑 INSPIRE 元数据 XML 文档的编辑器。安装 GIMED 可在命令行输入:
.. code-block:: bash
$ wget http://downloads.sourceforge.net/project/gimed/GIMED_v1.3.0.tar.gz
$ tar zxvf GIMED_v1.3.0.tar.gz
$ mono ./GIMED_v1.3.0/bin/GIMED.exe
用户可以同操作 EUOSME 一样输入和编辑元数据,无需网络连接。
.. image:: ../../images/screenshots/1024x768/pycsw_gimed.png
:scale: 75 %
载
================
库
-------------------------
pycsw 支持以下数据库:
- SQLite3
- PostgreSQL
- MySQL
在 OSGeo-Live 已经配置了一个简单的 SQLite 数据库。它位于 ``/var/www/pycsw/data/cite`` 。
新建数据库操作:
.. code-block:: bash
$ cd /path/to/pycsw
$ export PYTHONPATH=`pwd`
$ python ./sbin/setup_db.py sqlite:////path/to/records.db
载
------------------
.. code-block:: bash
$ cd /path/to/pycsw
$ export PYTHONPATH=`pwd`
$ python ./sbin/load_records.py /path/to/records sqlite:////path/to/records.db
以上操作从 ``/path/to/records`` 载入全部 ``*.xml`` 文件,生成 ``records.db`` 。这个数据库可以以符合 OGC:CSW Table 53 的请求检索。
QGIS CSW 客户
============================
单纯的 HTTP request/response 机制对用户不友好。有多款 CSW 服务客户端可以方便用户进行 CSW 查询,例如 `INSPIRE Geoportal `_ 和 :doc:`GeoNetwork <../overview/geonetwork_overview>` 。
本文使用 :doc:`QGIS <../overview/qgis_overview>` `OGC Catalogue Service Client `_ 这一插件。
插件安装:
.. code-block:: bash
$ cd ~
$ cd .qgis/python/plugins
$ svn co https://qgiscommunitypl.svn.sourceforge.net/svnroot/qgiscommunitypl/python/plugins/qgcsw/trunk qgcsw
检
==============
QGIS CSW
---------------
从 Desktop GIS group 启动 QGIS 并选择 "Manage Plugins"。
.. image:: ../../images/screenshots/1024x768/pycsw_qgis_plugin.png
:scale: 75 %
启用 CSW 插件。
.. image:: ../../images/screenshots/1024x768/pycsw_qgis_plugin_enable.png
:scale: 75 %
从工具栏选择 CSW 按钮启动客户端。
.. image:: ../../images/screenshots/1024x768/pycsw_qgis_csw_plugin_open.png
:scale: 75 %
按 "New" 新建服务并输入 ``http://localhost/pycsw/csw.py`` 添加 pycsw 示例服务。
.. image:: ../../images/screenshots/1024x768/pycsw_qgis_csw_plugin_add_server.png
:scale: 75 %
通过 "Add default servers" 可以配置默认服务。"Server info" 用于显示服务器信息。
.. image:: ../../images/screenshots/1024x768/pycsw_qgis_csw_plugin_server_info.png
:scale: 75 %
在编录中可以使用坐标范围或字符串检索。
.. image:: ../../images/screenshots/1024x768/pycsw_qgis_csw_plugin_search.png
:scale: 75 %
测试
------------------
利用测试程序也可以进行数据检索。例如以下使用字符串 "imagery" 检索得到相应的由 EUOSME 创建的 XML 文档。
.. image:: ../../images/screenshots/1024x768/pycsw_tester_discovery.png
:scale: 75 %
进一步的教程请见 pycsw 网站的 `文档`_ 。
.. _`Python`: http://www.python.org/
.. _`OpenGIS Catalogue Service Implementation Specification`: http://www.opengeospatial.org/standards/cat
.. _`2011`: http://www.kralidis.ca/blog/2011/02/04/help-wanted-baking-a-csw-server-in-python/
.. _`开源软件`: http://www.opensource.org/
.. _`文档`: http://pycsw.org/docs/documentation.html
.. _`lxml`: http://lxml.de/
.. _`SQLAlchemy`: http://www.sqlalchemy.org/
.. _`Shapely`: http://trac.gispython.org/lab/wiki/Shapely
.. _`pyproj`: http://code.google.com/p/pyproj/
.. _`下载 pycsw`: http://pycsw.org/download.html
.. _`GIMED`: http://sourceforge.net/projects/gimed/