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>)
}

在不增加距离的情况下,我能够得到以下结果:

在此处输入图像描述

但此刻我添加距离我得到空行。任何想法?

笔记:

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

  • 我正在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 不会返回任何内容。

4

3 回答 3

1

geof:distance函数接受几何作为其前两个参数。因此,通过您的简化查询,使用geof:distance(?geo1, ?geo2, unit:Kilometer)应该会给您想要的结果。Stardog 博客有一篇地理空间入门文章,您可能会发现它很有用。

于 2018-06-11T11:24:31.613 回答
0

AKSW is correct, you should use the built in geof:distance function for the calculation.

于 2018-06-08T11:28:14.057 回答
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)
} 
于 2019-06-24T14:03:46.283 回答