【问题标题】:How to calculate distance between two points using geosparql如何使用 geosparql 计算两点之间的距离
【发布时间】: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 &lt;http://qudt.org/vocab/unit#Kilometer&gt;) as ?distance) WHERE ...吗?
  • @AKSW 我试过了,但距离仍然很远
  • 什么是“空”?你至少应该得到一些数字。如果您在查询中通过BIND 使用它会发生什么?是否启用了空间索引?
  • geos:asWKT 是什么?您的查询中不存在前缀geos:,它必须是geo:asWKT
  • 空表示返回0个项目,距离没有任何数字

标签: sparql rdf stardog geosparql


【解决方案1】:

geof:distance 函数接受几何作为其前两个参数。因此,对于您的简化查询,使用 geof:distance(?geo1, ?geo2, unit:Kilometer) 应该会给您想要的结果。 Stardog 博客有一个geospatial primer post,您可能会发现它很有用。

【讨论】:

    【解决方案2】:

    AKSW 是正确的,您应该使用内置的geof:distance function 进行计算。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-10-30
        • 1970-01-01
        • 2020-09-25
        • 1970-01-01
        • 2011-04-23
        • 2014-11-14
        相关资源
        最近更新 更多