Загрузка границ GeoJSON с использованием SPARQL из общедоступных данных

Я заинтересован в загрузке некоторых граничных файлов из http://statistics.gov.scot/, который является официальным статистическим хранилищем для обмена статистическими данными, использующими запросы SPARQL.

Фон

http://statistics.gov.scot/ предоставляет доступ к границам GeoJSON для ряда административных и статистических географических регионов, таких как административные границы местных органов власти или органы здравоохранения. В моем конкретном случае меня интересует загрузка набора данных с границами GeoJSON, относящихся к зонам данных. Зоны данных - это статистическая география, разработанная с целью распространения данных о результатах жизни на уровне небольшой территории. При доступе через образец зоны данных http://statistics.gov.scot/ выглядит так:

Примерная зона данных

География и соответствующие данные могут быть доступны здесь. Соответствующие данные GeoJSON доступны здесь.

проблема

Зоны данных доступны в две итерации, выпущенные в 2004 году, и еще одна обновленная недавно. Я хотел бы скачать первую итерацию 2004 года. Следуя информации о статистических объектах, я подготовил следующий запрос:

PREFIX entity: <http://statistics.data.gov.uk/def/statistical-entity#>
PREFIX boundaries: <http://statistics.gov.scot/boundaries/>

SELECT ?boundary 
    WHERE {
        entity:introduced <http://reference.data.gov.uk/id/day/2004-02-01>
  }

LIMIT 1000

который возвращает следующее сообщение об ошибке:

Error There was a syntax error in your query: Encountered " "}" "} "" at line 7,
column 3. Was expecting one of: <IRIref> ... <PNAME_NS> ... <PNAME_LN> ...
<BLANK_NODE_LABEL> ... <VAR1> ... <VAR2> ... "true" ... "false" ... <INTEGER> ...
<DECIMAL> ... <DOUBLE> ... <INTEGER_POSITIVE> ... <DECIMAL_POSITIVE> ...
<DOUBLE_POSITIVE> ... <INTEGER_NEGATIVE> ... <DECIMAL_NEGATIVE> ...
<DOUBLE_NEGATIVE> ... <STRING_LITERAL1> ... <STRING_LITERAL2> ...
<STRING_LITERAL_LONG1> ... <STRING_LITERAL_LONG2> ... "(" ... <NIL> ... "[" ...
<ANON> ... "+" ... "*" ... "/" ... "|" ... "?" ...

при тестировании через конечную точку: http://statistics.gov.scot/sparql.

Комментарии

В идеале я хотел бы разработать другие запросы, которые позволили бы мне получать другие статистические географические данные, используя entity: префикс. Это должно быть возможно, так как entity: будет содержать информацию о доступных географических регионах (название, аббревиатура, дата создания).


Запрос:

PREFIX entity: <http://statistics.data.gov.uk/def/statistical-entity#>
PREFIX boundaries: <http://statistics.gov.scot/boundaries/>

SELECT DISTINCT ?boundary ?shape WHERE {
  ?shape entity:firstcode ?boundary
}

LIMIT 1000

Получил что-то похожее на список желаемых географических регионов, но я изо всех сил пытаюсь найти границы GeoJSON.

2 ответа

Решение

Ни статистика.gov.scot, ни статистика.data.gov.uk не содержат границ зон данных в виде WKT или строковых литералов.

Однако с помощью следующего запроса можно легко создать URL-адреса файлов GeoJSON, которые используются на страницах ресурсов:

PREFIX pref1: <http://statistics.data.gov.uk/def/statistical-entity#>
PREFIX pref2: <http://statistics.gov.scot/id/statistical-entity/>
PREFIX pref3: <http://statistics.data.gov.uk/def/boundary-change/>
PREFIX pref4: <http://reference.data.gov.uk/id/day/>
PREFIX pref5: <http://statistics.data.gov.uk/def/statistical-geography#>
PREFIX pref6: <http://statistics.gov.scot/id/statistical-geography/>
PREFIX pref7: <http://statistics.gov.scot/boundaries/>

SELECT ?zone ?name ?json {
   ?zone pref1:code pref2:S01 .
   ?zone pref3:operativedate pref4:2004-02-01
   OPTIONAL { ?zone pref5:officialname ?name }
   BIND (CONCAT(REPLACE(STR(?zone), STR(pref6:), STR(pref7:)), ".json") AS ?json)
} ORDER BY (!bound(?name)) ASC(?name)

После этого можно легко получить файлы GeoJSON, используя wget -i или что-то вроде этого.

Некоторое объяснение

Вы должны использовать <http://statistics.data.gov.uk/def/boundary-change/operativedate> вместо <http://statistics.data.gov.uk/def/statistical-entity#introduced>последнее свойство является скорее свойством класса:

SELECT * WHERE {
    ?S <http://statistics.data.gov.uk/def/statistical-entity#introduced> ?date .
    ?S <http://www.w3.org/2000/01/rdf-schema#label> ?label
}

Зоны данных второго поколения датируются 2014-11-06:

SELECT ?date (COUNT(?zone) AS ?count) WHERE {
    ?zone
        <http://statistics.data.gov.uk/def/statistical-entity#code>
            <http://statistics.gov.scot/id/statistical-entity/S01> ;
        <http://statistics.data.gov.uk/def/boundary-change/operativedate>
            ?date 
} GROUP BY ?date

Аналогично, если вам нужны URL-адреса соответствующих файлов GeoJSON, ваш запрос должен быть:

SELECT ?zone ?name ?json {
   ?zone pref1:code pref2:S01 .
   ?zone pref3:operativedate pref4:2014-11-06 .
   ?zone pref5:officialname ?name 
   BIND (CONCAT(REPLACE(STR(?zone), STR(pref6:), STR(pref7:)), ".json") AS ?json)
} ORDER BY ASC(?name)

Вы не должны OPTIONALпотому что все зоны данных второго поколения имеют "официальные названия".


Возможно, эта страница на data.gov.uk будет вам интересна.
Также существует https://opendata.stackexchange.com/ для вопросов, связанных с открытыми данными.

Обновить

С мая 2018 года можно получить границы зон данных как WKT:

PREFIX pref1: <http://statistics.data.gov.uk/def/statistical-entity#>
PREFIX pref2: <http://statistics.gov.scot/id/statistical-entity/>
PREFIX pref3: <http://statistics.data.gov.uk/def/boundary-change/>
PREFIX pref4: <http://reference.data.gov.uk/id/day/>
PREFIX pref5: <http://statistics.data.gov.uk/def/statistical-geography#>
PREFIX pref6: <http://www.opengis.net/ont/geosparql#>


SELECT ?zone ?name ?geometry {
   ?zone pref1:code pref2:S01 .
   ?zone pref3:operativedate pref4:2014-11-06 .
   ?zone pref5:officialname ?name .
   ?zone pref6:hasGeometry/pref6:asWKT ?geometry .
} ORDER BY ASC(?name)

В первом запросе отсутствует тема. Запрос SPARQL определяет набор тройных шаблонов - субъект, предикат и объект - для сопоставления с графиком RDF. Чтобы превратить ваше предложение WHERE в тройной шаблон SPARQL, попробуйте:

?boundary entity:introduced <http://reference.data.gov.uk/id/day/2004-02-01>
Другие вопросы по тегам