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
项目细节
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
geosparql-dggs-0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0ffb5dd0d2c66854ce264b64562eb990278d7bf7e715853001b05f7ecd4b97b3 |
|
MD5 | d28245e5bb19885fc86f36666116e0ae |
|
BLAKE2b-256 | d0737c3991c9e57682a15f49f65555f00fc007fa20fa2121afac4fc57c641894 |
geosparql_dggs-0.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 297eedc399711c5c307b612bcdc4f55ead86ee7e3a5e486976725218cdd8d773 |
|
MD5 | d946b42258ed8e109994fce49bf30f1f |
|
BLAKE2b-256 | 352e530337caad93d2c5919db93fcff6481756a97dfd2c5dd990550cce35b433 |