0

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

但是没有结果。

我做错了什么?

感谢您的任何回复。

4

1 回答 1

0

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

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

  }

活生生的例子通常比假设的更有用,所以这里有一个调整后的查询,它确实产生了结果,尽管纪念碑与公园的名称似乎存在问题,并且两者都有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))
  }

我没有时间找到一个包含POLYGONParks 几何图形的实时数据集,并准确地将 MonumentPOINTs放置在这样的 ParkPOLYGONs中,所以我无法进一步挖掘......但是如果你可以将你的实例公开,或者指向一个实时的公共实例,掌握了这样的数据,我们可以走得更远。

于 2016-08-17T13:12:49.957 回答