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