配置

一旦安装了pygeoapi,就可以设置配置了。pygeoapi的运行时配置在 YAML 然后通过 PYGEOAPI_CONFIG 环境变量。您可以随意命名文件;典型的文件名以 .yml .

注解

在pygeoapi中总是可以找到一个示例配置 GitHub 储存库。

pygeoapi配置包含以下核心部分:

  • server :服务器范围的设置

  • logging :日志记录配置

  • metadata :服务器范围的元数据(联系人、许可证等)

  • resources :服务器提供的数据集集合、进程和stac集合

注解

Standard YAML mechanisms 可用于重复使用和紧凑性(锚、参考等)。

下面通过带注释的示例描述配置指令和引用。

参考文献

server

这个 server 部分提供有关绑定和高级调优的指令。

server:
  bind:
      host: 0.0.0.0  # listening address for incoming connections
      port: 5000  # listening port for incoming connections
  url: http://localhost:5000/  # url of server
  mimetype: application/json; charset=UTF-8  # default MIME type
  encoding: utf-8  # default server encoding
  language: en-US  # default server language
  cors: true  # boolean on whether server should support CORS
  pretty_print: true  # whether JSON responses should be pretty-printed
  limit: 10  # server limit on number of items to return
  template: # optional configuration to specify a different set of templates for HTML pages. Recommend using absolute paths. Omit this to use the default provided templates
    path: /path/to/jinja2/templates/folder # path to templates folder containing the jinja2 template HTML files
    static: /path/to/static/folder # path to static folder containing css, js, images and other static files referenced by the template
  map:  # leaflet map setup for HTML pages
      url: https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png
      attribution: '<a href="https://wikimediafoundation.org/wiki/Maps_Terms_of_Use">Wikimedia maps</a> | Map data &copy; <a href="https://openstreetmap.org/copyright">OpenStreetMap contributors</a>'
  ogc_schemas_location: /opt/schemas.opengis.net  # local copy of http://schemas.opengis.net

logging

这个 logging 节提供用于记录对调试有用的消息的指令。

logging:
    level: ERROR  # the logging level (see https://docs.python.org/3/library/logging.html#logging-levels)
    logfile: /path/to/pygeoapi.log  # the full file path to the logfile

注解

如果 level 定义和 logfile 未定义,则日志消息将输出到服务器的 stdout .

metadata

这个 metadata 部分提供总体服务元数据和描述的设置。

metadata:
    identification:
        title: pygeoapi default instance  # the title of the service
        description: pygeoapi provides an API to geospatial data  # some descriptive text about the service
        keywords:  # list of keywords about the service
            - geospatial
            - data
            - api
        keywords_type: theme  # keyword type as per the ISO 19115 MD_KeywordTypeCode codelist. Accepted values are discipline, temporal, place, theme, stratum
        terms_of_service: https://creativecommons.org/licenses/by/4.0/  # terms of service
        url: http://example.org  # informative URL about the service
    license:  # licensing details
        name: CC-BY 4.0 license
        url: https://creativecommons.org/licenses/by/4.0/
    provider:  # service provider details
        name: Organization Name
        url: https://pygeoapi.io
    contact:  # service contact details
        name: Lastname, Firstname
        position: Position Title
        address: Mailing Address
        city: City
        stateorprovince: Administrative Area
        postalcode: Zip or Postal Code
        country: Country
        phone: +xx-xxx-xxx-xxxx
        fax: +xx-xxx-xxx-xxxx
        email: you@example.org
        url: Contact URL
        hours: Mo-Fr 08:00-17:00
        instructions: During hours of service. Off on weekends.
        role: pointOfContact

resources

这个 resources 节列出服务器要发布的1个或多个数据集集合。

这个 resource.type 属性是必需的。允许的类型包括:

  • collection

  • process

  • stac-collection

这个 providers block是用于操作数据的1..n提供程序的列表。每个提供程序都需要 type 财产。允许的类型包括:

  • feature

  • coverage

  • tile

集合的默认提供程序可以用限定 default: true 在提供程序配置中。如果 default 不包括 第一 提供程序被假定为默认值。

