2016-08-17 93 views
0

我安装了Virtuoso Open Source Edition 07.20.3217Virtuoso上的GeoSPARQL的st_within函数

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

但没有结果。

我做错了什么?

谢谢你的回复。

+0

谢谢你在这篇文章中的更正,TallTed。 :) –

回答

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

    } 

Live examples往往比hypotheticals更有用,所以这里的an adjusted query,它产生的结果,虽然有似乎是一个纪念碑VS公园指定的问题,并且都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,所以我没有太多的进一步深入研究......但如果你可以让你的实例公开,或者指向一个拥有这些数据的实时公共实例,我们可以走得更远。

+0

感谢您的回复。作为你的评论,我只想在公园内找到纪念碑。但它不是类型和通配符问题。您的GeoSPARQL也不起作用。 –

+0

我更新了一个实时查询,但针对不完美的数据,因此不完美的结果... – TallTed

+0

感谢您的指导。我在“OGC GeoSPARQL-- RDF数据的地理查询语言”中测试了一些示例,它工作正常。在文档中,他们使用定义为opengis.net的函数,如geof:sfWithin。 Virtuoso不支持这些功能吗? –