From c320a589c0dcbbd8451e1059ad5edf5bd606e109 Mon Sep 17 00:00:00 2001 From: Mark Stuart Date: Mon, 13 Nov 2023 13:23:41 +1300 Subject: [PATCH 1/5] Ensure the bbox input is in the correct form --- ckanext/spatial/public/js/spatial_query.js | 32 ++++++++++------------ 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/ckanext/spatial/public/js/spatial_query.js b/ckanext/spatial/public/js/spatial_query.js index 76b23c47..dc417aeb 100644 --- a/ckanext/spatial/public/js/spatial_query.js +++ b/ckanext/spatial/public/js/spatial_query.js @@ -133,7 +133,7 @@ this.ckan.module('spatial-query', function ($, _) { map.removeLayer(module.extentLayer); } module.extentLayer = extentLayer = e.layer; - $('#ext_bbox').val(extentLayer.getBounds().toBBoxString()); + module.ext_bbox_input.val(extentLayer.getBounds().toBBoxString()); map.addLayer(extentLayer); element.find('.btn-primary').removeClass('disabled').addClass('btn-primary'); }); @@ -197,33 +197,31 @@ this.ckan.module('spatial-query', function ($, _) { // Is there an existing box from a previous search? _setPreviousBBBox: function(map, zoom=true) { - previous_bbox = this._getParameterByName('ext_bbox'); + let module = this; + previous_bbox = module._getParameterByName('ext_bbox'); if (previous_bbox) { - $('#ext_bbox').val(previous_bbox); - this.extentLayer = this._drawExtentFromCoords(previous_bbox.split(',')) - map.addLayer(this.extentLayer); + module.ext_bbox_input.val(previous_bbox); + module.extentLayer = module._drawExtentFromCoords(previous_bbox.split(',')) + map.addLayer(module.extentLayer); if (zoom) { - map.fitBounds(this.extentLayer.getBounds(), {"animate": false, "padding": [20, 20]}); + map.fitBounds(module.extentLayer.getBounds(), {"animate": false, "padding": [20, 20]}); } } else { - map.fitBounds(this.options.default_extent, {"animate": false}); + map.fitBounds(module.options.default_extent, {"animate": false}); } - }, _onReady: function() { let module = this; let map; - let form = $(".search-form"); - - var buttons; + let form = $('#dataset-search-form'); + let bbox_input_id = 'ext_bbox'; - // Add necessary fields to the search form if not already created - $(['ext_bbox']).each(function(index, item){ - if ($("#" + item).length === 0) { - $('').attr({'id': item, 'name': item}).appendTo(form); - } - }); + // Add necessary field to the search form if not already created + if ($("#" + bbox_input_id).length === 0) { + $('').attr({'id': bbox_input_id, 'name': bbox_input_id}).appendTo(form); + } + module.ext_bbox_input = $('#dataset-search-form #ext_bbox'); // OK map time this.mainMap = map = this._createMap('dataset-map-container'); From b56edaa6d84e6a254d872198e8bf60543831c19e Mon Sep 17 00:00:00 2001 From: amercader Date: Fri, 8 Nov 2024 12:09:06 +0100 Subject: [PATCH 2/5] Add changelog file in the source code --- CHANGELOG.md | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..0bcaacd1 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,64 @@ +# Changelog + +## [Unreleased](https://github.com/ckan/ckanext-dcat/compare/v2.2.0...HEAD) + + +## [v2.2.0](https://github.com/ckan/ckanext-spatial/compare/v2.1.1...v2.2.0) - 2024-11-08 + +* CKAN 2.11 support [#331](https://github.com/ckan/ckanext-spatial/pull/331) +* SQLALchemy v2 support [#338](https://github.com/ckan/ckanext-spatial/pull/338) +* Fix requirements versions issues with Shapely and Numpy [#341](https://github.com/ckan/ckanext-spatial/pull/341) +* Fix catch error on index [#327](https://github.com/ckan/ckanext-spatial/pull/327) +* Traverse IIS folders in WAF harvester [#337](https://github.com/ckan/ckanext-spatial/pull/337) +* Ensure the bbox input is in the correct form [#322](https://github.com/ckan/ckanext-spatial/pull/322) + +## [v2.1.1](https://github.com/ckan/ckanext-spatial/compare/v2.1.0...v2.1.1) - 2023-11-10 + +* Lock pyproj to released 3.6.1 [#321](https://github.com/ckan/ckanext-spatial/pull/321) +* Improve date parser for IIS servers [#320](https://github.com/ckan/ckanext-spatial/pull/320) + + +## [v2.1.0](https://github.com/ckan/ckanext-spatial/compare/v2.0.0...v2.1.0) - 2023-10-31 + +* Dropped support for Python 2 +* Dropped support for the PostGIS search backend +* Updated the common map JS module to support many different tile providers. The default Stamen Terrain tile will no longer work, and users will need to configure a map tiles provider. Please check the [documentation](https://docs.ckan.org/projects/ckanext-spatial/en/latest/map-widgets.html) for full details. +* Upgrade tests to check all envs, including CKAN 2.10 with Python 3.10 [#308](https://github.com/ckan/ckanext-spatial/pull/308) +* TypeError when spatial is missing [#306](https://github.com/ckan/ckanext-spatial/pull/306) +* Fix requirements [#313](https://github.com/ckan/ckanext-spatial/pull/313) +* Fix detecting Microsoft-IIS server [#316](https://github.com/ckan/ckanext-spatial/pull/316) +* Update install.rst [#318](https://github.com/ckan/ckanext-spatial/pull/318) +* Change str validator to unicode_safe [#312](https://github.com/ckan/ckanext-spatial/pull/312) +* Use csw2 from owslib [#311](https://github.com/ckan/ckanext-spatial/pull/311) + +## [v2.0.0](https://github.com/ckan/ckanext-spatial/compare/v1.1.0...v2.0.0) - 2023-01-26 + +> [!NOTE] +> ckanext-spaital v2.0.0 only supports CKAN >= 2.9. For older versions use the 1.x versions + + +* Remove PostGIS requirement. Still available if using `ckan.spatial.use_postgis=true`, but will be dropped in the future +* Updated and simplified bbox-based and spatial field based searches, cleaning up and consolidating code, extending test coverage +* Pre-built and customized [Docker images](https://github.com/ckan/ckan-solr) (`*-spatial`) including all necessary changes to enable the spatial search +* New dataset search widget, easier to integrate with custom themes +* Allow to customize the actual Solr spatial query +* Updated [docs](https://docs.ckan.org/projects/ckanext-spatial/en/latest/)! +* [Document](https://docs.ckan.org/projects/ckanext-spatial/en/latest/spatial-search.html#custom-indexing-logic) and add tests for custom indexing support and multiple geometries per dataset +* Refactor `IPackageController` hooks + + +## [v1.1.0](https://github.com/ckan/ckanext-spatial/compare/v1.0.0...v1.1.0) - 2022-12-20 + +* Update for PY3 Encoding (waf harvester) [#252](https://github.com/ckan/ckanext-spatial/pull/252) +* Drop deprecated `package_extras` usage [#273](https://github.com/ckan/ckanext-spatial/pull/273) +* Make `_params_for_solr_search` extend `fq_list` [#236](https://github.com/ckan/ckanext-spatial/pull/236) +* Update shapely usage to avoid deprecation [#276](https://github.com/ckan/ckanext-spatial/pull/276) +* `guess_resource_format` may use protocol and function to better guess t… [#268](https://github.com/ckan/ckanext-spatial/pull/268) +* Make `ckanext.spatial.harvest.validate_wms` working again #265 [#267](https://github.com/ckan/ckanext-spatial/pull/267) +* Lineage support [#266](https://github.com/ckan/ckanext-spatial/pull/266) +* Apply byte->str conversion to recursive call [#278](https://github.com/ckan/ckanext-spatial/pull/278) +* CKAN 2.10 support [#279](https://github.com/ckan/ckanext-spatial/pull/279) +* Remove coupled resources from solr [#285](https://github.com/ckan/ckanext-spatial/pull/285) +* Add nginx WAF server [#283](https://github.com/ckan/ckanext-spatial/pull/283) +* Pin shapely [#303](https://github.com/ckan/ckanext-spatial/pull/303) +* Fix HTML view of ISO XML [#280](https://github.com/ckan/ckanext-spatial/pull/280) From 1a3667fe35c1475911f96931326c56632599c6df Mon Sep 17 00:00:00 2001 From: amercader Date: Fri, 8 Nov 2024 13:34:44 +0100 Subject: [PATCH 3/5] Migrate docs to material for mkdocs --- .readthedocs.yaml | 12 +- doc-requirements.txt | 1 - doc/_assets/ckan.ico | Bin 0 -> 1150 bytes doc/_assets/logo.png | Bin 0 -> 824 bytes doc/_css/extra.css | 27 ++++ doc/_static/index.png | Bin 0 -> 257507 bytes doc/_templates/footer.html | 22 --- doc/changelog.md | 1 + doc/conf.py | 263 ------------------------------ doc/csw.md | 206 ++++++++++++++++++++++++ doc/csw.rst | 205 ----------------------- doc/harvesters.md | 292 +++++++++++++++++++++++++++++++++ doc/harvesters.rst | 322 ------------------------------------- doc/index.md | 18 +++ doc/index.rst | 29 ---- doc/install.md | 161 +++++++++++++++++++ doc/install.rst | 179 --------------------- doc/map-widgets.md | 129 +++++++++++++++ doc/map-widgets.rst | 135 ---------------- doc/previews.md | 8 + doc/previews.rst | 12 -- doc/requirements.txt | 1 + doc/spatial-search.md | 297 ++++++++++++++++++++++++++++++++++ doc/spatial-search.rst | 264 ------------------------------ mkdocs.yml | 75 +++++++++ 25 files changed, 1219 insertions(+), 1440 deletions(-) delete mode 100644 doc-requirements.txt create mode 100644 doc/_assets/ckan.ico create mode 100644 doc/_assets/logo.png create mode 100644 doc/_css/extra.css create mode 100644 doc/_static/index.png delete mode 100644 doc/_templates/footer.html create mode 100644 doc/changelog.md delete mode 100644 doc/conf.py create mode 100644 doc/csw.md delete mode 100644 doc/csw.rst create mode 100644 doc/harvesters.md delete mode 100644 doc/harvesters.rst create mode 100644 doc/index.md delete mode 100644 doc/index.rst create mode 100644 doc/install.md delete mode 100644 doc/install.rst create mode 100644 doc/map-widgets.md delete mode 100644 doc/map-widgets.rst create mode 100644 doc/previews.md delete mode 100644 doc/previews.rst create mode 100644 doc/requirements.txt create mode 100644 doc/spatial-search.md delete mode 100644 doc/spatial-search.rst create mode 100644 mkdocs.yml diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 8425952e..98db1d0a 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -8,18 +8,14 @@ version: 2 # Set the version of Python and other tools you might need build: os: ubuntu-22.04 - apt_packages: - - libmagic-dev tools: - python: "3.10" + python: "3.12" -sphinx: - configuration: doc/conf.py +mkdocs: + configuration: mkdocs.yml formats: all python: install: - - method: pip - path: . - - requirements: doc-requirements.txt + - requirements: docs/requirements.txt diff --git a/doc-requirements.txt b/doc-requirements.txt deleted file mode 100644 index 59709ec7..00000000 --- a/doc-requirements.txt +++ /dev/null @@ -1 +0,0 @@ -sphinx-rtd-theme==2.0.0 diff --git a/doc/_assets/ckan.ico b/doc/_assets/ckan.ico new file mode 100644 index 0000000000000000000000000000000000000000..0d9295c77aa301fcd6751a4a499873e80a063388 GIT binary patch literal 1150 zcmZQzU<5(|0R|wcz>vYhz#zuJz@P!dKp~(AL>x#lFaYJQ@j@_|40NH1M@YFxUH$VS}FI-Nt8OZvIdqzNLUBf2h$HRV>yO9F!Y1$O<0Se7iJE+ zJ5cn4^v18jsTZ3WaQz^?ajOaHMK=Sa-)`^mf0l8ph}MfRW9k3?{z(t?Jxl*Nc^>-b W?0tkJ?BsRmpM_Q0PgprXE)4)>797+7 literal 0 HcmV?d00001 diff --git a/doc/_assets/logo.png b/doc/_assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3f631bfe1a6c2f76f19501bfcf22f8536b5bd93b GIT binary patch literal 824 zcmV-81IPS{P)Px%@<~KNRCr$P+D&T{K^O<{nP}SLD}iWYvkY+kgq=rzSVvNR38%_j~7O_z=x&GqK#YEz4b9eVAURgoM zW@pjf&UDVgWTcKTx?~OvY40IiIJf%zsbyK?Cx(VQs%#*3ZmKP`6C+Ab|+LbkpYLa3Mc zcXjh`M1?t?Q|>_gZejJ z&yk)Kgh<=AQ6Zga>>rqs4HAN+gbzeAN;p9zqJ$Sj5=yv1B%p*J1Q^aA04q8~^=6g@!#py&(Y6Gd+jA1L~RFrt_N!hm89h({E&Ks=zB z2QmP~Ob{0ob3yu`m<{595`p}OGSTW(|5e;VWZiOfyZ&&G_WPHK>-0E;=^$N6p`8fi zAU}smp&;jz$<0!!l#R#ZJkzM$y`F7se15XFHueXUo`94iwOf4v0000v literal 0 HcmV?d00001 diff --git a/doc/_css/extra.css b/doc/_css/extra.css new file mode 100644 index 00000000..aa607b5a --- /dev/null +++ b/doc/_css/extra.css @@ -0,0 +1,27 @@ +[data-md-color-scheme="ckan"] { + --md-primary-fg-color: #2980b9; + --md-primary-fg-color--light: #ECB7B7; + --md-primary-fg-color--dark: #90030C; +} + +[data-md-color-scheme="slate"] { + --md-primary-fg-color: #2980b9; + --md-primary-fg-color--light: #ECB7B7; + --md-primary-fg-color--dark: #90030C; + --md-hue: 210; +} + + +[data-md-toggle="search"]:not(:checked) ~ .md-header .md-search__form::after { + position: absolute; + top: .3rem; + right: .3rem; + display: block; + padding: .1rem .4rem; + color: var(--md-default-bg-color); + font-weight: bold; + font-size: .8rem; + border: .05rem solid var(--md-default-bg-color--lighter); + border-radius: .1rem; + content: "/"; +} diff --git a/doc/_static/index.png b/doc/_static/index.png new file mode 100644 index 0000000000000000000000000000000000000000..07e01b075223100f435fa5c87cf787d917f5a259 GIT binary patch literal 257507 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

uOi^I4BrGgrrhutnG56jGiHL8* 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�r7sWC#A=EU#=jsZ9)ohGZF{0z$^Z4Q- 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 literal 0 HcmV?d00001 diff --git a/doc/_templates/footer.html b/doc/_templates/footer.html deleted file mode 100644 index d457c8b0..00000000 --- a/doc/_templates/footer.html +++ /dev/null @@ -1,22 +0,0 @@ - - diff --git a/doc/changelog.md b/doc/changelog.md new file mode 100644 index 00000000..786b75d5 --- /dev/null +++ b/doc/changelog.md @@ -0,0 +1 @@ +--8<-- "CHANGELOG.md" diff --git a/doc/conf.py b/doc/conf.py deleted file mode 100644 index ebe362d2..00000000 --- a/doc/conf.py +++ /dev/null @@ -1,263 +0,0 @@ -# -*- coding: utf-8 -*- -import os -import datetime -from ckanext.spatial import __version__ - -# -# ckanext-spatial documentation build configuration file, created by -# sphinx-quickstart on Wed Apr 10 17:17:12 2013. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.intersphinx'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'ckanext-spatial' -copyright = u'© 2011-{} Open Knowledge Foundation and contributors.'.format(datetime.datetime.utcnow().year) - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = __version__ -# The full version, including alpha/beta/rc tags. -release = __version__ - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - -exclude_trees = ['.build'] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'sphinx_rtd_theme' - -#html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] -html_sidebars = { - '**': ['globaltoc.html'] -} - - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'ckanext-spatialdoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'ckanext-spatial.tex', u'ckanext-spatial Documentation', - u'Open Knowledge Foundation', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'ckanext-spatial', u'ckanext-spatial Documentation', - [u'Open Knowledge Foundation'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------------ - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'ckanext-spatial', u'ckanext-spatial Documentation', - u'Open Knowledge Foundation', 'ckanext-spatial', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False - - -# Example configuration for intersphinx: refer to the Python standard library. -#intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/doc/csw.md b/doc/csw.md new file mode 100644 index 00000000..0970f2fb --- /dev/null +++ b/doc/csw.md @@ -0,0 +1,206 @@ +# CSW support + +The extension provides the support for the +[CSW](http://www.opengeospatial.org/standards/cat) standard, a +specification from the Open Geospatial Consortium for exposing +geospatial catalogues over the web. + +This support consists of: + +- Ability to import records from CSW servers with the CSW harvester. + See `harvesters`{.interpreted-text role="doc"} for more details. +- Integration with [pycsw](http://pycsw.org) to provide a fully + compliant CSW interface for harvested records. This integration is + described in the following sections. + +## ckan-pycsw + +The spatial extension offers the `ckan-pycsw` command, which allows to +expose the spatial datasets harvested from other sources in a CSW +interface. This is powered by [pycsw](http://pycsw.org), which fully +implements the OGC CSW specification. + +### How it works + +The current implementation is based on CKAN and pycsw being loosely +integrated via the CKAN API. pycsw will be generally installed in the +same server as CKAN (although it can also be run on a separate one), and +the synchronization command will be run regularly to keep the records on +the pycsw repository up to date. This is done using the CKAN API to get +all the datasets identifiers (more precisely the ones from datasets that +have been harvested) and then deciding which ones need to be created, +updated or deleted on the pycsw repository. For those that need to be +created or updated, the original harvested spatial document (ie ISO +19139) is requested from CKAN, and it is then imported using pycsw +internal functions: + + Harvested + datasets + + + | + v + +--------+ +---------+ + | | CKAN API | | + | CKAN | +------------> | pycsw | +------> CSW + | | | | + +--------+ +---------+ + +Remember, only datasets that were harvested with the +`harvesters`{.interpreted-text role="doc"} can currently be exposed via +pycsw. + +All necessary tasks are done with the `ckan-pycsw` command. To get more +details of its usage, run the following: + + cd /usr/lib/ckan/default/src/ckanext-spatial + python bin/ckan_pycsw.py --help + +### Setup + +1. Install pycsw. There are several options for this, depending on your + server setup, check the [pycsw + documentation](http://docs.pycsw.org/en/latest/installation.html). + + !!! Note + CKAN integration requires least pycsw version 1.8.0. In general, use + the latest stable version. + + The following instructions assume that you have installed CKAN via a + [package + install](http://docs.ckan.org/en/latest/install-from-package.html) + and should be run as root, but the steps are the same if you are + setting it up in another location: + + cd /usr/lib/ckan/default/src + source ../bin/activate + + # From now on the virtualenv should be activated + + git clone https://github.com/geopython/pycsw.git + cd pycsw + # always use the latest stable version + git checkout 1.10.4 + pip install -e . + python setup.py build + python setup.py install + +2. Create a database for pycsw. In theory you can use the same database + that CKAN is using, but if you want to keep them separated, use the + following command to create a new one (we\'ll use the same default + user though): + + sudo -u postgres createdb -O ckan_default pycsw -E utf-8 + + It is strongly recommended that you install PostGIS in the pycsw + database, so its spatial functions are used. + +3. Configure pycsw. An example configuration file is included on the + source: + + cp default-sample.cfg default.cfg + + To keep things tidy we will create a symlink to this file on the + CKAN configuration directory: + + ln -s /usr/lib/ckan/default/src/pycsw/default.cfg /etc/ckan/default/pycsw.cfg + + Open the file with your favourite editor. The main settings you + should tweak are `server.home` and `repository.database`: + + [server] + home=/usr/lib/ckan/default/src/pycsw + ... + [repository] + database=postgresql://ckan_default:pass@localhost/pycsw + + The rest of the options are described + [here](http://docs.pycsw.org/en/latest/configuration.html). + +4. Setup the pycsw table. This is done with the `ckan-pycsw` script + (Remember to have the virtualenv activated when running it): + + cd /usr/lib/ckan/default/src/ckanext-spatial + python bin/ckan_pycsw.py setup -p /etc/ckan/default/pycsw.cfg + + At this point you should be ready to run pycsw with the wsgi script + that it includes: + + cd /usr/lib/ckan/default/src/pycsw + python csw.wsgi + + This will run pycsw at . Visiting the + following URL should return you the Capabilities file: + + + +5. Load the CKAN datasets into pycsw. Again, we will use the + `ckan-pycsw` command for this: + + cd /usr/lib/ckan/default/src/ckanext-spatial + python bin/ckan_pycsw.py load -p /etc/ckan/default/pycsw.cfg + + When the loading is finished, check that results are returned when + visiting this link: + + + + The `numberOfRecordsMatched` should match the number of harvested + datasets in CKAN (minus import errors). If you run the command again + new or udpated datasets will be synchronized and deleted datasets + from CKAN will be removed from pycsw as well. + +### Setting Service Metadata Keywords + +The CSW standard allows for administrators to set CSW service metadata. +These values can be set in the pycsw configuration `metadata:main` +section. If you would like the CSW service metadata keywords to be +reflective of the CKAN tags, run the following convenience command: + + python ckan_pycsw.py set_keywords -p /etc/ckan/default/pycsw.cfg + +Note that you must have privileges to write to the pycsw configuration +file. + +### Running it on production site + +On a production site you probably want to run the load command regularly +to keep CKAN and pycsw in sync, and serve pycsw with Apache + mod_wsgi +like CKAN. + +- To run the load command regularly you can set up a cron job. Type + `crontab -e` and copy the following lines: + + # m h dom mon dow command + 0 * * * * /var/lib/ckan/default/bin/python /var/lib/ckan/default/src/ckanext-spatial/bin/ckan_pycsw.py load -p /etc/ckan/default/pycsw.cfg + + This particular example will run the load command every hour. You + can of course modify this periodicity, for instance reducing it for + huge instances. This [Wikipedia + page](http://en.wikipedia.org/wiki/Cron#CRON_expression) has a good + overview of the crontab syntax. + +- To run pycsw under Apache check the pycsw [installation + documentation](http://docs.pycsw.org/en/latest/installation.html#running-on-wsgi) + or follow these quick steps (they assume the paths used in previous + steps): + + - Edit `/etc/apache2/sites-available/ckan_default` and add the + following line just before the existing `WSGIScriptAlias` + directive: + + WSGIScriptAlias /csw /usr/lib/ckan/default/src/pycsw/csw.wsgi + + - Edit the `/usr/lib/ckan/default/src/pycsw/csw.wsgi` file and add + these two lines just after the imports on the top of the file: + + activate_this = os.path.join('/usr/lib/ckan/default/bin/activate_this.py') + execfile(activate_this, {"__file__":activate_this}) + + We need these to activate the virtualenv where we installed + pycsw into. + + - Restart Apache: + + service apache2 restart + + pycsw should be now accessible at diff --git a/doc/csw.rst b/doc/csw.rst deleted file mode 100644 index d2e0e3ec..00000000 --- a/doc/csw.rst +++ /dev/null @@ -1,205 +0,0 @@ -=========== -CSW support -=========== - -The extension provides the support for the CSW_ standard, a specification from -the Open Geospatial Consortium for exposing geospatial catalogues over the web. - -This support consists of: - -* Ability to import records from CSW servers with the CSW harvester. See - :doc:`harvesters` for more details. - -* Integration with pycsw_ to provide a fully compliant CSW interface for - harvested records. This integration is described in the following sections. - - -ckan-pycsw ----------- - -The spatial extension offers the ``ckan-pycsw`` command, which allows to expose -the spatial datasets harvested from other sources in a CSW interface. This is -powered by pycsw_, which fully implements the OGC CSW specification. - -How it works -++++++++++++ - - -The current implementation is based on CKAN and pycsw being loosely integrated -via the CKAN API. pycsw will be generally installed in the same server as CKAN -(although it can also be run on a separate one), and the synchronization -command will be run regularly to keep the records on the pycsw repository up to -date. This is done using the CKAN API to get all the datasets identifiers (more -precisely the ones from datasets that have been harvested) and then deciding -which ones need to be created, updated or deleted on the pycsw repository. For -those that need to be created or updated, the original harvested spatial -document (ie ISO 19139) is requested from CKAN, and it is then imported using -pycsw internal functions:: - - Harvested - datasets - + - | - v - +--------+ +---------+ - | | CKAN API | | - | CKAN | +------------> | pycsw | +------> CSW - | | | | - +--------+ +---------+ - - -Remember, only datasets that were harvested with the :doc:`harvesters` -can currently be exposed via pycsw. - -All necessary tasks are done with the ``ckan-pycsw`` command. To get more -details of its usage, run the following:: - - cd /usr/lib/ckan/default/src/ckanext-spatial - python bin/ckan_pycsw.py --help - - -Setup -+++++ - -1. Install pycsw. There are several options for this, depending on your - server setup, check the `pycsw documentation`_. - - .. note:: CKAN integration requires least pycsw version 1.8.0. In general, - use the latest stable version. - - The following instructions assume that you have installed CKAN via a - `package install`_ and should be run as root, but the steps are the same if - you are setting it up in another location:: - - cd /usr/lib/ckan/default/src - source ../bin/activate - - # From now on the virtualenv should be activated - - git clone https://github.com/geopython/pycsw.git - cd pycsw - # always use the latest stable version - git checkout 1.10.4 - pip install -e . - python setup.py build - python setup.py install - -2. Create a database for pycsw. In theory you can use the same database that - CKAN is using, but if you want to keep them separated, use the following - command to create a new one (we'll use the same default user though):: - - sudo -u postgres createdb -O ckan_default pycsw -E utf-8 - - It is strongly recommended that you install PostGIS in the pycsw database, - so its spatial functions are used. - -3. Configure pycsw. An example configuration file is included on the source:: - - cp default-sample.cfg default.cfg - - To keep things tidy we will create a symlink to this file on the CKAN - configuration directory:: - - ln -s /usr/lib/ckan/default/src/pycsw/default.cfg /etc/ckan/default/pycsw.cfg - - Open the file with your favourite editor. The main settings you should tweak - are ``server.home`` and ``repository.database``:: - - [server] - home=/usr/lib/ckan/default/src/pycsw - ... - [repository] - database=postgresql://ckan_default:pass@localhost/pycsw - - The rest of the options are described `here `_. - -4. Setup the pycsw table. This is done with the ``ckan-pycsw`` script - (Remember to have the virtualenv activated when running it):: - - cd /usr/lib/ckan/default/src/ckanext-spatial - python bin/ckan_pycsw.py setup -p /etc/ckan/default/pycsw.cfg - - At this point you should be ready to run pycsw with the wsgi script that it - includes:: - - cd /usr/lib/ckan/default/src/pycsw - python csw.wsgi - - This will run pycsw at http://localhost:8000. Visiting the following URL - should return you the Capabilities file: - - http://localhost:8000/?service=CSW&version=2.0.2&request=GetCapabilities - -5. Load the CKAN datasets into pycsw. Again, we will use the ``ckan-pycsw`` - command for this:: - - cd /usr/lib/ckan/default/src/ckanext-spatial - python bin/ckan_pycsw.py load -p /etc/ckan/default/pycsw.cfg - - When the loading is finished, check that results are returned when visiting - this link: - - http://localhost:8000/?request=GetRecords&service=CSW&version=2.0.2&resultType=results&outputSchema=http://www.isotc211.org/2005/gmd&typeNames=csw:Record&elementSetName=summary - - The ``numberOfRecordsMatched`` should match the number of harvested datasets - in CKAN (minus import errors). If you run the command again new or udpated - datasets will be synchronized and deleted datasets from CKAN will be removed - from pycsw as well. - -Setting Service Metadata Keywords -+++++++++++++++++++++++++++++++++ - -The CSW standard allows for administrators to set CSW service metadata. These -values can be set in the pycsw configuration ``metadata:main`` section. If you -would like the CSW service metadata keywords to be reflective of the CKAN -tags, run the following convenience command:: - - python ckan_pycsw.py set_keywords -p /etc/ckan/default/pycsw.cfg - -Note that you must have privileges to write to the pycsw configuration file. - - -Running it on production site -+++++++++++++++++++++++++++++ - -On a production site you probably want to run the load command regularly to -keep CKAN and pycsw in sync, and serve pycsw with Apache + mod_wsgi like CKAN. - -* To run the load command regularly you can set up a cron job. Type ``crontab -e`` - and copy the following lines:: - - # m h dom mon dow command - 0 * * * * /var/lib/ckan/default/bin/python /var/lib/ckan/default/src/ckanext-spatial/bin/ckan_pycsw.py load -p /etc/ckan/default/pycsw.cfg - - This particular example will run the load command every hour. You can of - course modify this periodicity, for instance reducing it for huge instances. - This `Wikipedia page `_ - has a good overview of the crontab syntax. - -* To run pycsw under Apache check the pycsw `installation documentation `_ - or follow these quick steps (they assume the paths used in previous steps): - - - Edit ``/etc/apache2/sites-available/ckan_default`` and add the following - line just before the existing ``WSGIScriptAlias`` directive:: - - WSGIScriptAlias /csw /usr/lib/ckan/default/src/pycsw/csw.wsgi - - - Edit the ``/usr/lib/ckan/default/src/pycsw/csw.wsgi`` file and add these two - lines just after the imports on the top of the file:: - - activate_this = os.path.join('/usr/lib/ckan/default/bin/activate_this.py') - execfile(activate_this, {"__file__":activate_this}) - - We need these to activate the virtualenv where we installed pycsw into. - - - Restart Apache:: - - service apache2 restart - - pycsw should be now accessible at http://localhost/csw - -.. _pycsw: http://pycsw.org -.. _pycsw documentation: http://docs.pycsw.org/en/latest/installation.html -.. _package install: http://docs.ckan.org/en/latest/install-from-package.html -.. _CSW: http://www.opengeospatial.org/standards/cat - diff --git a/doc/harvesters.md b/doc/harvesters.md new file mode 100644 index 00000000..e619c56c --- /dev/null +++ b/doc/harvesters.md @@ -0,0 +1,292 @@ +# Spatial Harvesters + +## Overview and Configuration + +The spatial extension provides some harvesters for importing +ISO19139-based metadata into CKAN, as well as providing a base class for +writing new ones. The harvesters use the interface provided by +[ckanext-harvest](https://github.com/okfn/ckanext-harvest), so you will +need to install and set it up first. + +Once ckanext-harvest is installed, you can add the following plugins to +your ini file to enable the different harvesters: + +- `csw_harvester` - CSW server +- `waf_harvester` - WAF (Web Accessible Folder): An online accessible + index page with links to metadata documents +- `doc_harvester` - A single online accessible metadata document. + +Have a look at the [ckanext-harvest +documentation](https://github.com/okfn/ckanext-harvest#the-harvesting-interface) +if you want to have an overview of how the CKAN harvesters work, but +basically there are three separate stages: + +- gather_stage - Aggregates all the remote identifiers for a + particular source (eg identifiers for a CSW server, files for a + WAF). +- fetch_stage - Fetches all the remote documents and stores them on + the database. +- import_stage - Performs all the processing for transforming the + remote content into a CKAN dataset: validates the document, parses + it, converts it to a CKAN dataset dict and saves it in the database. + +The extension provides different XSD and schematron based validators, +and you can also write your own (see [Writing custom +validators](#writing-custom-validators)). You can specify which +validators to use for the remote documents with the following +configuration option: + + ckan.spatial.validator.profiles = iso19193eden + +By default, the import stage will stop if the validation of the +harvested document fails. This can be modified setting the +`ckanext.spatial.harvest.continue_on_validation_errors` to True. The +setting can also be applied at the source level setting to True the +`continue_on_validation_errors` key on the source configuration object. + +By default the harvesting actions (eg creating or updating datasets) +will be performed by the internal site admin user. This is the +recommended setting, but if necessary, it can be overridden with the +`ckanext.spatial.harvest.user_name` config option, eg to support the old +hardcoded `harvest` user: + + ckanext.spatial.harvest.user_name = harvest + +When a document has not been updated remotely, the previous harvest +object is replaced by the current one rather than keeping it, to avoid +cluttering the `harvest_object` table. This means that the +`harvest_object_id` reference on the linked dataset needs to be updated, +by reindexing it. This will happen by default, but if you want to turn +it off (eg if you are doing separate reindexing) it can be turn off with +the following option: + + ckanext.spatial.harvest.reindex_unchanged = False + +You can configure the single harvesters using a JSON object in the +configuration form field. The currently supported configuration options +are: + +- `default_tags`: A list of tags that will be added to all harvested + datasets. Tags don\'t need to previously exist. This field takes a + list of strings. +- `default_extras`: A dictionary of key value pairs that will be added + to extras of the harvested datasets. +- `override_extras`: Assign default extras even if they already exist + in the remote dataset. Default is False (only non existing extras + are added). +- `clean_tags`: By default, tags are not stripped of accent + characters, spaces and capital letters for display. If this option + is set to True, accent characters will be replaced by their ascii + equivalents, capital letters replaced by lower-case ones, and spaces + replaced with dashes. Setting this option to False gives the same + effect as leaving it unset. +- `validator_profiles`: A list of string that specifies a list of + validators that will be applied to the current harvester, overriding + the global ones defined by the \'ckan.spatial.validator.profiles\' + option. + +## Customizing the harvesters + +The default harvesters provided in this extension can be extended from +extensions implementing the `ISpatialHarvester` interface. + +Probably the most useful extension point is `get_package_dict`, which +allows to tweak the dataset fields before creating or updating it: + +```python +import ckan.plugins as p +from ckanext.spatial.interfaces import ISpatialHarvester + +class MyPlugin(p.SingletonPlugin): + + p.implements(ISpatialHarvester, inherit=True) + + def get_package_dict(self, context, data_dict): + + # Check the reference below to see all that's included on data_dict + + package_dict = data_dict['package_dict'] + iso_values = data_dict['iso_values'] + + package_dict['extras'].append( + {'key': 'topic-category', 'value': iso_values.get('topic-category')} + ) + + package_dict['extras'].append( + {'key': 'my-custom-extra', 'value': 'my-custom-value'} + ) + + return package_dict +``` + +`get_validators` allows to register custom validation classes that can +be applied to the harvested documents. Check the [Writing custom +validators](#writing-custom-validators) section to know more about how +to write your custom validators: + +```python +import ckan.plugins as p +from ckanext.spatial.interfaces import ISpatialHarvester +from ckanext.spatial.validation.validation import BaseValidator + +class MyPlugin(p.SingletonPlugin): + + p.implements(ISpatialHarvester, inherit=True) + + def get_validators(self): + return [MyValidator] + + +class MyValidator(BaseValidator): + + name = 'my-validator' + + title= 'My very own validator' + + @classmethod + def is_valid(cls, xml): + + return True, [] +``` + +`transform_to_iso` allows to hook into transformation mechanisms to +transform other formats into ISO1939, the only one directly supported by +the spatial harvesters. + +The full reference for the extension points can be found in [`ckanext/spatial/interfaces.py`](https://github.com/ckan/ckanext-spatial/blob/master/ckanext/spatial/interfaces.py) + +If you need to further customize the default behaviour of the +harvesters, you can either extend `CswHarvester`, `WAFfHarverster` or +the main `SpatialHarvester` class., for instance to override the whole +`import_stage` if the default logic does not suit your needs. + +The +[ckanext-geodatagov](https://github.com/okfn/ckanext-geodatagov/blob/master/ckanext/geodatagov/harvesters/) +extension contains live examples on how to extend the default spatial +harvesters and create new ones for other spatial services like ArcGIS +REST APIs. + +## Writing custom validators + +Validator classes extend the `BaseValidator` class. + +Helper classes are provided for XSD and schematron based validation, and +completely custom logic can be also implemented. Here are some examples +of the most common types: + +- XSD based validators: + + class ISO19139NGDCSchema(XsdValidator): + ''' + XSD based validation for ISO 19139 documents. + + Uses XSD schema from the NOAA National Geophysical Data Center: + + http://ngdc.noaa.gov/metadata/published/xsd/ + + ''' + name = 'iso19139ngdc' + title = 'ISO19139 XSD Schema (NGDC)' + + @classmethod + def is_valid(cls, xml): + xsd_path = 'xml/iso19139ngdc' + + xsd_filepath = os.path.join(os.path.dirname(__file__), + xsd_path, 'schema.xsd') + return cls._is_valid(xml, xsd_filepath, 'NGDC Schema (schema.xsd)') + +- Schematron validators: + + class Gemini2Schematron(SchematronValidator): + name = 'gemini2' + title = 'GEMINI 2.1 Schematron 1.2' + + @classmethod + def get_schematrons(cls): + with resource_stream("ckanext.spatial", + "validation/xml/gemini2/gemini2-schematron-20110906-v1.2.sch") as schema: + return [cls.schematron(schema)] + +- Custom validators: + + class MinimalFGDCValidator(BaseValidator): + + name = 'fgdc_minimal' + title = 'FGDC Minimal Validation' + + _elements = [ + ('Identification Citation Title', '/metadata/idinfo/citation/citeinfo/title'), + ('Identification Citation Originator', '/metadata/idinfo/citation/citeinfo/origin'), + ('Identification Citation Publication Date', '/metadata/idinfo/citation/citeinfo/pubdate'), + ('Identification Description Abstract', '/metadata/idinfo/descript/abstract'), + ('Identification Spatial Domain West Bounding Coordinate', '/metadata/idinfo/spdom/bounding/westbc'), + ('Identification Spatial Domain East Bounding Coordinate', '/metadata/idinfo/spdom/bounding/eastbc'), + ('Identification Spatial Domain North Bounding Coordinate', '/metadata/idinfo/spdom/bounding/northbc'), + ('Identification Spatial Domain South Bounding Coordinate', '/metadata/idinfo/spdom/bounding/southbc'), + ('Metadata Reference Information Contact Address Type', '/metadata/metainfo/metc/cntinfo/cntaddr/addrtype'), + ('Metadata Reference Information Contact Address State', '/metadata/metainfo/metc/cntinfo/cntaddr/state'), + ] + + @classmethod + def is_valid(cls, xml): + + errors = [] + + for title, xpath in cls._elements: + element = xml.xpath(xpath) + if len(element) == 0 or not element[0].text: + errors.append(('Element not found: {0}'.format(title), None)) + if len(errors): + return False, errors + + return True, [] + +The +[validation.py](https://github.com/ckan/ckanext-spatial/blob/master/ckanext/spatial/validation/validation.py) +file included in the ckanext-spatial extension contains more examples of +the different types. + +Remember that after registering your own validators you must specify +them on the following configuration option: + + ckan.spatial.validator.profiles = iso19193eden,my-validator + +## Harvest Metadata API + +This plugin allows to access the actual harvested document via API +requests. It is enabled with the following plugin: + + ckan.plugins = spatial_harvest_metadata_api + +(It was previously known as `inspire_api`) + +To view the harvest objects (containing the harvested metadata) in the +web interface, these controller locations are added: + +- raw XML document: /harvest/object/{id} +- HTML representation: /harvest/object/{id}/html + +!!! Note + The old URLs are now deprecated and redirect to the previously + mentioned: + + - /api/2/rest/harvestobject/\/xml + - /api/2/rest/harvestobject/\/html + +For those harvest objects that have an original document (which was +transformed to ISO), this can be accessed via: + +- raw XML document: /harvest/object/{id}/original +- HTML representation: /harvest/object/{id}/html/original + +The HTML representation is created via an XSLT transformation. The +extension provides an XSLT file that should work on ISO 19139 based +documents, but if you want to use your own on your extension, you can +override it using the following configuration options: + + ckanext.spatial.harvest.xslt_html_content = ckanext.myext:templates/xslt/custom.xslt + ckanext.spatial.harvest.xslt_html_content_original = ckanext.myext:templates/xslt/custom2.xslt + +If your project does not transform different metadata types you can +ignore the second option. diff --git a/doc/harvesters.rst b/doc/harvesters.rst deleted file mode 100644 index c785b036..00000000 --- a/doc/harvesters.rst +++ /dev/null @@ -1,322 +0,0 @@ -================== -Spatial Harvesters -================== - -Overview and Configuration --------------------------- - -The spatial extension provides some harvesters for importing ISO19139-based -metadata into CKAN, as well as providing a base class for writing new ones. -The harvesters use the interface provided by ckanext-harvest_, so you will need -to install and set it up first. - -Once ckanext-harvest is installed, you can add the following plugins to your -ini file to enable the different harvesters (If you are upgrading from a -previous version to CKAN 2.0 see legacy_harvesters_): - -* ``csw_harvester`` - CSW server -* ``waf_harvester`` - WAF (Web Accessible Folder): An online accessible index - page with links to metadata documents -* ``doc_harvester`` - A single online accessible metadata document. - -Have a look at the `ckanext-harvest documentation`_ if you want to have an -overview of how the CKAN harvesters work, but basically there are three -separate stages: - -* gather_stage - Aggregates all the remote identifiers for a particular source - (eg identifiers for a CSW server, files for a WAF). -* fetch_stage - Fetches all the remote documents and stores them on the - database. -* import_stage - Performs all the processing for transforming the remote - content into a CKAN dataset: validates the document, parses it, converts it - to a CKAN dataset dict and saves it in the database. - -The extension provides different XSD and schematron based validators, and you -can also write your own (see `Writing custom validators`_). You can -specify which validators to use for the remote documents with the following -configuration option:: - - ckan.spatial.validator.profiles = iso19193eden - -By default, the import stage will stop if the validation of the harvested -document fails. This can be modified setting the -``ckanext.spatial.harvest.continue_on_validation_errors`` to True. The setting -can also be applied at the source level setting to True the -``continue_on_validation_errors`` key on the source configuration object. - -By default the harvesting actions (eg creating or updating datasets) will be -performed by the internal site admin user. This is the recommended setting, -but if necessary, it can be overridden with the -``ckanext.spatial.harvest.user_name`` config option, eg to support the old -hardcoded 'harvest' user:: - - ckanext.spatial.harvest.user_name = harvest - -When a document has not been updated remotely, the previous harvest object is -replaced by the current one rather than keeping it, to avoid cluttering the -``harvest_object`` table. This means that the ``harvest_object_id`` reference -on the linked dataset needs to be updated, by reindexing it. This will happen -by default, but if you want to turn it off (eg if you are doing separate -reindexing) it can be turn off with the following option:: - - ckanext.spatial.harvest.reindex_unchanged = False - -You can configure the single harvesters using a JSON object in the configuration form field. -The currently supported configuration options are: - -* ``default_tags``: A list of tags that will be added to all harvested datasets. - Tags don't need to previously exist. This field takes a list of strings. -* ``default_extras``: A dictionary of key value pairs that will be added to extras of the harvested datasets. -* ``override_extras``: Assign default extras even if they already exist in the remote dataset. - Default is False (only non existing extras are added). -* ``clean_tags``: By default, tags are not stripped of accent characters, spaces and - capital letters for display. If this option is set to True, accent characters will - be replaced by their ascii equivalents, capital letters replaced by lower-case ones, - and spaces replaced with dashes. Setting this option to False gives the same effect as leaving it unset. -* ``validator_profiles``: A list of string that specifies a list of validators that will be applied to the - current harvester, overriding the global ones defined by the 'ckan.spatial.validator.profiles' option. - - -Customizing the harvesters --------------------------- - -The default harvesters provided in this extension can be extended from -extensions implementing the ``ISpatialHarvester`` interface. - -Probably the most useful extension point is ``get_package_dict``, which -allows to tweak the dataset fields before creating or updating it:: - - import ckan.plugins as p - from ckanext.spatial.interfaces import ISpatialHarvester - - class MyPlugin(p.SingletonPlugin): - - p.implements(ISpatialHarvester, inherit=True) - - def get_package_dict(self, context, data_dict): - - # Check the reference below to see all that's included on data_dict - - package_dict = data_dict['package_dict'] - iso_values = data_dict['iso_values'] - - package_dict['extras'].append( - {'key': 'topic-category', 'value': iso_values.get('topic-category')} - ) - - package_dict['extras'].append( - {'key': 'my-custom-extra', 'value': 'my-custom-value'} - ) - - return package_dict - -``get_validators`` allows to register custom validation classes that can be -applied to the harvested documents. Check the `Writing custom validators`_ -section to know more about how to write your custom validators:: - - import ckan.plugins as p - from ckanext.spatial.interfaces import ISpatialHarvester - from ckanext.spatial.validation.validation import BaseValidator - - class MyPlugin(p.SingletonPlugin): - - p.implements(ISpatialHarvester, inherit=True) - - def get_validators(self): - return [MyValidator] - - - class MyValidator(BaseValidator): - - name = 'my-validator' - - title= 'My very own validator' - - @classmethod - def is_valid(cls, xml): - - return True, [] - - -``transform_to_iso`` allows to hook into transformation mechanisms to -transform other formats into ISO1939, the only one directly supported by -the spatial harvesters. - -Here is the full reference for the provided extension points: - -.. autoclass:: ckanext.spatial.interfaces.ISpatialHarvester - :members: - -If you need to further customize the default behaviour of the harvesters, you -can either extend ``CswHarvester``, ``WAFfHarverster`` or the main -``SpatialHarvester`` class., for instance to override the whole -``import_stage`` if the default logic does not suit your -needs. - -The `ckanext-geodatagov`_ extension contains live examples on how to extend -the default spatial harvesters and create new ones for other spatial services -like ArcGIS REST APIs. - -Writing custom validators -------------------------- - - -Validator classes extend the ``BaseValidator`` class: - -.. autoclass:: ckanext.spatial.validation.validation.BaseValidator - :members: - -Helper classes are provided for XSD and schematron based validation, and -completely custom logic can be also implemented. Here are some examples of -the most common types: - -* XSD based validators:: - - class ISO19139NGDCSchema(XsdValidator): - ''' - XSD based validation for ISO 19139 documents. - - Uses XSD schema from the NOAA National Geophysical Data Center: - - http://ngdc.noaa.gov/metadata/published/xsd/ - - ''' - name = 'iso19139ngdc' - title = 'ISO19139 XSD Schema (NGDC)' - - @classmethod - def is_valid(cls, xml): - xsd_path = 'xml/iso19139ngdc' - - xsd_filepath = os.path.join(os.path.dirname(__file__), - xsd_path, 'schema.xsd') - return cls._is_valid(xml, xsd_filepath, 'NGDC Schema (schema.xsd)') - - - -* Schematron validators:: - - class Gemini2Schematron(SchematronValidator): - name = 'gemini2' - title = 'GEMINI 2.1 Schematron 1.2' - - @classmethod - def get_schematrons(cls): - with resource_stream("ckanext.spatial", - "validation/xml/gemini2/gemini2-schematron-20110906-v1.2.sch") as schema: - return [cls.schematron(schema)] - - -* Custom validators:: - - class MinimalFGDCValidator(BaseValidator): - - name = 'fgdc_minimal' - title = 'FGDC Minimal Validation' - - _elements = [ - ('Identification Citation Title', '/metadata/idinfo/citation/citeinfo/title'), - ('Identification Citation Originator', '/metadata/idinfo/citation/citeinfo/origin'), - ('Identification Citation Publication Date', '/metadata/idinfo/citation/citeinfo/pubdate'), - ('Identification Description Abstract', '/metadata/idinfo/descript/abstract'), - ('Identification Spatial Domain West Bounding Coordinate', '/metadata/idinfo/spdom/bounding/westbc'), - ('Identification Spatial Domain East Bounding Coordinate', '/metadata/idinfo/spdom/bounding/eastbc'), - ('Identification Spatial Domain North Bounding Coordinate', '/metadata/idinfo/spdom/bounding/northbc'), - ('Identification Spatial Domain South Bounding Coordinate', '/metadata/idinfo/spdom/bounding/southbc'), - ('Metadata Reference Information Contact Address Type', '/metadata/metainfo/metc/cntinfo/cntaddr/addrtype'), - ('Metadata Reference Information Contact Address State', '/metadata/metainfo/metc/cntinfo/cntaddr/state'), - ] - - @classmethod - def is_valid(cls, xml): - - errors = [] - - for title, xpath in cls._elements: - element = xml.xpath(xpath) - if len(element) == 0 or not element[0].text: - errors.append(('Element not found: {0}'.format(title), None)) - if len(errors): - return False, errors - - return True, [] - - -The `validation.py`_ file included in the ckanext-spatial extension contains -more examples of the different types. - -Remember that after registering your own validators you must specify them on -the following configuration option:: - - ckan.spatial.validator.profiles = iso19193eden,my-validator - - -.. _validation.py: https://github.com/ckan/ckanext-spatial/blob/master/ckanext/spatial/validation/validation.py - -Harvest Metadata API --------------------- - -This plugin allows to access the actual harvested document via API requests. -It is enabled with the following plugin:: - - ckan.plugins = spatial_harvest_metadata_api - -(It was previously known as ``inspire_api``) - -To view the harvest objects (containing the harvested metadata) in the web -interface, these controller locations are added: - -* raw XML document: /harvest/object/{id} -* HTML representation: /harvest/object/{id}/html - -.. note:: The old URLs are now deprecated and redirect to the previously - mentioned: - - * /api/2/rest/harvestobject//xml - * /api/2/rest/harvestobject//html - - -For those harvest objects that have an original document (which was transformed -to ISO), this can be accessed via: - -* raw XML document: /harvest/object/{id}/original -* HTML representation: /harvest/object/{id}/html/original - -The HTML representation is created via an XSLT transformation. The extension -provides an XSLT file that should work on ISO 19139 based documents, but if you -want to use your own on your extension, you can override it using the following -configuration options:: - - ckanext.spatial.harvest.xslt_html_content = ckanext.myext:templates/xslt/custom.xslt - ckanext.spatial.harvest.xslt_html_content_original = ckanext.myext:templates/xslt/custom2.xslt - -If your project does not transform different metadata types you can ignore the -second option. - -.. _legacy_harvesters: - -Legacy harvesters ------------------ - -Prior to CKAN 2.0, the spatial harvesters available on this extension were -based on the GEMINI2 format, an ISO19139 profile used by the UK Location -Programme, and the logic for creating or updating datasets and the resulting -fields were somehow adapted to the needs for this particular project. The -harvesters were still generic enough and should work fine with other ISO19139 -based sources, but extra care has been put to make the new harvesters more -generic and robust, so these ones should only be used on existing instances: - -* ``gemini_csw_harvester`` -* ``gemini_waf_harvester`` -* ``gemini_doc_harvester`` - -If you are using these harvesters please consider upgrading to the new -versions described on the previous section. - - -.. todo:: Validation library details - - -.. _ckanext-harvest: https://github.com/okfn/ckanext-harvest -.. _ckanext-harvest documentation: https://github.com/okfn/ckanext-harvest#the-harvesting-interface -.. _ckanext-geodatagov: https://github.com/okfn/ckanext-geodatagov/blob/master/ckanext/geodatagov/harvesters/ diff --git a/doc/index.md b/doc/index.md new file mode 100644 index 00000000..723b4cee --- /dev/null +++ b/doc/index.md @@ -0,0 +1,18 @@ +# ckanext-spatial - Geo related plugins for CKAN + +[![Tests](https://github.com/ckan/ckanext-spatial/workflows/Tests/badge.svg?branch=master)](https://github.com/ckan/ckanext-spatial/actions) + +This extension contains plugins that add geospatial capabilities to +[CKAN](http://ckan.org). + +You should have a CKAN instance installed before adding these plugins. +Head to the [CKAN documentation](http://docs.ckan.org) for information +on how to set up CKAN. + +The extension allows to perform spatial queries and display the dataset +extent on the frontend. It also provides harvesters to import geospatial +metadata into CKAN from other sources, as well as commands to support +the OGC CSW standard via [pycsw](http://pycsw.org). + + +![Spatial search](_static/index.png) diff --git a/doc/index.rst b/doc/index.rst deleted file mode 100644 index 5fd0e767..00000000 --- a/doc/index.rst +++ /dev/null @@ -1,29 +0,0 @@ -============================================== -ckanext-spatial - Geo related plugins for CKAN -============================================== - -This extension contains plugins that add geospatial capabilities to CKAN_. - -You should have a CKAN instance installed before adding these plugins. Head to -the `CKAN documentation`_ for information on how to set up CKAN. - -The extension allows to perform spatial queries and display the dataset extent -on the frontend. It also provides harvesters to import geospatial metadata into -CKAN from other sources, as well as commands to support the OGC CSW standard via pycsw_. - -Contents: - -.. toctree:: - :maxdepth: 2 - - install - spatial-search - harvesters - csw - previews - map-widgets - -.. _CKAN: http://ckan.org -.. _CKAN Documentation: http://docs.ckan.org -.. _GeoJSON: http://geojson.org -.. _pycsw: http://pycsw.org diff --git a/doc/install.md b/doc/install.md new file mode 100644 index 00000000..923c5a2d --- /dev/null +++ b/doc/install.md @@ -0,0 +1,161 @@ +# Installation and Setup + +Check the [Troubleshooting](#troubleshooting) section if you get errors +at any stage. + +All commands assume an existing CKAN database named `ckan_default`. + +## Install the extension + +!!! Note + The package names and paths shown are the defaults on Ubuntu installs. + Adjust the package names and the paths if you are using a different + platform. + +1. Install some packages needed by the extension dependencies: + + sudo apt-get install python-dev libxml2-dev libxslt1-dev libgeos-c1 + +2. Activate your CKAN virtual environment, for example: + + . /usr/lib/ckan/default/bin/activate + +3. Install the ckanext-spatial Python package into your virtual + environment: + + pip install -e "git+https://github.com/ckan/ckanext-spatial.git#egg=ckanext-spatial" + +4. Install the rest of Python modules required by the extension: + + pip install -r /usr/lib/ckan/default/src/ckanext-spatial/requirements.txt + +5. Restart CKAN. For example if you\'ve deployed CKAN with Apache on + Ubuntu: + + sudo service apache2 reload + +To use the [spatial harvesters](harvesters.md), you will need to +install and configure the harvester extension: +[ckanext-harvest](https://github.com/okfn/ckanext-harvest). Follow the +install instructions on its documentation for details on how to set it +up. + +## Configuration + +Add the following plugins to the `ckan.plugins` directive in the CKAN +ini file: + + ckan.plugins = spatial_metadata spatial_query + +## Troubleshooting + +Here are some common problems you may find when installing or using the +extension: + +### When upgrading the extension to a newer version + +#### ckan.plugins.core.PluginNotFoundException: geojson_view + + File "/home/pyenvs/spatial/src/ckan/ckan/plugins/core.py", line 149, in load + service = _get_service(plugin) + File "/home/pyenvs/spatial/src/ckan/ckan/plugins/core.py", line 256, in _get_service + raise PluginNotFoundException(plugin_name) + ckan.plugins.core.PluginNotFoundException: geojson_view + +Your CKAN instance is using the `geojson_view` (or `geojson_preview`) +plugin. This plugin has been moved from ckanext-spatial to +[ckanext-geoview](https://github.com/ckan/ckanext-geoview). Please +install ckanext-geoview following the instructions on the README. + +#### TemplateNotFound: Template dataviewer/geojson.html cannot be found + + File '/home/pyenvs/spatial/src/ckan/ckan/lib/base.py', line 129 in render_template + template_path, template_type = render_.template_info(template_name) + File '/home/pyenvs/spatial/src/ckan/ckan/lib/render.py', line 51 in template_info + raise TemplateNotFound('Template %s cannot be found' % template_name) + TemplateNotFound: Template dataviewer/geojson.html cannot be found + +See the issue above for details. Install +[ckanext-geoview](https://github.com/ckan/ckanext-geoview) and +additionally run the following on the ckanext-spatial directory with +your virtualenv activated: + + pip install -e . + +#### ImportError: No module named nongeos_plugin + + File "/home/pyenvs/spatial/src/ckan/ckan/plugins/core.py", line 255, in _get_service + return plugin.load()(name=plugin_name) + File "/home/pyenvs/spatial/local/lib/python2.7/site-packages/pkg_resources.py", line 2147, in load + ['__name__']) + ImportError: No module named nongeos_plugin + +See the issue above for details. Install +[ckanext-geoview](https://github.com/ckan/ckanext-geoview) and +additionally run the following on the ckanext-spatial directory with +your virtualenv activated: + + pip install -e . + +#### Plugin class \'GeoJSONPreview\' does not implement an interface + + File "/home/pyenvs/spatial/src/ckanext-spatial/ckanext/spatial/nongeos_plugin.py", line 175, in + class GeoJSONPreview(GeoJSONView): + File "/home/pyenvs/spatial/local/lib/python2.7/site-packages/pyutilib/component/core/core.py", line 732, in __new__ + return PluginMeta.__new__(cls, name, bases, d) + File "/home/pyenvs/spatial/local/lib/python2.7/site-packages/pyutilib/component/core/core.py", line 659, in __new__ + raise PluginError("Plugin class %r does not implement an interface, and it has already been defined in environment '%r'." % (str(name), PluginGlobals.env().name)) + pyutilib.component.core.core.PluginError: Plugin class 'GeoJSONPreview' does not implement an interface, and it has already been defined in environment ''pca'' + +You have correctly installed +[ckanext-geoview](https://github.com/ckan/ckanext-geoview) but the +ckanext-spatial source code is outdated, with references to the view +plugins previously part of this extension. Pull the latest version of +the code and re-register the extension. With the virtualenv CKAN is +installed on activated, run: + + git pull + pip install -e . + +### When running the spatial harvesters + + File "xmlschema.pxi", line 102, in lxml.etree.XMLSchema.__init__ (src/lxml/lxml.etree.c:154475) + lxml.etree.XMLSchemaParseError: local list type: A type, derived by list or union, must have the simple ur-type definition as base type, not '{http://www.opengis.net/gml}doubleList'., line 1 + +The XSD validation used by the spatial harvesters requires libxml2 +version 2.9. + +With CKAN you would probably have installed an older version from your +distribution. (e.g. with `sudo apt-get install libxml2-dev`). You need +to find the SO files for the old version: + + $ find /usr -name "libxml2.so" + +For example, it may show it here: +`/usr/lib/x86_64-linux-gnu/libxml2.so`. The directory of the SO file is +used as a parameter to the `configure` next on. + +Download the libxml2 source: + + $ cd ~ + $ wget ftp://xmlsoft.org/libxml2/libxml2-2.9.0.tar.gz + +Unzip it: + + $ tar zxvf libxml2-2.9.0.tar.gz + $ cd libxml2-2.9.0/ + +Configure with the SO directory you found before: + + $ ./configure --libdir=/usr/lib/x86_64-linux-gnu + +Now make it and install it: + + $ make + $ sudo make install + +Now check the install by running xmllint: + + $ xmllint --version + xmllint: using libxml version 20900 + compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib diff --git a/doc/install.rst b/doc/install.rst deleted file mode 100644 index 2f6bd778..00000000 --- a/doc/install.rst +++ /dev/null @@ -1,179 +0,0 @@ -====================== -Installation and Setup -====================== - -Check the Troubleshooting_ section if you get errors at any stage. - -.. warning:: If you are looking for the geospatial preview plugins to render (eg GeoJSON - or WMS services), these are now located in ckanext-geoview_. They have a much simpler - installation, so you can skip all the following steps if you just want the previews. - -All commands assume an existing CKAN database named ``ckan_default``. - - -Install the extension ---------------------- - -.. note:: The package names and paths shown are the defaults on Ubuntu installs. - Adjust the package names and the paths if you are using a different platform. - -#. Install some packages needed by the extension dependencies:: - - sudo apt-get install python-dev libxml2-dev libxslt1-dev libgeos-c1 - -#. Activate your CKAN virtual environment, for example:: - - . /usr/lib/ckan/default/bin/activate - -#. Install the ckanext-spatial Python package into your virtual environment:: - - pip install -e "git+https://github.com/ckan/ckanext-spatial.git#egg=ckanext-spatial" - -#. Install the rest of Python modules required by the extension:: - - pip install -r /usr/lib/ckan/default/src/ckanext-spatial/requirements.txt - -#. Restart CKAN. For example if you've deployed CKAN with Apache on Ubuntu:: - - sudo service apache2 reload - -To use the :doc:`harvesters`, you will need to install and configure the -harvester extension: `ckanext-harvest`_. Follow the install instructions on -its documentation for details on how to set it up. - - -Configuration -------------- - - -Add the following plugins to the ``ckan.plugins`` directive in the -CKAN ini file:: - - ckan.plugins = spatial_metadata spatial_query - - -Troubleshooting ---------------- - -Here are some common problems you may find when installing or using the -extension: - -When upgrading the extension to a newer version -+++++++++++++++++++++++++++++++++++++++++++++++ - -ckan.plugins.core.PluginNotFoundException: geojson_view -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:: - - File "/home/pyenvs/spatial/src/ckan/ckan/plugins/core.py", line 149, in load - service = _get_service(plugin) - File "/home/pyenvs/spatial/src/ckan/ckan/plugins/core.py", line 256, in _get_service - raise PluginNotFoundException(plugin_name) - ckan.plugins.core.PluginNotFoundException: geojson_view - -Your CKAN instance is using the ``geojson_view`` (or ``geojson_preview``) plugin. This plugin has been -moved from ckanext-spatial to ckanext-geoview_. Please install ckanext-geoview following the instructions on the -README. - -TemplateNotFound: Template dataviewer/geojson.html cannot be found -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:: - - File '/home/pyenvs/spatial/src/ckan/ckan/lib/base.py', line 129 in render_template - template_path, template_type = render_.template_info(template_name) - File '/home/pyenvs/spatial/src/ckan/ckan/lib/render.py', line 51 in template_info - raise TemplateNotFound('Template %s cannot be found' % template_name) - TemplateNotFound: Template dataviewer/geojson.html cannot be found - -See the issue above for details. Install ckanext-geoview_ and additionally run the following on the -ckanext-spatial directory with your virtualenv activated:: - - python setup.py develop - - -ImportError: No module named nongeos_plugin -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:: - - File "/home/pyenvs/spatial/src/ckan/ckan/plugins/core.py", line 255, in _get_service - return plugin.load()(name=plugin_name) - File "/home/pyenvs/spatial/local/lib/python2.7/site-packages/pkg_resources.py", line 2147, in load - ['__name__']) - ImportError: No module named nongeos_plugin - -See the issue above for details. Install ckanext-geoview_ and additionally run the following on the -ckanext-spatial directory with your virtualenv activated:: - - python setup.py develop - - -Plugin class 'GeoJSONPreview' does not implement an interface -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:: - - File "/home/pyenvs/spatial/src/ckanext-spatial/ckanext/spatial/nongeos_plugin.py", line 175, in - class GeoJSONPreview(GeoJSONView): - File "/home/pyenvs/spatial/local/lib/python2.7/site-packages/pyutilib/component/core/core.py", line 732, in __new__ - return PluginMeta.__new__(cls, name, bases, d) - File "/home/pyenvs/spatial/local/lib/python2.7/site-packages/pyutilib/component/core/core.py", line 659, in __new__ - raise PluginError("Plugin class %r does not implement an interface, and it has already been defined in environment '%r'." % (str(name), PluginGlobals.env().name)) - pyutilib.component.core.core.PluginError: Plugin class 'GeoJSONPreview' does not implement an interface, and it has already been defined in environment ''pca'' - -You have correctly installed ckanext-geoview_ but the ckanext-spatial source code is outdated, with references -to the view plugins previously part of this extension. Pull the latest version of the code and re-register the -extension. With the virtualenv CKAN is installed on activated, run:: - - git pull - python setup.py develop - -When running the spatial harvesters -+++++++++++++++++++++++++++++++++++ - -:: - - File "xmlschema.pxi", line 102, in lxml.etree.XMLSchema.__init__ (src/lxml/lxml.etree.c:154475) - lxml.etree.XMLSchemaParseError: local list type: A type, derived by list or union, must have the simple ur-type definition as base type, not '{http://www.opengis.net/gml}doubleList'., line 1 - -The XSD validation used by the spatial harvesters requires libxml2 version 2.9. - -With CKAN you would probably have installed an older version from your -distribution. (e.g. with ``sudo apt-get install libxml2-dev``). You need to -find the SO files for the old version:: - - $ find /usr -name "libxml2.so" - -For example, it may show it here: ``/usr/lib/x86_64-linux-gnu/libxml2.so``. -The directory of the SO file is used as a parameter to the ``configure`` next -on. - -Download the libxml2 source:: - - $ cd ~ - $ wget ftp://xmlsoft.org/libxml2/libxml2-2.9.0.tar.gz - -Unzip it:: - - $ tar zxvf libxml2-2.9.0.tar.gz - $ cd libxml2-2.9.0/ - -Configure with the SO directory you found before:: - - $ ./configure --libdir=/usr/lib/x86_64-linux-gnu - -Now make it and install it:: - - $ make - $ sudo make install - -Now check the install by running xmllint:: - - $ xmllint --version - xmllint: using libxml version 20900 - compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1 FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug Zlib - -.. _ckanext-harvest: https://github.com/okfn/ckanext-harvest -.. _ckanext-geoview: https://github.com/ckan/ckanext-geoview diff --git a/doc/map-widgets.md b/doc/map-widgets.md new file mode 100644 index 00000000..c159ff51 --- /dev/null +++ b/doc/map-widgets.md @@ -0,0 +1,129 @@ +# Common base layers for Map Widgets + +To provide a consistent look and feel and avoiding code duplication, the +map widgets (at least the ones based on [Leaflet](http://leafletjs.com)) +can use a common function to create the map. The base layer that the map +will use can be configured via configuration options. + +![image](_static/base-map-stamen.png) + +## Configuring the base layer + +The map widgets use the +[Leaflet-providers](https://github.com/leaflet-extras/leaflet-providers) +library to make easy to choose the base tile layer that the map widgets +will use. You can use any of the supported providers, which are listed +in the [preview +page](http://leaflet-extras.github.io/leaflet-providers/preview/index.html). + +!!! Note + As of October 2023, most if not all of the tile providers require at + least some form of registration and / or domain registering. They also + have terms of use and will most likely require proper attribution (which + should be handled automatically for you when choosing a provider). + +If you haven't configured a map provider you will see the following +notice in the map widgets: + +![image](_static/no-map-provider.png) + +The main configuration option to manage the base layer used is +`ckanext.spatial.common_map.type`. The value of this setting should be +one of the provider names supported by Leaflet-providers, e.g. +`Stadia.StamenTerrain`, `Stadia`, `MapBox`, `Herev3.terrainDay`, +`Esri.WorldImagery`, `USGS.USImagery` etc. Note that these values are +**case-sensitive**. + +Any additional configuration options required by Leaflet-providers +should be set prefixed with `ckanext.spatial.common_map.`, for instance +to configure the Stamen Terrain map that was used in previous versions +of ckanext-spatial: + + # Stadia / Stamen Terrain + ckanext.spatial.common_map.type = Stadia.StamenTerrain + ckanext.spatial.common_map.apikey = + +To use MapBox tiles: + + # MapBox + ckanext.spatial.common_map.type = MapBox + ckanext.spatial.common_map.mapbox.id = + ckanext.spatial.common_map.mapbox.accessToken = + +### Custom layers + +You can use any tileset that follows the [XYZ +convention](http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames) +using the `custom` type: + + ckanext.spatial.common_map.type = custom + +You will need to define the tileset URL using +`ckanext.spatial.common_map.custom_url`. This follows the [Leaflet URL +template](http://leafletjs.com/reference.html#url-template) format (ie +{s} for subdomains if any, {z} for zoom and {x} {y} for tile +coordinates). Additionally you can use +`ckanext.spatial.common_map.subdomains` and +`ckanext.spatial.common_map.attribution` if needed (this one will also +work for Leaflet-provider layers if you want to tweak the default +attribution). + +For example: + + ckanext.spatial.common_map.type = custom + ckanext.spatial.common_map.custom_url = https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x} + ckanext.spatial.common_map.attribution = Tiles courtesy of the U.S. Geological Survey + +### Old Stamen tiles + +Previous versions of ckanext-spatial defaulted to using the +[Stamen](http://maps.stamen.com/) terrain tiles as they not require +registration. These were deprecated and stopped working on October 2023. +If you see this error displayed in your map widgets, you need to +configure an alternative provider using the methods described in the +sections above: + +![image](_static/stamen-map-provider-error.png) + +## For developers + +To pass the base map configuration options to the relevant Javascript +module that will initialize the map widget, use the +`h.get_common_map_config()` helper function. This is available when +loading the `spatial_metadata` plugin. If you don't want to require +this plugin, create a new helper function that points to it to avoid +duplicating the names, which CKAN won't allow (see for instance how the +GeoJSON preview plugin does it). + +The function will return a dictionary with all configuration options +that relate to the common base layer (that's all that start with +`ckanext.spatial.common_map.`) + +You will need to dump the dict as JSON on the `data-module-map_config` +attribute (see for instance the `dataset_map_base.html` and +`spatial_query.html` snippets): + + {% set map_config = h.get_common_map_config() %} +
+
+
+ +Once at the Javascript module level, all Leaflet based map widgets +should use the `ckan.commonLeafletMap` constructor to initialize the +map. It accepts the following parameters: + +- `container`: HTML element or id of the map container +- `mapConfig`: (Optional) CKAN config related to the common base layer +- `leafletMapOptions`: (Optional) Options to pass to the Leaflet Map + constructor +- `leafletBaseLayerOptions`: (Optional) Options to pass to the Leaflet + TileLayer constructor + +Most of the times you will want to do something like this for a sidebar +map: + + var map = ckan.commonLeafletMap('dataset-map-container', this.options.map_config, {attributionControl: false}); + +And this for a primary content map: + + var map = ckan.commonLeafletMap('map', this.options.map_config); diff --git a/doc/map-widgets.rst b/doc/map-widgets.rst deleted file mode 100644 index fc67d851..00000000 --- a/doc/map-widgets.rst +++ /dev/null @@ -1,135 +0,0 @@ -Common base layers for Map Widgets -================================== - -To provide a consistent look and feel and avoiding code duplication, the map -widgets (at least the ones based on `Leaflet`_) can use a common function to -create the map. The base layer that the map will use can be configured via -configuration options. - -.. image:: _static/base-map-stamen.png - -Configuring the base layer --------------------------- - -The map widgets use the `Leaflet-providers`_ library to make easy to choose the -base tile layer that the map widgets will use. You can use any of the supported -providers, which are listed in the `preview page`_. - -.. note:: As of October 2023, most if not all of the tile providers require at - least some form of registration and / or domain registering. They also have - terms of use and will most likely require proper attribution (which should be - handled automatically for you when choosing a provider). - -If you haven't configured a map provider you will see the following notice in the -map widgets: - -.. image:: _static/no-map-provider.png - -The main configuration option to manage the base layer used is -``ckanext.spatial.common_map.type``. The value of this setting should be one of the -provider names supported by Leaflet-providers, e.g. ``Stadia.StamenTerrain``, ``Stadia``, -``MapBox``, ``Herev3.terrainDay``, ``Esri.WorldImagery``, ``USGS.USImagery`` etc. Note -that these values are **case-sensitive**. - -Any additional configuration options required by Leaflet-providers should be set prefixed -with ``ckanext.spatial.common_map.``, for instance to configure the Stamen Terrain map that -was used in previous versions of ckanext-spatial:: - - # Stadia / Stamen Terrain - ckanext.spatial.common_map.type = Stadia.StamenTerrain - ckanext.spatial.common_map.apikey = - -To use MapBox tiles:: - - # MapBox - ckanext.spatial.common_map.type = MapBox - ckanext.spatial.common_map.mapbox.id = - ckanext.spatial.common_map.mapbox.accessToken = - - -Custom layers -+++++++++++++ - -You can use any tileset that follows the `XYZ convention`_ using the ``custom`` -type:: - - ckanext.spatial.common_map.type = custom - -You will need to define the tileset URL using -``ckanext.spatial.common_map.custom_url``. This follows the `Leaflet URL -template`_ format (ie {s} for subdomains if any, {z} for zoom and {x} {y} for -tile coordinates). Additionally you can use -``ckanext.spatial.common_map.subdomains`` and -``ckanext.spatial.common_map.attribution`` if needed (this one will also work -for Leaflet-provider layers if you want to tweak the default attribution). - -For example:: - - ckanext.spatial.common_map.type = custom - ckanext.spatial.common_map.custom_url = https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x} - ckanext.spatial.common_map.attribution = Tiles courtesy of the U.S. Geological Survey - -Old Stamen tiles -++++++++++++++++ - -Previous versions of ckanext-spatial defaulted to using the `Stamen`_ terrain tiles as they -not require registration. These were deprecated and stopped working on October 2023. If you see -this error displayed in your map widgets, you need to configure an alternative provider using the -methods described in the sections above: - -.. image:: _static/stamen-map-provider-error.png - - - -For developers --------------- - -To pass the base map configuration options to the relevant Javascript module -that will initialize the map widget, use the ``h.get_common_map_config()`` -helper function. This is available when loading the ``spatial_metadata`` -plugin. If you don't want to require this plugin, create a new helper function -that points to it to avoid duplicating the names, which CKAN won't allow (see -for instance how the GeoJSON preview plugin does it). - -The function will return a dictionary with all configuration options that -relate to the common base layer (that's all that start with -``ckanext.spatial.common_map.``) - -You will need to dump the dict as JSON on the ``data-module-map_config`` -attribute (see for instance the ``dataset_map_base.html`` and -``spatial_query.html`` snippets):: - - {% set map_config = h.get_common_map_config() %} -
-
-
- -Once at the Javascript module level, all Leaflet based map widgets should use -the ``ckan.commonLeafletMap`` constructor to initialize the map. It accepts the -following parameters: - -* ``container``: HTML element or id of the map container -* ``mapConfig``: (Optional) CKAN config related to the common base layer -* ``leafletMapOptions``: (Optional) Options to pass to the Leaflet Map constructor -* ``leafletBaseLayerOptions``: (Optional) Options to pass to the Leaflet TileLayer - constructor - -Most of the times you will want to do something like this for a sidebar map:: - - var map = ckan.commonLeafletMap('dataset-map-container', this.options.map_config, {attributionControl: false}); - -And this for a primary content map:: - - var map = ckan.commonLeafletMap('map', this.options.map_config); - - -.. _Leaflet: http://leafletjs.com -.. _OpenStreetMap: http://openstreetmap.org -.. _`XYZ convention`: http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames -.. _MapBox: http://www.mapbox.com/ -.. _MapBox Studio: https://www.mapbox.com/mapbox-studio -.. _here: http://www.mapbox.com/developers/api-overview/ -.. _`Leaflet URL template`: http://leafletjs.com/reference.html#url-template -.. _Stamen: http://maps.stamen.com/ -.. _`Leaflet-providers`: https://github.com/leaflet-extras/leaflet-providers -.. _`preview page`: http://leaflet-extras.github.io/leaflet-providers/preview/index.html diff --git a/doc/previews.md b/doc/previews.md new file mode 100644 index 00000000..a15e132f --- /dev/null +++ b/doc/previews.md @@ -0,0 +1,8 @@ +# Previews for Spatial Formats + +!!! Note + The view plugins for rendering spatial formats can be found in + [ckanext-geoview](https://github.com/ckan/ckanext-geoview), which + contains view plugins based on [OpenLayers](http://openlayers.org) and + [Leaflet](http://leafletjs.org) to display several geospatial files and + services in CKAN. diff --git a/doc/previews.rst b/doc/previews.rst deleted file mode 100644 index 274e57b0..00000000 --- a/doc/previews.rst +++ /dev/null @@ -1,12 +0,0 @@ -============================ -Previews for Spatial Formats -============================ - -.. note:: The view plugins for rendering spatial formats have - been moved to ckanext-geoview_, which contains view plugins - based on OpenLayers_ and Leaflet_ to display several geospatial files - and services in CKAN. - -.. _Leaflet: http://leafletjs.org -.. _OpenLayers: http://openlayers.org -.. _ckanext-geoview: https://github.com/ckan/ckanext-geoview diff --git a/doc/requirements.txt b/doc/requirements.txt new file mode 100644 index 00000000..4c8f017d --- /dev/null +++ b/doc/requirements.txt @@ -0,0 +1 @@ +mkdocs-material diff --git a/doc/spatial-search.md b/doc/spatial-search.md new file mode 100644 index 00000000..f3d76fcc --- /dev/null +++ b/doc/spatial-search.md @@ -0,0 +1,297 @@ +# Spatial Search + +The spatial extension allows to index datasets with spatial information +so they can be filtered via a spatial search query. This includes both +via the web interface (see the [Spatial Search +Widget](#spatial-search-widget)) or via the [action +API](https://docs.ckan.org/en/latest/api/), e.g.: + + http://localhost:5000/api/3/action/package_search?q=Pollution&ext_bbox=-7.535093,49.208494,3.890688,57.372349 + +The `ext_bbox` parameter must be provided in the form +`ext_bbox={minx},{miny},{maxx},{maxy}` + +## Setup + +To enable the spatial search you need to add the `spatial_query` plugin +to your ini file. This plugin in turn requires the `spatial_metadata` +plugin, eg: + + ckan.plugins = ... spatial_metadata spatial_query + +To define which backend to use for the spatial search use the following +configuration option (see [Choosing a backend for the spatial +search](#choosing-a-backend-for-the-spatial-search)): + + ckanext.spatial.search_backend = solr-bbox + +## Geo-Indexing your datasets + +Regardless of the backend that you are using, in order to make a dataset +searchable by location, it must have a the location information (a +geometry), indexed in Solr. You can provide this information in two +ways. + +### The `spatial` extra field + +The easiest way to get your geometries indexed is to use an extra field +named `spatial`. The value of this extra should be a valid +[GeoJSON](http://geojson.org) geometry, for example: + + { + "type":"Polygon", + "coordinates":[[[2.05827, 49.8625],[2.05827, 55.7447], [-6.41736, 55.7447], [-6.41736, 49.8625], [2.05827, 49.8625]]] + } + +or: + + { + "type": "Point", + "coordinates": [-3.145,53.078] + } + +Every time a dataset is created, updated or deleted, the extension will +index the information stored in the `spatial` in Solr, so it can be +reflected on spatial searches. + +If you already have datasets when you enable Spatial Search then you'll +need to [rebuild the search +index](https://docs.ckan.org/en/latest/maintaining/cli.html?#search-index-rebuild-search-index). + +### Custom indexing logic + +You might not want to use the `spatial` extra field. Perhaps you don't +want to store the geometries in the dataset metadata but prefer to do so +in a separate table, or you simply want to perform a different +processing on the geometries before indexing. + +In this case you need to implement the `before_dataset_index()` method +of the +[IPackageController](https://docs.ckan.org/en/latest/extensions/plugin-interfaces.html#ckan.plugins.interfaces.IPackageController.before_dataset_index) +interface: + +```python +def before_dataset_index(self, dataset_dict): + + # When using the default `solr-bbox` backend (based on bounding boxes), you need to + # include the following fields in the returned dataset_dict: + + dataset_dict["minx"] = minx + dataset_dict["maxx"] = maxx + dataset_dict["miny"] = miny + dataset_dict["maxy"] = maxy + + # When using the `solr-spatial-field` backend, you need to include the `spatial_geom` + # field in the returned dataset_dict. This should be a valid geometry in WKT format. + # Shapely can help you get the WKT representation of your gemetry if you have it in GeoJSON: + + shape = shapely.geometry.shape(geometry) + wkt = shape.wkt + + dataset_dict["spatial_geom"] = wkt + + # Don't forget to actually return the dict! + + return dataset_dict +``` + +Some things to keep in mind: + +- Remember, you only need to provide one field, either `spatial_bbox` + or `spatial_geom`, depending on the backend chosen. + +- All indexed geometries should fall within the -180, -90, 180, 90 + bounds. If you have polygons crossing the antimeridian (i.e. with + longituded lower than -180 or bigger than 180) you'll have to split + them across the antimeridian. + +- Check the default implementation of `before_dataset_index()` in + [ckanext/spatial/plugins/\_\_init\_\_.py](https://github.com/ckan/ckanext-spatial/blob/master/ckanext/spatial/plugin/__init__.py) + for extra useful checks and validations. + +- If you want to store the geometry in the `spatial` field but don't + want to apply the default automatic indexing logic applied by + ckanext-spatial just remove the field from the dict (this won't + remove it from the dataset metadata, just from the indexed data): + + ```python + def before_dataset_search(self, dataset_dict): + + dataset_dict.pop("spatial", None) + + return dataset_dict + ``` + +### Choosing a backend for the spatial search + +Ckanext-spatial uses Solr to power the spatial search. The current +implementation is tested on Solr 9, which is the supported version, +although it might work on previous Solr versions. + +!!! Note + The are official [Docker images for + Solr](https://github.com/ckan/ckan-solr) that have all the configuration + needed to perform spatial searches (look for the ones with a `-spatial` + suffix). This is the easiest way to get started but if you need to + customize Solr yourself see below for the modifications needed. + +There are different backends supported for the spatial search, it is +important to understand their differences and the necessary setup +required when choosing which one to use. To configure the search backend +use the following configuration option: + + ckanext.spatial.search_backend = solr-bbox | solr-spatial-field + +The following table summarizes the different spatial search backends: + + | Backend | Supported geometries indexed in Solr | Solr setup needed | + |-----------------------|- ------------------------------- ----|---------------------| + | `solr-bbox` (default) | Bounding Box, Polygon (extents only) | Custom fields | + | `solr-spatial-field` | Bounding Box, Point and Polygon | Custom field + JTS | + +!!! Note + The default `solr-bbox` search backend was previously known as `solr`. + Please update your configuration if using this version as it will be + removed in the future. + +The `solr-bbox` backend is probably a good starting point. Here are more +details about the available options (again, you don't need to modify +Solr if you are using one of the spatially enabled official Docker +images): + +- `solr-bbox`: + This option always indexes just the extent of the provided + geometries, whether if it's an actual bounding box or not. It + supports spatial sorting of the returned results (based on the + closeness of their bounding box to the query bounding box). It + uses standard Solr float fields so you just need to add the + following to your Solr schema: + ```xml + + + + + + + + ``` +- `solr-spatial-field`: + This option uses the [RPT](https://solr.apache.org/guide/8_11/spatial-search.html#rpt) + Solr field, which allows to index points, rectangles and more + complex geometries like polygons. This requires the install of + the [JTS](https://github.com/locationtech/jts) library. See the + linked Solr documentation for details on this. Note that it does + not support spatial sorting of the returned results. You will + need to add the following field type and field to your Solr + schema file to enable it : + ```xml + + + + + + + + + + ``` + By default, the `solr-sptatial-field` backend uses the following + query. This can be customized by setting the + `ckanext.spatial.solr_query` configuration option, but note that + all placeholders must be included: + ``` + {{!field f=spatial_geom}}Intersects(ENVELOPE({minx}, {maxx}, {maxy}, {miny})) + ``` + +!!! Note + The old `postgis` search backend is no longer supported. You should + migrate to one of the other backends instead. + +## Spatial Search Widget + +![image](_static/spatial-search-widget.png) + +The extension provides a snippet to add a map widget to the search form, +which allows filtering results by an area of interest. + +To add the map widget to the sidebar of the search page, add the +following block to the dataset search page template +(`myproj/ckanext/myproj/templates/package/search.html`). If your custom +theme is simply extending the CKAN default theme, you will need to add +`{% ckan_extends %}` to the start of your custom search.html, then +continue with this: + + {% block secondary_content %} + + {% snippet "spatial/snippets/spatial_query.html" %} + + {% endblock %} + +By default the map widget will show the whole world. If you want to set +up a different default extent, you can pass an extra `default_extent` to +the snippet, either with a pair of coordinates like this: + + {% snippet "spatial/snippets/spatial_query.html", default_extent="[[15.62, + -139.21], [64.92, -61.87]]" %} + +or with a GeoJSON object describing a bounding box (note the escaped +quotes): + + {% snippet "spatial/snippets/spatial_query.html", default_extent="{ \"type\": + \"Polygon\", \"coordinates\": [[[74.89, 29.39],[74.89, 38.45], [60.50, + 38.45], [60.50, 29.39], [74.89, 29.39]]]}" %} + +You need to load the `spatial_metadata` and `spatial_query` plugins to +use this snippet. + +## Dataset Extent Map + +![image](_static/dataset-extent-map.png) + +Using the snippets provided, if datasets contain a `spatial` extra like +the one described in the previous section, a map will be shown on the +dataset details page. + +There are snippets already created to load the map on the left sidebar +or in the main body of the dataset details page, but these can be easily +modified to suit your project needs + +To add a map to the sidebar, add the following block to the dataset page +template (eg +`ckanext-myproj/ckanext/myproj/templates/package/read_base.html`). If +your custom theme is simply extending the CKAN default theme, you will +need to add `{% ckan_extends %}` to the start of your custom read.html, +then continue with this: + + {% block secondary_content %} + {{ super() }} + + {% set dataset_extent = h.get_pkg_dict_extra(c.pkg_dict, 'spatial', '') %} + {% if dataset_extent %} + {% snippet "spatial/snippets/dataset_map_sidebar.html", extent=dataset_extent %} + {% endif %} + + {% endblock %} + +For adding the map to the main body, add this to the main dataset page +template (eg +`ckanext-myproj/ckanext/myproj/templates/package/read.html`): + + {% block primary_content_inner %} + + {{ super() }} + + {% set dataset_extent = h.get_pkg_dict_extra(c.pkg_dict, 'spatial', '') %} + {% if dataset_extent %} + {% snippet "spatial/snippets/dataset_map.html", extent=dataset_extent %} + {% endif %} + + {% endblock %} + +You need to load the `spatial_metadata` plugin to use these snippets. diff --git a/doc/spatial-search.rst b/doc/spatial-search.rst deleted file mode 100644 index a64fec78..00000000 --- a/doc/spatial-search.rst +++ /dev/null @@ -1,264 +0,0 @@ -============== -Spatial Search -============== - -The spatial extension allows to index datasets with spatial information so they -can be filtered via a spatial search query. This includes both via the web -interface (see the `Spatial Search Widget`_) or via the `action API`_, e.g.:: - - http://localhost:5000/api/action/package_search?q=Pollution&ext_bbox=-7.535093,49.208494,3.890688,57.372349 - -The ``ext_bbox`` parameter must be provided in the form ``ext_bbox={minx},{miny},{maxx},{maxy}`` - - -Setup ------ - -To enable the spatial search you need to add the ``spatial_query`` plugin to -your ini file. This plugin in turn requires the ``spatial_metadata`` plugin, eg:: - - ckan.plugins = ... spatial_metadata spatial_query - -To define which backend to use for the spatial search use the following -configuration option (see `Choosing a backend for the spatial search`_):: - - ckanext.spatial.search_backend = solr-bbox - - -Geo-Indexing your datasets --------------------------- - -Regardless of the backend that you are using, in order to make a dataset -searchable by location, it must have a the location information (a geometry), indexed in -Solr. You can provide this information in two ways. - -The ``spatial`` extra field -+++++++++++++++++++++++++++ - -The easiest way to get your geometries indexed is to use an extra field named ``spatial``. -The value of this extra should be a valid GeoJSON_ geometry, for example:: - - { - "type":"Polygon", - "coordinates":[[[2.05827, 49.8625],[2.05827, 55.7447], [-6.41736, 55.7447], [-6.41736, 49.8625], [2.05827, 49.8625]]] - } - -or:: - - { - "type": "Point", - "coordinates": [-3.145,53.078] - } - - -Every time a dataset is created, updated or deleted, the extension will -index the information stored in the ``spatial`` in Solr, so it can be reflected on spatial searches. - -If you already have datasets when you enable Spatial Search then you'll need to -`rebuild the search index `_. - - -Custom indexing logic -+++++++++++++++++++++ - -You might not want to use the ``spatial`` extra field. Perhaps you don't want to store the geometries -in the dataset metadata but prefer to do so in a separate table, or you simply want to perform a different -processing on the geometries before indexing. - -In this case you need to implement the ``before_dataset_index()`` method of the `IPackageController `_ interface:: - - def before_dataset_index(self, dataset_dict): - - # When using the default `solr-bbox` backend (based on bounding boxes), you need to - # include the following fields in the returned dataset_dict: - - dataset_dict["minx"] = minx - dataset_dict["maxx"] = maxx - dataset_dict["miny"] = miny - dataset_dict["maxy"] = maxy - - # When using the `solr-spatial-field` backend, you need to include the `spatial_geom` - # field in the returned dataset_dict. This should be a valid geometry in WKT format. - # Shapely can help you get the WKT representation of your gemetry if you have it in GeoJSON: - - shape = shapely.geometry.shape(geometry) - wkt = shape.wkt - - dataset_dict["spatial_geom"] = wkt - - # Don't forget to actually return the dict! - - return dataset_dict - -Some things to keep in mind: - -* Remember, you only need to provide one field, either ``spatial_bbox`` or ``spatial_geom``, depending on - the backend chosen. -* All indexed geometries should fall within the -180, -90, 180, 90 bounds. If you have polygons crossing the antimeridian (i.e. with longituded lower than -180 or bigger than 180) you'll have to split them across the antimeridian. -* Check the default implementation of ``before_dataset_index()`` in `ckanext/spatial/plugins/__init__.py `_ for extra useful checks and validations. -* If you want to store the geometry in the ``spatial`` field but don't want to apply the default automatic indexing logic applied by ckanext-spatial just remove the field from the dict (this won't remove it from the dataset metadata, just from the indexed data):: - - def before_dataset_search(self, dataset_dict): - - dataset_dict.pop("spatial", None) - - return dataset_dict - -Choosing a backend for the spatial search -+++++++++++++++++++++++++++++++++++++++++ - -Ckanext-spatial uses Solr to power the spatial search. The current implementation is tested on Solr 8, which is the supported version, although it might work on previous Solr versions. - -.. note:: The are official `Docker images for Solr `_ that have all the configuration needed to perform spatial searches (look for the ones with a ``-spatial`` suffix). This is the easiest way to get started but if you need to customize Solr yourself see below for the modifications needed. - -There are different backends supported for the spatial search, it is important -to understand their differences and the necessary setup required when choosing -which one to use. To configure the search backend use the following configuration option:: - - ckanext.spatial.search_backend = solr-bbox | solr-spatial-field - -The following table summarizes the different spatial search backends: - -+-------------------------+--------------------------------------+--------------------+ -| Backend | Supported geometries indexed in Solr | Solr setup needed | -+=========================+======================================+====================+ -| ``solr-bbox`` (default) | Bounding Box, Polygon (extents only) | Custom fields | -+-------------------------+--------------------------------------+--------------------+ -| ``solr-spatial-field`` | Bounding Box, Point and Polygon | Custom field + JTS | -+-------------------------+--------------------------------------+--------------------+ - -.. note:: The default ``solr-bbox`` search backend was previously known as ``solr``. Please update - your configuration if using this version as it will be removed in the future. - - -The ``solr-bbox`` backend is probably a good starting point. Here are more -details about the available options (again, you don't need to modify Solr if you are using one of the spatially enabled official Docker images): - -* ``solr-bbox`` - This option always indexes just the extent of the provided geometries, whether if it's an - actual bounding box or not. It supports spatial sorting of the returned results (based on the closeness of their bounding box to the query bounding box). It uses standard Solr float fields so you just need to add the following to your Solr schema:: - - - - - - - - - -* ``solr-spatial-field`` - This option uses the `RPT `_ Solr field, which allows - to index points, rectangles and more complex geometries like polygons. This requires the install of the `JTS`_ library. See the linked Solr documentation for details on this. Note that it does not support spatial sorting of the returned results. - You will need to add the following field type and field to your Solr - schema file to enable it :: - - - - - - - - - - - - By default, the ``solr-sptatial-field`` backend uses the following query. This can be customized by setting the ``ckanext.spatial.solr_query`` configuration option, but note that all placeholders must be included:: - - "{{!field f=spatial_geom}}Intersects(ENVELOPE({minx}, {maxx}, {maxy}, {miny}))" - -.. note:: The old ``postgis`` search backend is no longer supported. You should migrate to one of the other backends instead. - - - -Spatial Search Widget ---------------------- - - -.. image:: _static/spatial-search-widget.png - -The extension provides a snippet to add a map widget to the search form, which -allows filtering results by an area of interest. - -To add the map widget to the sidebar of the search page, add the following -block to the dataset search page template -(``myproj/ckanext/myproj/templates/package/search.html``). If your custom -theme is simply extending the CKAN default theme, you will need to add ``{% ckan_extends %}`` -to the start of your custom search.html, then continue with this:: - - {% block secondary_content %} - - {% snippet "spatial/snippets/spatial_query.html" %} - - {% endblock %} - -By default the map widget will show the whole world. If you want to set up a -different default extent, you can pass an extra ``default_extent`` to the -snippet, either with a pair of coordinates like this:: - - {% snippet "spatial/snippets/spatial_query.html", default_extent="[[15.62, - -139.21], [64.92, -61.87]]" %} - -or with a GeoJSON object describing a bounding box (note the escaped quotes):: - - {% snippet "spatial/snippets/spatial_query.html", default_extent="{ \"type\": - \"Polygon\", \"coordinates\": [[[74.89, 29.39],[74.89, 38.45], [60.50, - 38.45], [60.50, 29.39], [74.89, 29.39]]]}" %} - -You need to load the ``spatial_metadata`` and ``spatial_query`` plugins to use this -snippet. - - - -Dataset Extent Map ------------------- - -.. image:: _static/dataset-extent-map.png - -Using the snippets provided, if datasets contain a ``spatial`` extra like the -one described in the previous section, a map will be shown on the dataset -details page. - -There are snippets already created to load the map on the left sidebar or in -the main body of the dataset details page, but these can be easily modified to -suit your project needs - -To add a map to the sidebar, add the following block to the dataset page template (eg -``ckanext-myproj/ckanext/myproj/templates/package/read_base.html``). If your custom -theme is simply extending the CKAN default theme, you will need to add ``{% ckan_extends %}`` -to the start of your custom read.html, then continue with this:: - - {% block secondary_content %} - {{ super() }} - - {% set dataset_extent = h.get_pkg_dict_extra(c.pkg_dict, 'spatial', '') %} - {% if dataset_extent %} - {% snippet "spatial/snippets/dataset_map_sidebar.html", extent=dataset_extent %} - {% endif %} - - {% endblock %} - -For adding the map to the main body, add this to the main dataset page template (eg -``ckanext-myproj/ckanext/myproj/templates/package/read.html``):: - - {% block primary_content_inner %} - - {{ super() }} - - {% set dataset_extent = h.get_pkg_dict_extra(c.pkg_dict, 'spatial', '') %} - {% if dataset_extent %} - {% snippet "spatial/snippets/dataset_map.html", extent=dataset_extent %} - {% endif %} - - {% endblock %} - -You need to load the ``spatial_metadata`` plugin to use these snippets. - -.. _action API: http://docs.ckan.org/en/latest/apiv3.html -.. _JTS: https://github.com/locationtech/jts -.. _GeoJSON: http://geojson.org diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..f2eaf75d --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,75 @@ +site_name: ckanext-spatial +#site_url: https://docs.ckan.org/projects/ckanext-spatial +site_url: http://localhost:8000 + +site_description: >- + The documentation of ckanext-spatial, a CKAN extension that + improves CKAN geospatial capabilities. + + +repo_name: ckan/ckanext-spatial +repo_url: https://github.com/ckan/ckanext-spatial + +docs_dir: doc + +theme: + name: material + palette: + + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + scheme: ckan + toggle: + icon: material/toggle-switch + name: Switch to dark mode + + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + toggle: + icon: material/toggle-switch-off + name: Switch to light mode + + logo: _assets/logo.png + favicon: _assets/ckan.ico + features: + - navigation.expand + - navigation.footer + - navigation.instant + - navigation.instant.progress + - search.suggest + - search.highlight + - toc.integrate + - content.code.copy + +plugins: + - search + +markdown_extensions: + - toc: + permalink: true + - admonition + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - pymdownx.snippets + + +extra_css: + - _css/extra.css + +nav: + - Home: 'index.md' + - Installation and setup: 'install.md' + - Spatial search: 'spatial-search.md' + - Spatial harvesters: 'harvesters.md' + - Other features: + - CSW: 'csw.md' + - Previews of spatial formats: 'previews.md' + - Common base layer for map widgets: 'map-widgets.md' + - CHANGELOG: 'changelog.md' From 766ee6bb01363867759bd6365d8f84818f56e372 Mon Sep 17 00:00:00 2001 From: amercader Date: Fri, 8 Nov 2024 13:36:51 +0100 Subject: [PATCH 4/5] Fix reqs path --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 98db1d0a..d93a3018 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -18,4 +18,4 @@ formats: all python: install: - - requirements: docs/requirements.txt + - requirements: doc/requirements.txt From c68bd4f6b4c37cd78fed7a73f3567946b6c8e969 Mon Sep 17 00:00:00 2001 From: amercader Date: Fri, 8 Nov 2024 13:42:09 +0100 Subject: [PATCH 5/5] Bump version to 2.2.0 --- ckanext/spatial/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ckanext/spatial/__init__.py b/ckanext/spatial/__init__.py index 052c0bc3..742b3bbe 100644 --- a/ckanext/spatial/__init__.py +++ b/ckanext/spatial/__init__.py @@ -6,4 +6,4 @@ import pkgutil __path__ = pkgutil.extend_path(__path__, __name__) -__version__ = "2.1.1" +__version__ = "2.2.0"
- -
- -

An Open Knowledge project.

- - - -

- Source - — - Issues - — - Twitter @CKANProject -

- -