st_within在Virtuoso上的GeoSPARQL功能

时间:2016-08-17 10:20:14

标签: virtuoso geosparql

我安装了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))
}

但没有结果。

我做错了什么?

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

我想您可能想要指明您正在Parks内寻找纪念碑。此外,我认为你不想要一个通配符结果,而只想看这些纪念碑和公园的列表。

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几何体的实时数据集,并准确地将纪念碑POINTs放置在这样的公园POLYGONs内,所以我无法进一步挖掘..但如果您可以公开您的实例,或者指向包含此类数据的实时公共实例,我们可以更进一步。