跳转到主要内容

RDFLib中将GeoSPARQL DGGS函数实现为SPARQL扩展

项目描述

RDFlib GeoSPARQL 函数用于DGGS

此库为以GeoSPARQL 1.1 简单特征关系族表示的几何形状提供了对DGGS 文本的支持。目前,支持rHEALPix DGGS 网格。

安装

从Python包索引,PyPi: https://pypi.ac.cn/project/geosparql-dggs/
pip安装geosparql-dggs

此包依赖于RDFlib以支持对图的函数使用。这些函数本身依赖于rHEAL-sf 库,该库又依赖于rHEAL-geo 库以提供表示DGGS单元和单元集合的基本类。

使用

这些函数在RDFlib Python中的文件 gsdggs/sf_functions.py 中实现,并导入到 gsdggs/__init__.py 中,并在那里作为具有其IRI的SPARQL扩展函数注册。

这意味着它们可以像这样使用(完整工作脚本)

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']}")

上面的脚本输出

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

这些函数也可以通过直接从 _source 导入(不使用RDFLib)来直接使用

from _source import sfEquals

sfEquals("R1", "R1")

上面的脚本输出

True

函数定义

在嵌套正方形DGGS网格(如rHEALPix网格)的上下文中,Simple Feature关系已被解释如下。

  • dggs:sfEqual: 如果两个单元格集具有相同的标识符,则它们相等。
  • dggs:sfWithin: 如果将集合A的单元格添加到集合B,结果得到与B相等的单元格集,其中A不等于B,则集合A(A)包含在集合B(B)内。
  • dggs:sfContains: 如果将集合A的单元格添加到集合B,结果得到与A相等的单元格集,其中A不等于B,则集合A(A)包含集合B(B)。
  • dggs:sfIntersects: 如果集合A(A)和集合B(B)共享任意两个单元格,或者A中的任意一个单元格是B中单元格的父或子,或者A或B中的任意一个单元格接触,则集合A(A)与集合B(B)相交。
  • dggs:sfTouches: 如果集合A(A)和集合B(B)在边或顶点处相遇,则集合A(A)接触集合B(B)。
  • dggs:sfDisjoint: 如果集合A(A)和集合B(B)不共享任意两个单元格,没有A中的单元格是B中单元格的父或子,并且A和B中的单元格没有接触,则集合A(A)与集合B(B)不相交。
  • dggs:sfOverlaps: 如果将集合A(A)的单元格添加到集合B(B),结果得到的单元格集与A和B都不同,并且A和B不是不相交且不接触的,则集合A(A)与集合B(B)重叠。

测试

所有测试都位于tests/目录中,并使用pytest实现。

每个函数都有单独的测试,还有针对支持Python类(单元格和单元格集)的更细粒度的测试,以及不使用RDF应用函数的测试。

贡献

通过GitHub,问题 & Pull Requests

许可证

此代码根据LICENSE(与rdflib使用的相同许可证)以BSD 3条款许可证授权。

引用

@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}
}

联系

创建者 & 维护者
David Habgood
应用架构师
SURROUND Australia Pty Ltd
david.habgood@surroundaustrlaia.com

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

项目细节


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

geosparql-dggs-0.2.tar.gz (5.2 kB 查看哈希值)

上传时间

构建分布

geosparql_dggs-0.2-py3-none-any.whl (5.5 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面