Skip to main content

GeoSPARQL DGGS functions implemented as SPARQL extension in RDFLib

Project description

RDFlib GeoSPARQL Functions for DGGS

This library provides support for the GeoSPARQL 1.1 Simple Features Relation Family for geometries expressed as DGGS Literals. Currently, rHEALPix DGGS Grids are supported.

Installation

From the python package index, PyPi: https://pypi.org/project/geosparql-dggs/
pip install geosparql-dggs

This package depends on to support the functions' use against graphs RDFlib. The functions themselves depend on the rHEAL-sf library, which in turn depends on the rHEAL-geo library for the base classes which represent DGGS Cells and collections of Cells.

Use

These functions are implemented in RDFlib Python in the file gsdggs/sf_functions.py and are imported into gsdggs/__init__.py and registered there in RDFlib as SPARQL extension functions with their IRIs.

This means they can be used like this (full working script):

from rdflib import Literal, Graph, Namespace, URIRef
from gsdggs import DGGS

GEO = Namespace("http://www.opengis.net/ont/geosparql#")

# Define the DGGS Geometries
g = Graph()
geom_a = URIRef('https://geom-a')
geom_b = URIRef('https://geom-b')
geom_c = URIRef('https://geom-c')
g.add((geom_a, GEO.hasGeometry, Literal('CELLLIST ((R0 R10 R13 R16 R30 R31 R32 R40))')))
g.add((geom_b, GEO.hasGeometry, Literal('CELLLIST ((R06 R07 R30 R31))')))
g.add((geom_c, GEO.hasGeometry, Literal('CELLLIST ((R11 R12 R14 R15))')))

q = """
    PREFIX geo: <http://www.opengis.net/ont/geosparql#>
    PREFIX dggs: <https://placeholder.com/dggsfuncs/>
    SELECT ?a ?b 
        {?a geo:hasGeometry ?a_geom .
         ?b geo:hasGeometry ?b_geom .
         FILTER dggs:sfWithin(?a_geom, ?b_geom)
    }"""
for r in g.query(q):
    print(f"{r['a']} is within {r['b']}")

The above stript outputs:

https://geom-b is within https://geom-a

The functions can also be used directly (without RDFLib) by direct import from _source, for example:

from _source import sfEquals

sfEquals("R1", "R1")

The above stript outputs:

True

Function Definitions

The Simple Feature relations have been interpreted in the following way for the context of a nested square DGGS grid (such as rHEALPix grids).

  • dggs:sfEqual: Two sets of cells are equal if they have the same identifier.
  • dggs:sfWithin: One set of cells (A) is within some other set of cells (B) if the addition of A's cells to B results in a set of cells equal to B, where A is not equal to B.
  • dggs:sfContains: One set of cells (A) is contains some other set of cells (B) if the addition of A's cells to B results in a set of cells equal to A, where A is not equal to B.
  • dggs:sfIntersects: One set of cells (A) intersects some other set of cells (B) where they share any two cells, or any cell in A is the parent or child of a cell in B, or any cell in A or B touches.
  • dggs:sfTouches: One set of cells (A) touches some other set of cells (B) where the cells meet at an edge, or vertex.
  • dggs:sfDisjoint: One set of cells (A) is disjoint with some other set of cells (B) where they do not share any two cells, no cell in A is the parent or child of a cell in B, and no cells in A and B touch.
  • dggs:sfOverlaps: One set of cells (A) overlaps some other set of cells (B) where the addition of A's cells to B results in a set of cells different from A and B, and A and B are not disjoint and do not touch.

Testing

All tests are in tests/ and implemented using pytest.

There are individual tests for each function, along with more granular tests for supporting Python classes (Cells and CellCollections), as well as application of the functions without RDF.

Contributing

Via GitHub, Issues & Pull Requests:

License

This code is licensed with the BSD 3-clause license as per LICENSE which is the same license as used for rdflib.

Citation

@software{https://github.com/rdflib/geosparql-dggs,
  author = {{David Habgood}},
  title = {RDFlib GeoSPARQL Functions for DGGS},
  version = {0.0.1},
  date = {2021},
  url = {https://github.com/rdflib/geosparql-dggs}
}

Contact

Creator & maintainer:
David Habgood
Application Architect
SURROUND Australia Pty Ltd
david.habgood@surroundaustrlaia.com

https://orcid.org/0000-0002-3322-1868

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

geosparql-dggs-0.2.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

geosparql_dggs-0.2-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file geosparql-dggs-0.2.tar.gz.

File metadata

  • Download URL: geosparql-dggs-0.2.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for geosparql-dggs-0.2.tar.gz
Algorithm Hash digest
SHA256 0ffb5dd0d2c66854ce264b64562eb990278d7bf7e715853001b05f7ecd4b97b3
MD5 d28245e5bb19885fc86f36666116e0ae
BLAKE2b-256 d0737c3991c9e57682a15f49f65555f00fc007fa20fa2121afac4fc57c641894

See more details on using hashes here.

File details

Details for the file geosparql_dggs-0.2-py3-none-any.whl.

File metadata

  • Download URL: geosparql_dggs-0.2-py3-none-any.whl
  • Upload date:
  • Size: 5.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for geosparql_dggs-0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 297eedc399711c5c307b612bcdc4f55ead86ee7e3a5e486976725218cdd8d773
MD5 d946b42258ed8e109994fce49bf30f1f
BLAKE2b-256 352e530337caad93d2c5919db93fcff6481756a97dfd2c5dd990550cce35b433

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page