GraphDB & GeoSPARQL
Я запускаю этот запрос:
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
select *
where
{
?x <http://www.opengis.net/ont/geosparql#hasGeometry> ?fGeom .
?fGeom geo:asWKT ?fWKT .
FILTER (geof:sfWithin(
'<http://www.opengis.net/def/crs/EPSG/0/27572>
Point (729326 2521619) '^^geo:wktLiteral,
?fWKT))
}
против GraphDB с:
<http://data.edf.fr/departements/dep_france_dom/Geometry/2> a <http://www.opengis.net/ont/geosparql#Geometry> ;
<http://www.opengis.net/ont/geosparql#asWKT> "
<http://www.opengis.net/def/crs/EPSG/0/27572> MULTIPOLYGON (((729326 2521619,....
в магазине, и я не получаю никакого результата. Как вы думаете, это связано с "французской экзотикой" CRS?
1 ответ
ОБНОВИТЬ:
Вот код:
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
SELECT * WHERE {
?obj geo:hasGeometry ?fGeom .
?fGeom geo:asWKT ?fWKT .
FILTER (geof:sfTouches(?fWKT, ''' POINT(729326 2521619)'''^^geo:wktLiteral))
}
Много вещей сказать:
Point
это на границеPolygon
не может бытьWithin
Это. ЭтоTouches
или жеInstersects
граница вместо- В интересах оптимизации лучше, чтобы переменная геометрия была первым аргументом в функции, а формальная геометрия - вторым.
- Суть в том, что
geof:
нужно работать с<http://www.opengis.net/def/crs/OGC/1.3/CRS84>
, Это большая тема для многих дискуссий, но это единственный способ, который работает... Затем вам нужно удалить спецификацию CRS во всех ваших геометриях и запросах. Я пробовал с разными CRS, и они не работали ни.
Как сказано в этой теме.
Зачем уточнять CRS в WKT, если он работает только с WGS84? Почему только WGS84, если это можно легко сделать перепроецированием? Я не знаю, и обсуждение открыто.
Наконец, опять же, обязательно правильно перепроектируйте ваши данные.