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

Много вещей сказать:

  1. Point это на границе Polygon не может быть Within Это. Это Touches или же Instersects граница вместо
  2. В интересах оптимизации лучше, чтобы переменная геометрия была первым аргументом в функции, а формальная геометрия - вторым.
  3. Суть в том, что geof: нужно работать с <http://www.opengis.net/def/crs/OGC/1.3/CRS84>, Это большая тема для многих дискуссий, но это единственный способ, который работает... Затем вам нужно удалить спецификацию CRS во всех ваших геометриях и запросах. Я пробовал с разными CRS, и они не работали ни.

Как сказано в этой теме.

Зачем уточнять CRS в WKT, если он работает только с WGS84? Почему только WGS84, если это можно легко сделать перепроецированием? Я не знаю, и обсуждение открыто.

Наконец, опять же, обязательно правильно перепроектируйте ваши данные.

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