如何从GeoSPARQL使用geof:distance函数
我创建了一个小型本体,其中有一个名为node的类。它具有与其关联的数据属性如何从GeoSPARQL使用geof:distance函数,sparql,openstreetmap,geosparql,Sparql,Openstreetmap,Geosparql,我创建了一个小型本体,其中有一个名为node的类。它具有与其关联的数据属性具有纬度和具有经度。我需要执行一个查询,给定一个lat,long输入,我应该能够找到20米范围内的节点。因此,我们使用harvesian公式编写了一个查询。它可以工作,但查询看起来非常复杂。下面是我的问题 PREFIX geof: <http://www.opengis.net/def/function/geosparql/> PREFIX math: <http://www.w3.org/2005/xp
具有纬度和具有经度。我需要执行一个查询,给定一个lat,long输入,我应该能够找到20米范围内的节点。因此,我们使用harvesian公式编写了一个查询。它可以工作,但查询看起来非常复杂。下面是我的问题
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX math: <http://www.w3.org/2005/xpath-functions/math#>
PREFIX leviathan: <http://www.dotnetrdf.org/leviathan#>
PREFIX afn: <http://jena.hpl.hp.com/ARQ/function#>
PREFIX openStreetMapWithData: <http://www.semanticweb.org/yogitas/ontologies/2017/2/openStreetMapWithData.owl#>
PREFIX ont: <http://www.co-ode.org/ontologies/ont.owl#>
PREFIX has_k_recycling: <http://www.semanticweb.org/yogitas/ontologies/2017/2/openStreetMapWithData.owl#
has_k_recycling:>
PREFIX tags: <https://raw.github.com/doroam/planning-do-roam/master/Ontology/tags.owl#>
PREFIX k_addr: <https://raw.github.com/doroam/planning-do-roam/master/Ontology/tags.owl#k_addr:>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX uom: <http://www.opengis.net/def/uom/OGC/1.0/>
select ?lat ?lon ?node ?way ?id
where {
?node openStreetMapWithData:node_has_latitude ?lat .
?node openStreetMapWithData:node_has_longitude ?lon .
filter (
6371 * 2 * math:asin(math:sqrt(
math:pow( math:sin((("48.4321094"^^xsd:double - ?lat)*math:pi()/180)/2),2)
+
math:cos("48.4321094"^^xsd:double * math:pi() /180) * math:cos(?lat * math:pi() / 180) * math:pow( math:sin(("10.0219117"^^xsd:double - ?lon)*math:pi()/180),2))) < 0.02 )
{?node openStreetMapWithData:node_has_id ?id .
?waynode openStreetMapWithData:waynode_has_reference_id ?id .
?way openStreetMapWithData:way_has_part ?waynode .
?waynode rdf:type openStreetMapWithData:way_node .
?way rdf:type openStreetMapWithData:way.}
}
它没有给我任何错误,但甚至没有给我任何价值。为了实现GeoSPARQL,我需要做哪些更改?我是否需要将我的节点类作为GeoSPARQL中某个类的子类?我找不到任何关于如何将GeoSPARQL与您自己的本体一起使用的文档
任何帮助都将不胜感激!谢谢。要计算距离,必须使用几何体下的asWKT
实例,而不是直接使用纬度和经度。例如:
SELECT ?p ?dist
WHERE {
?p rdf:type my:MyPoint .
?p1 rdf:type my:MyPoint .
?p my:Label "alpha1" .
?p my:Label "alpha2" . .
?p my:hasExactGeometry ?geom .
?geom my:asWKT ?wkt .
?p1 my:hasExactGeometry ?geom1 .
?geom1 my:asWKT ?wkt1 .
BIND (geof:distance(?wkt, ?wkt1, <http://www.opengis.net/def/uom/OGC/1.0/meter>) as ?dist)
}
SELECT?p?dist
在哪里{
?p rdf:键入my:MyPoint。
?p1 rdf:键入my:MyPoint。
?p车型年款:标签“alpha1”。
?p车型年款:标签“alpha2”。
我的:有精确的几何学?几何。
geom my:asWKT?wkt。
p1 my:具有精确的几何图形?几何图形1。
?geom1 my:asWKT?wkt1。
绑定(geof:距离(?wkt,?wkt1,)为距离)
}
SELECT ?p ?dist
WHERE {
?p rdf:type my:MyPoint .
?p1 rdf:type my:MyPoint .
?p my:Label "alpha1" .
?p my:Label "alpha2" . .
?p my:hasExactGeometry ?geom .
?geom my:asWKT ?wkt .
?p1 my:hasExactGeometry ?geom1 .
?geom1 my:asWKT ?wkt1 .
BIND (geof:distance(?wkt, ?wkt1, <http://www.opengis.net/def/uom/OGC/1.0/meter>) as ?dist)
}