【问题标题】:st_within function of GeoSPARQL on VirtuosoVirtuoso 上 GeoSPARQL 的 st_within 函数
【发布时间】:2016-08-17 10:20:14
【问题描述】:

我安装了Virtuoso Open Source Edition 07.20.3217

但是 GeoSPARQL 并没有像我预期的那样工作。

我插入了 10 个三元组 --

prefix   owl:  <http://www.w3.org/2002/07/owl#>
prefix  rdfs:  <http://www.w3.org/2000/01/rdf-schema#>
prefix   geo:  <http://www.opengis.net/ont/geosparql#>
prefix    ex:  <http://www.example.org/POI#>
prefix    sf:  <http://www.opengis.net/ont/sf#>
prefix   rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

ex:WashingtonMonument 
   rdf:type          ex:Monument  
   rdfs:label        "Washington Monument"  ;
   geo:hasGeometry   ex:WMPoint  .

ex:WMPoint 
   rdf:type          sf:Point  ;
   geo:asWKT         "POINT(-77.03524 38.889468)"^^geo:wktLiteral  .

ex:NationalMall 
   a                 ex:Park  ;
   rdfs:label        "National Mall"  ;
   geo:hasGeometry   ex:NMPoly  .

ex:NMPoly 
   a                 sf:Polygon  ;
   geo:asWKT         "POLYGON((-77.050125 38.892086, -77.039482 38.892036, -77.039482 38.895393, -77.033669 38.895508, -77.033585 38.892052, -77.031906 38.892086, -77.031883 38.887474, -77.050232 38.887142, -77.050125 38.892086 ))"^^geo:wktLiteral  .

然后我尝试了这个 GeoSPARQL 查询 --

PREFIX geo: <http://www.opengis.net/ont/geosparql#>
SELECT *
WHERE {
  ?m  geo:hasGeometry  ?mgeo .
  ?p  geo:hasGeometry  ?pgeo .
  FILTER (bif:st_within(?mgeo, ?pgeo))
}

但是没有结果。

我做错了什么?

感谢您的回复。

【问题讨论】:

  • 感谢您在这篇文章中的更正,TallTed。 :)

标签: virtuoso geosparql


【解决方案1】:

我认为您可能需要指定您正在寻找公园内的纪念碑。另外,我认为您不需要通配符结果,而只需要此类纪念碑和公园的列表。

PREFIX geo: <http://www.opengis.net/ont/geosparql#>

SELECT ?monument  
       ?park
WHERE
  {
    ?monument                a  ex:Monument ;
               geo:hasGeometry  ?mgeo       .

    ?park                    a  ex:Park     ;
               geo:hasGeometry  ?pgeo       .

    FILTER (bif:st_within(?mgeo, ?pgeo))

  }

Live examples 通常比假设更有用,所以这里的an adjusted query 确实会产生结果,尽管纪念碑与公园的名称似乎存在问题,并且两者都有 POINT 几何形状(即没有 POLYGON数据)--

PREFIX   geo:  <http://www.opengis.net/ont/geosparql#>
PREFIX  lgdo:  <http://linkedgeodata.org/ontology/>
PREFIX   wgs:  <http://www.w3.org/2003/01/geo/wgs84_pos#>

SELECT  ?monument  ?mlabel  ?mgeo 
        ?park      ?plabel  ?pgeo
WHERE
  {
    ?monument             a  lgdo:Monument   ;
                 rdfs:label  ?mlabel  ;
               wgs:geometry  ?mgeo  .

    ?park                 a  lgdo:Park  ;
                 rdfs:label  ?plabel  ;
               wgs:geometry  ?pgeo  .

    FILTER (bif:st_within(?mgeo, ?pgeo))
  }

我没有时间找到包含 POLYGON Parks 几何图形的实时数据集,并准确地将纪念碑 POINTs 放置在此类 Park POLYGONs 内,所以我无法进一步挖掘......但如果你能您的实例是公开的,或者指向保存此类数据的实时公开实例,我们可以走得更远。

【讨论】:

  • 感谢您的回复。正如您的评论,我只想在公园内获得纪念碑。但这不是类型和通配符问题。您的 GeoSPARQL 也不起作用。
  • 我已经更新了实时查询,但针对不完善的数据,因此结果不完善......
  • 感谢您的指导。我在“OGC GeoSPARQL - RDF 数据的地理查询语言”中测试了一些示例,它运行良好。在文档中,他们使用了 opengis.net 中定义的函数,例如 geof:sfWithin。 Virtuoso 不支持这些功能吗?
  • Virtuoso 中的 GeoSPARQL 函数目前只能通过 bif: 模式寻址,但在未来的版本中它们将被命名为标准化命名。我没有这方面的预计到达时间。要提高优先级并及时了解开源版的更新,最好写信至Virtuoso Users mailing list 和/或log an Issue,或者,如果使用商业版,请打开Support Case
  • 上面的“现场示例”只返回 ?monument=?park 的结果,这不是我们想要的
猜你喜欢
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
相关资源
最近更新 更多