Hi,
I've encountered some problems when querying LGD endpoint (
http://linkedgeodata.org/sparql).
I know that bif:st_intersects is used to make querying efficient and that some optimisation happens behind the scenes.
Nevertheless, can anyone tell why it is changing the semantics of variables? It looks like bif:st_intersects and bif:st_x and similar cannot go into one query.
In all queries the following namespaces are used:
prefix lgd:<
http://linkedgeodata.org/triplify/>
prefix lgdo:<
http://linkedgeodata.org/ontology/>
prefix lgd-geom:<
http://linkedgeodata.org/geometry/>
prefix lgdm:<
http://linkedgeodata.org/meta/>
prefix spatial:<
http://geovocab.org/spatial#>
prefix geom:<
http://geovocab.org/geometry#>
prefix geo:<
http://www.w3.org/2003/01/geo/wgs84_pos#>
prefix ogc:<
http://www.opengis.net/ont/geosparql#>
Query 1. Works
SELECT ?b ?l ?geo ?x str(?geo)
WHERE
{
?b rdfs:label ?l .
?b a lgdm:Node .
?b geom:geometry [ogc:asWKT ?geo ] .
bind(bif:st_x(?geo) as ?x)
}
LIMIT 100
Query 2. Also works
SELECT ?b ?l ?geo str(?geo)
WHERE
{
?b rdfs:label ?l .
?b a lgdm:Node .
?b geom:geometry [ogc:asWKT ?geo ] .
filter(bif:st_intersects(?geo, bif:st_point(16.9,52.4),1 ))
}
LIMIT 100
Query 3. Fails with error:
"
Virtuoso 22023 Error GEO..: Function st_x() expects a geometry of type 1 or NULL as argument 0, not geometry of type 2
"
SELECT ?b ?l ?geo ?x str(?geo)
WHERE
{
?b rdfs:label ?l .
?b a lgdm:Node .
?b geom:geometry [ogc:asWKT ?geo ] .
filter(bif:st_intersects(?geo, bif:st_point(16.9,52.4),1 ))
bind(bif:st_x(?geo) as ?x)
}
LIMIT 100
Query 4. It does not even help to convert geometry via text.
SELECT ?b ?l ?geo ?x str(?geo)
WHERE
{
?b rdfs:label ?l .
?b a lgdm:Node .
?b geom:geometry [ogc:asWKT ?geo ] .
filter(bif:st_contains(?geo, bif:st_point(16.9,52.4),1 ))
bind(bif:st_x(bif:st_geomfromtext(bif:st_astext(?geo))) as ?x)
}
LIMIT 100
Moreover, how is precision in bif:st_intersects interpreted? Is it distance in km? Why it is interpreted differently for lgdm:Node and lgdm:Way?
Best regards,
Krzysztof