如何使用geosparql计算两点之间的距离

如何使用geosparql计算两点之间的距离,sparql,rdf,stardog,geosparql,Sparql,Rdf,Stardog,Geosparql,我试图使用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/2

我试图使用
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>)
}
前缀geos:
前缀geosf:
前缀:
选择?距离
在哪里{
?wifipoint1:hasGeometry?geo1。
?geo1 geos:asWKT?wpoint1。
过滤式采样仪(?wifipoint1,)
?wifipoint2:hasGeometry?geo2。
?geo2 geos:asWKT?wpoint2。
过滤器样本(?wifipoint2,)。
?距离geosf:距离(?wpoint1?wpoint2)
}
在不增加距离的情况下,我可以得到以下结果:

但是现在我加上距离,我得到了空行。有什么想法吗

注:

  • 我需要计算两个wifipoints(NYWifiFree103和NYWifiFree105)之间的距离,每个wifipoints都有一个点

  • 我正在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>)
}
前缀geos:
前缀geof:
前缀:
选择(geof:距离(?wpoint1,wpoint2,)作为距离)
在哪里{
?wifipoint1:hasGeometry?geo1。
?geo1 geos:asWKT?wpoint1。
过滤器样本(?wifipoint1,)。
?wifipoint2:hasGeometry?geo2。
?geo2 geos:asWKT?wpoint2。
滤光片采样仪(?wifipoint2,)
}

当我在
geof:distance
two-harcoded
wktLiteral
中设置时,会返回正确的距离,但使用点不会返回任何值。

AKSW是正确的,您应该使用内置参数进行计算。

geof:distance
函数接受几何体作为其前两个参数。因此,通过简化查询,使用
geof:distance(?geo1,geo2,单位:公里)
应该可以得到您想要的结果。Stardog博客有一个你可能会觉得有用的问题。

我对GraphDB也有同样的问题。它返回的不是距离,而是两个空字段,我已经启用了geosparql

这是我的密码:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX : <http://www.semanticweb.org/evangelos/ontologies/2019/2/untitled-ontology-2#>
prefix geo: <http://www.opengis.net/ont/geosparql#>
prefix geof: <http://www.opengis.net/def/function/geosparql/>
prefix unit: <http://qudt.org/vocab/unit#>
prefix sf: <http://www.opengis.net/ont/sf#>
prefix test24: <http://www.semanticweb.org/evangelos/ontologies/2019/2/untitled-ontology-2#>
prefix omgeo: <http://www.ontotext.com/owlim/geo#>

SELECT (geof:distance(?point, ?point2, <http://qudt.org/vocab/unit#Kilometer>) as ?distance)
WHERE
{
    :MouseioMetaksisSoufliou :hasGPSCoordinates ?geom2.
    ?geom2 geo:asWKT ?point.
    ?geom3 geo:asWKT ?point2.
    FILTER (?geom2 != ?geom3)
} 
前缀rdfs:
前缀:
前缀geo:
前缀geof:
前缀单位:
前缀sf:
前缀test24:
前缀omgeo:
选择(geof:距离(?点、?点2)作为距离)
哪里
{
:MouseioMetaksisSoufliou:hasGPSCoordinates?geom2。
?geom2 geo:asWKT?点。
?geom3 geo:asWKT?点2。
过滤器(?geom2!=?geom3)
} 

你不应该简单地使用
选择(geosf:distance(?wpoint1?wpoint2)作为?distance)在哪里…
?@AKSW我试过了,但仍然得到emtpy distance“空”是什么意思?你至少应该得到一些数字。如果在查询中通过
BIND
使用它会发生什么?您是否启用了空间索引?什么是
geos:asWKT
?查询中不存在前缀
geos:
,它必须是
geo:asWKT
空表示返回0个项目,距离中没有任何数字