Функции GeoSPARQL и системы пространственной привязки (SRS) - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь представить в онтологии несколько геометрических объектов ( многоугольник , линии , точки и т. Д.) И вычислить их пространственные / топологические отношения путем принятия GeoSPARQL соответствующих функций ( sfTouches , sfEquals , sfContains и т. д.). Я использую GraphDB с включенным плагином GeoSPARQL.

Я видел, что в WKT-представлении геометрического объекта GeoSPARQL использует концепцию системы пространственной привязки по умолчанию (т. Е. <<a href="http://www.opengis.net/def/crs/OGC/1.3/CRS84" rel="nofollow noreferrer">http://www.opengis.net/def/crs/OGC/1.3/CRS84> URI, который соответствует WGS84 система координат ( CRS )). Однако в моем случае использования координаты геометрических объектов фактически соответствуют значениям в 2D декартовой системе координат .

Я нашел в реестре геодезических параметров EPSG правильный CRS для представления декартовых координат, и я прикрепил правильный URI в представлении WKT, но функции GeoSPARQL не возвращают ни результата, ни ошибки.

У меня следующий вопрос: « Правильно ли работают функции GeoSPARQL при представлении пространственных объектов в любом другом типе CRS, кроме стандартного? ».

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 10 марта 2019

В настоящее время GDB не поддерживает альтернативные CRS в литералах WKT, но поддерживает их в литералах GML (выпуск GDB-3142).Литералы GML немного сложнее, но все же достаточно просты для генерации, дайте нам знать, если вам нужна помощь в этом.

Однако я подвергаю сомнению ваше утверждение о том, что у вас есть декартовы координаты.С одной стороны, любая пара (широта, лонг) или (ничего, восток) является декартовой координатой.С другой стороны, поскольку Земля не плоская, любой метод CRS или проекции является лишь приблизительным, и многие из них настроены для конкретных местностей.

Поэтому, пожалуйста, сообщите нам, какой EPSG CRS вы выбрали, и немного о местонахождении ваших данных.

0 голосов
/ 20 марта 2019

Ваш пример, слегка переформатированный и использующий обычные сокращения черепах:

ex:polygon_ABCD rdf:type ex:ExampleEntity ;
  geo:hasGeometry ex:geometry_polygon_ABCD .

ex:geometry_polygon_ABCD a geo:Geometry, sf:Polygon ;
  geo:asWKT "<opengis.net/def/cs/EPSG/0/4499> Polygon((389.0 1052.0, 563.0 1052.0, 563.0 1280.0, 389.0 1280.0, 389.0 1052.0))"^^geo:wktLiteral .

ex:point_E rdf:type ex:ExampleEntity ; 
  geo:hasGeometry ex:geometry_point_E . 

ex:geometry_point_E a geo:Geometry, sf:Point ;
  geo:asWKT "<opengis.net/def/cs/EPSG/0/4499> Point(400.0 1100.0)"^^geo:wktLiteral ; .

Вы должны использовать определенный URL-адрес для CRS и не можете пропустить http:, поэтому правильный URL-адрес - http://www.opengis.net/def/crs/EPSG/0/4499.

Но из возвращенного описания видно, что этот CRS можно использовать в «Китае - на суше и на море между 120 ° и 126 ° в.д.».Я не эксперт в гео-проекциях, поэтому я не могу гарантировать, что этот CRS удовлетворит вашу потребность: «оставьте мои координаты в покое, они всего лишь метры».Я бы искал CRS в Великобритании (OrdnanceSurvey) с координатами на восток и на север.

Чтобы узнать, как форматировать GML:

  • , см. Спецификацию GeoSPARQL (OGC 11-052r4) p18, который приводит пример о gml:Point.
  • затем Google для gml:Polygon.Есть много ссылок, но одна из них дает примеры: http://www.georss.org/gml.html

Вооружившись этими знаниями, мы можем переформатировать ваш пример в GML:

ex:polygon_ABCD rdf:type ex:ExampleEntity ;
  geo:hasGeometry ex:geometry_polygon_ABCD .

ex:geometry_polygon_ABCD a geo:Geometry, sf:Polygon ;
  geo:asGML """
      <gml:Polygon xmlns:gml="http://www.opengis.net/gml" srsName="http://www.opengis.net/def/crs/EPSG/0/TODO">
         <gml:exterior>
            <gml:LinearRing>
               <gml:posList>
389.0 1052.0, 563.0 1052.0, 563.0 1280.0, 389.0 1280.0, 389.0 1052.0
               </gml:posList>
            </gml:LinearRing>
         </gml:exterior>
      </gml:Polygon>
"""^^geo:gmlLiteral.

ex:point_E rdf:type ex:ExampleEntity ; 
  geo:hasGeometry ex:geometry_point_E . 

ex:geometry_point_E a geo:Geometry, sf:Point ;
  geo:asGML """
      <gml:Point xmlns:gml="http://www.opengis.net/gml" srsName="http://www.opengis.net/def/crs/EPSG/0/TODO">
        <gml:pos>
      400.0 1100.0
        </gml:pos>  
      </gml:Point>
"""^^geo:gmlLiteral.
  • """ (длинная цитата) позволяет нам использовать " внутри литерала без кавычек
  • заменить TODO на лучший выбранный вами CRS
  • документация http://graphdb.ontotext.com/documentation/master/enterprise/geosparql-support.html#geosparql-examples дает примерпохож на ваш, но немного обманывает, потому что все координаты находятся в диапазоне (-90, + 90), поэтому он может просто использовать WGS.
  • после отладки с использованием функций топологии geof:, включите индексирование и включитена geo: предикаты, потому что функции медленные (они проверяют каждую геометрию на предмет друг друга), в то время как предикаты используют специальный геоиндекс

Дайте мне знать, как это происходит!

...