2016-01-09 1 views
2

Я использую stSPARQL и реф говорит:Получить площадь муниципалитета

xsd:float strdf:area(strdf:geometry A): Returns the area of the surface if it is a polygon or multi-polygon.

и поэтому я пытаюсь:

PREFIX geo: <http://geo.linkedopendata.gr/gag/ontology/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX strdf: <http://strdf.di.uoa.gr/ontology#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
... 
?municipality geo:has_geometry ?geometry . // so far so good (checked) 
FILTER(strdf:area(?geometry) = ?area) . 

, и я не подвожу ничего в результате. Моя общая цель - получить общую площадь всех муниципалитетов, но я даже не могу ее получить! Есть идеи?

Обратите внимание, что это мой первый раз, когда я использую пространственные метрические функции, поэтому я пытаюсь собрать и показать результат strdf:area(), но я терпеть неудачу! ?

1-й результат геометрии:

"MULTIPOLYGON(((476162.8125 3949684,476195.687499999 3949675,476216.000000001 3949675,476226.1875 3... more


EDIT:

Если я пытаюсь с этим: ?area = strdf:area(?geometry) ., я получаю сообщение об ошибке:

Encountered " "=" "= "" at line 15, column 9. Was expecting one of: "(" ... "!" ... "^" ... "a" ... ... ...

+0

'Filter (... =? Область)' имеет смысл только, если другая часть ваш запрос связывает '? area'. Вы это делаете? (Вы не указали нам свой полный запрос.) И не видя ваши данные, мы не можем знать, какие вещи * должны вернуться. –

+0

@ JoshuaTaylor Я этого не делал. Я не показал остальную часть запроса, потому что все, что он делает, это найти правильные муниципалитеты, поэтому это не имеет значения. Я пытаюсь найти район муниципалитета, и я не знаю, как это сделать! Так что да, я не удивлен, что мой код не имеет большого смысла ... Я пытаюсь собрать результат 'strdf: area()', но мне кажется, что это не удается. : / – gsamaras

ответ

4

I подумайте, что вы хотите сделать с функцией, которая имеет возвращаемое значение, вы должны каким-то образом использовать ее в своем предложении select. Например:

PREFIX geo: ... 
PREFIX rdf: ... 
PREFIX strdf: ... 
PREFIX xsd: ... 
... 
SELECT (strdf:area(?geometry) AS ?myarea) 
WHERE { 
     ?municipality geo:has_geometry ?geometry . 
} 

Возможно, это дает вам все области, которые нужно добавить, просто использовать SUM функцию (myarea?). Это добавляет все ответы, найденные функцией «area». В предыдущей ситуации ваше предложение select было бы примерно таким:

SELECT (SUM(strdf:area(?geometry)) AS ?myarea) 
4

FILTER не устанавливает переменные.

Ваш комментарий о желании собрать результат strdf:area(), либо

BIND(strdf:area(?geometry) AS ?area) 

или

SELECT ... (strdf:area(?geometry) AS ?area) ...