Функция st_with GeoSPARQL на Virtuoso

Я установил 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 ответ

Я думаю, что вы можете указать, что вы ищете памятники в парках. Кроме того, я не думаю, что вы хотите подстановочный знак, а только список таких памятников и парков.

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

  }

Живые примеры часто более полезны, чем гипотетические, поэтому вот скорректированный запрос, который действительно дает результаты, хотя, похоже, есть проблема с обозначением Monument vs Park, и оба имеют 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поэтому я не могу копать дальше... но если вы можете сделать ваш экземпляр общедоступным или указать на действующий публичный экземпляр, который содержит такие данные, мы можем пойти дальше.

Другие вопросы по тегам