我正在尝试使用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>)
}
如果不添加距离,我可以得到以下结果:
但是此刻我加上距离我得到空行。有什么想法吗?
注意:
我需要计算两个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>)
}
当我进入geof:distance
时,两个已编码的wktLiteral
会返回正确的距离,但使用点数不会返回任何内容。
答案 0 :(得分:1)
geof:distance
函数接受Geometries作为前两个参数。因此,使用简化查询,使用geof:distance(?geo1, ?geo2, unit:Kilometer)
可以为您提供所需的结果。 Stardog博客有geospatial primer post你可能觉得有用。
答案 1 :(得分:0)
AKSW是正确的,您应该使用内置的geof:distance function进行计算。
答案 2 :(得分:0)
我对GraphDB有同样的问题。而不是距离,它返回2个字段为空,并且我已经启用了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)
}