Я пытаюсь вычислить расстояние между двумя точками, используя geosparql
.У меня есть объекты, подобные следующему изображению (те же свойства, разные значения):
![enter image description here](https://i.stack.imgur.com/P1Y02.png)
И я выполняю этот запрос в sparql
:
PREFIX geos: <http://www.opengis.net/ont/geosparql#>
PREFIX geosf: <http://www.opengis.net/def/function/geosparql/>
PREFIX : <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#>
SELECT ?distance
WHERE {
?wifipoint1 :hasGeometry ?geo1 .
?geo1 geos:asWKT ?wpoint1 .
FILTER sameterm(?wifipoint1, <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#NYWifiFree103>)
?wifipoint2 :hasGeometry ?geo2 .
?geo2 geos:asWKT ?wpoint2 .
FILTER sameterm(?wifipoint2, <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#NYWifiFree105>) .
?distance geosf:distance(?wpoint1 ?wpoint2 <http://qudt.org/vocab/unit#Kilometer>)
}
Без добавления расстояния я могу получить следующий результат:
![enter image description here](https://i.stack.imgur.com/TpkjB.png)
Но на данный момент я добавляюНа расстоянии я получаю пустые строки.Есть идеи?
Примечания:
Мне нужно рассчитать расстояние между двумя точками wifipoints (NYWifiFree103 и NYWifiFree105), каждая из которых имеет точку.
Я выполняю эти запросы в stardog.
** РЕДАКТИРОВАТЬ **
Я упростил запрос:
PREFIX geos: <http://www.opengis.net/ont/geosparql#>
PREFIX geof: <http://www.opengis.net/def/function/geosparql/>
PREFIX : <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#>
SELECT (geof:distance(?wpoint1, ?wpoint2, <http://qudt.org/vocab/unit#Kilometer>) as ?distance)
WHERE {
?wifipoint1 :hasGeometry ?geo1 .
?geo1 geos:asWKT ?wpoint1 .
FILTER sameterm(?wifipoint1, <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#NYWifiFree103>) .
?wifipoint2 :hasGeometry ?geo2 .
?geo2 geos:asWKT ?wpoint2 .
FILTER sameterm(?wifipoint2, <http://www.semanticweb.org/frubi/ontologies/2017/10/puntsWIFI#NYWifiFree105>)
}
Когда я установил geof:distance
, два кодированных wktLiteral
вернули мне правильное расстояние, но использование точек не вернуло ничего.