【发布时间】:2018-06-07 22:41:07
【问题描述】:
我正在尝试使用geosparql 计算两点之间的距离。我有类似下图的对象(相同的属性,不同的值):
我正在sparql 中执行该查询:
PREFIX geos: <http://www.opengis.net/ont/geosparql#>
PREFIX geosf: <http://www.opengis.net/def/function/geosparql/>
PREFIX : <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#>
SELECT ?distance
WHERE {
?wifipoint1 :hasGeometry ?geo1 .
?geo1 geos:asWKT ?wpoint1 .
FILTER sameterm(?wifipoint1, <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#NYWifiFree103>)
?wifipoint2 :hasGeometry ?geo2 .
?geo2 geos:asWKT ?wpoint2 .
FILTER sameterm(?wifipoint2, <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#NYWifiFree105>) .
?distance geosf:distance(?wpoint1 ?wpoint2 <http://qudt.org/vocab/unit#Kilometer>)
}
在不增加距离的情况下,我可以得到以下结果:
但此刻我添加距离我得到空行。有什么想法吗?
注意事项:
我需要计算两个 wifipoint(NYWifiFree103 和 NYWifiFree105)之间的距离,这两个 wifipoint 各有一个点。
我正在 stardog 中执行该查询。
** 编辑 **
我简化了查询:
PREFIX geos: <http://www.opengis.net/ont/geosparql#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX : <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#>
SELECT (geof:distance(?wpoint1, ?wpoint2, <http://qudt.org/vocab/unit#Kilometer>) as ?distance)
WHERE {
?wifipoint1 :hasGeometry ?geo1 .
?geo1 geos:asWKT ?wpoint1 .
FILTER sameterm(?wifipoint1, <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#NYWifiFree103>) .
?wifipoint2 :hasGeometry ?geo2 .
?geo2 geos:asWKT ?wpoint2 .
FILTER sameterm(?wifipoint2, <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#NYWifiFree105>)
}
当我在geof:distance 中设置两个硬编码wktLiteral 时,我返回了正确的距离,但使用Points 不会返回任何内容。
【问题讨论】:
-
你不应该简单地使用
SELECT (geosf:distance(?wpoint1 ?wpoint2 <http://qudt.org/vocab/unit#Kilometer>) as ?distance) WHERE ...吗? -
@AKSW 我试过了,但距离仍然很远
-
什么是“空”?你至少应该得到一些数字。如果您在查询中通过
BIND使用它会发生什么?是否启用了空间索引? -
geos:asWKT是什么?您的查询中不存在前缀geos:,它必须是geo:asWKT -
空表示返回0个项目,距离没有任何数字
标签: sparql rdf stardog geosparql