如何使用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-harcodedwktLiteral
中设置时,会返回正确的距离,但使用点不会返回任何值。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个项目,距离中没有任何数字