Функция Geosparql

#function #geosparql

#функция #geosparql

Вопрос:

Я пытаюсь объединить два района, которые имеют координаты WKT в качестве атрибутов geoshape. запрос выглядит следующим образом:

 PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX geop: <http://www.opengis.net/def/property/OGC-GeoSPARQL/1.0/>
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
PREFIX ext: <http://rdf.useekm.com/ext#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ubmo: <http://w3id.org/UrbanAndBuildingMultiscaleOntology#>
    
select ?quar ?quar1 ?envelope
 where { 
 ?quar rdf:type ubmo:Quartier. 
 ?quar1  rdf:type ubmo:Quartier. 
 Filter(regex(str(?quar), "QuartierF4481__1")).
 Filter(regex(str(?quar1), "QuartierF4481__10")).
 ?quar ubmo:geoshape ?aWKT.
 ?quar1 ubmo:geoshape ?bWKT.
 BIND (geof:union(?aWKT, ?bWKT) AS ?envelope)  
}
  

Я получаю следующую ошибку для GraphDB:
Ошибка 500: ошибка
Ошибка при оценке запроса: проверенный объект равен нулю (статус HTTP 500).

Любой совет, заранее благодарю вас.

Ответ №1:

  1. Вы используете geof:union правильно, согласно примерам на https://graphdb.ontotext.com/documentation/standard/geosparql-support.html

  2. Можете ли вы показать нам две геометрии? Используйте concat как простой способ:

 BIND (concat(?aWKT, ?bWKT) AS ?envelope)
  
  1. Кстати, фильтрация по URL-адресам — не лучший способ, вы можете просто использовать bind или values