resources:
    obs:
        type: collection  # REQUIRED (collection, process, or stac-collection)
        title: Observations  # title of dataset
        description: My cool observations  # abstract of dataset
        keywords:  # list of related keywords
            - observations
            - monitoring
        context:  # linked data configuration (see Linked Data section)
            - datetime: https://schema.org/DateTime
            - vocab: https://example.com/vocab#
              stn_id: "vocab:stn_id"
              value: "vocab:value"
        links:  # list of 1..n related links
            - type: text/csv  # MIME type
              rel: canonical  # link relations per https://www.iana.org/assignments/link-relations/link-relations.xhtml
              title: data  # title
              href: https://github.com/mapserver/mapserver/blob/branch-7-0/msautotest/wxs/data/obs.csv  # URL
              hreflang: en-US  # language
        extents:  # spatial and temporal extents
            spatial:  # required
                bbox: [-180,-90,180,90]  # list of minx, miny, maxx, maxy
                crs: http://www.opengis.net/def/crs/OGC/1.3/CRS84  # CRS
            temporal:  # optional
                begin: 2000-10-30T18:24:39Z  # start datetime in RFC3339
                end: 2007-10-30T08:57:29Z  # end datetime in RFC3339
        providers:  # list of 1..n required connections information
            # provider name
            # see pygeoapi.plugin for supported providers
            # for custom built plugins, use the import path (e.g. mypackage.provider.MyProvider)
            # see Plugins section for more information
            - type: feature # underlying data geospatial type: (allowed values are: feature, coverage)
              default: true  # optional: if not specified, the first provider definition is considered the default
              name: CSV
              data: tests/data/obs.csv  # required: the data filesystem path or URL, depending on plugin setup
              id_field: id  # required for vector data, the field corresponding to the ID
              time_field: datetimestamp  # optional field corresponding to the temporal propert of the dataset
              format:  # optional default format
                  name: GeoJSON  # required: format name
                  mimetype: application/json  # required: format mimetype
              options:  # optional options to pass to provider (i.e. GDAL creation)
                  option_name: option_value
              properties:  # optional: only return the following properties, in order
                  - stn_id
                  - value

    hello-world:  # name of process
        type: collection  # REQUIRED (collection, process, or stac-collection)
        processor:
            name: HelloWorld  # Python path of process defition

参见

Linked Data 用于可选地配置链接数据集

参见

自定义pygeoapi:插件 有关插件的更多信息

使用环境变量

pygeoapi配置支持使用系统环境变量,这有助于部署到 12 factor 例如环境。

下面是一个如何在pygeoapi中集成系统环境变量的示例。

server:
    bind:
        host: ${MY_HOST}
        port: ${MY_PORT}

链接数据

JSON-LD support

pygeoapi支持关于已部署实例的结构化元数据,并且还能够将数据表示为结构化数据。 JSON-LD 每个HTML页面都有等价物,并作为数据块嵌入到相应的页面中,以进行搜索引擎优化(SEO)。工具,如 Google Structured Data Testing Tool 可用于检查结构化表示。

实例的元数据由 metadata 配置的部分。此元数据是自动包含的,足以包含在数据集的主要索引中,包括 Google Dataset Search .

对于集合,在一个或多个项的级别上,默认情况下,JSON-LD表示将添加:

  • GeoJSON JSON-LD vocabulary and context@context .

  • @id 对于集合中的每个项,这是该项的URL(解析为pygeoapi中的HTML表示)

注解

虽然这足以提供有效的RDF(如GeoJSON LD),但它不允许 性质 你的项目是明确的解释。

pygeoapi当前允许扩展 @context 允许属性别名为词汇表中的术语。这是通过添加 context 配置的节 dataset .

默认的pygeoapi配置包括 obs 示例数据集:

context:
    - datetime: https://schema.org/DateTime
    - vocab: https://example.com/vocab#
      stn_id: "vocab:stn_id"
      value: "vocab:value"

这是一个不存在的词汇表,仅用于说明配置中的预期数据结构。特别是 stn_idvalue 属性无法解析。我们可以将这个例子扩展到一个用架构.org:

context:
    - schema: https://schema.org/
      stn_id: schema:identifer
      datetime:
          "@id": schema:observationDate
          "@type": schema:DateTime
      value:
          "@id": schema:value
          "@type": schema:Number

现在,这一点已经被详细阐述,结构化数据表示的好处变得更加清楚。曾经被称为无法解释的财产 datetime 在源CSV中,现在可以 expandedhttps://schema.org/observationDate ,从而消除歧义并增强互操作性。其类型也表示为 https://schema.org/DateTime .

此示例演示如何使用包含的示例数据将此功能与CSV数据提供程序一起使用。JSON-LD结构化数据的实现可用于任何数据提供程序,但目前仅限于定义 @context . 可以表示项之间的关系,但依赖于由数据集提供程序而不是pygeoapi来表示的关系。

总结

此时,您已准备好管理服务器的配置。