RU:Validator protocol

From OpenStreetMap Wiki
Jump to: navigation, search

Протокол взаимодействия в валидаторами (0.1)

Здесь описывается протокол, унифицирующий выдачу результатов различными валидаторами OSM с тем, чтобы их данные могли быть отображены на различных сайтах OSM (в частности openstreetmap.ru).

Протокол состоит из трех частей, специфицирующих:

  • Параметры валидатора
  • Осуществляемых запросов от сайта к валидатору
  • Ответы валидатора

Параметры валидатора

Предлагается сделать страничку в вики с таблицей валидаторов, удовлетворяющих протоколу. С описанием валидатора, JSON с параметрами, контактами и комментариями автора. А на конкретный сайт уже берется JSON тех валидаторов которые там нужны.

 {
   "name": "Название валидатора"
   "url": "Шаблон url для запроса ошибок в заданном bbox"
   "types": {
       "my_cool_error": {
           "text": "Описание ошибки если не указано другое в ответе" // текст ошибки, может содержать ссылки на значения параметров ошибки
           "url": "http://адрес_страницы_с_подробным_описанием", // опционально, ссылка на дополнительную информацию об ошибке, описание исправлений и т.п.
       },
       "self_intersection": {
           "text": "Самопересечение ({road_count} дорог)" // текст ошибки, может содержать ссылки на значения параметров ошибки
           "url": "http://адрес_страницы_с_подробным_описанием", // опционально, ссылка на дополнительную информацию об ошибке, описание исправлений и т.п.
       }
   },
   "frequency": 1000, // опционально, приблизительная частота обновления
   "offset_limit": false  // опционально, поддержка запросов offset/limit, если не указано, по умолчанию - false
   "cors": false, // опционально, поддержка кроссдоменных запросов, по умолчанию - false
   "jsonp": true, // опционально, поддержка JSONP, по умолчанию - false
   "filtered_types": true, // опционально, поддержка фильтрации ошибок по типам, по умолчанию - false
 }

Запрос к валидатору

GET на url, получаемый заменой в шаблоне url {minlat}, {maxlat}, {minlon}, {maxlon} на соответствующие запрашиваему bbox значения. При этом дополнительно:

  • Eсли валидатор поддерживает offfset_limit, то {offset} и {limit} так же заменяются на соответствующие запрашиваемому
  • Если валидатор поддерживает filtered_types, то {filtered_types} заменяется на список запрашиваемых типов ошибок, разделенных запятой

Пример 1:

Пример 2:

В случае, если валидатор объявил о поддержке JSONP, он должен принимать опциональный параметр callback.

Ответ валидатора в формате JSON

Если произошла какая-та ошибка/сбой (ошибка обработки запроса, а не ошибка в OSM):

 {
   "error": "Слишком большая область"
 }

Если запрос успешно выполнен:

 {
   "count": 100 // оцпионально, общее количество ошибок в области
   "results": [{
     "types": ["self_intersection","other_error"], // также допустимо "type": "some_error" в случае ошибки одного типа
     "text": "описание ошибки", // опционально, если указано, то перекрывает соответствующее значение в параметрах валидатора
     "url": "http://адрес_страницы_с_подробным_описанием", //опционально, если указано, то перекрывает соответствующее значение в параметрах валидатора
     "geometry": { // соответствует разделу geometry в GeoJson
       "type": "Point", // Point / LineString / Polygon
       "coordinates": [102.0, 0.5] // как в geojson
     },
     "objects": [ // опционально, список объектов OSM, связанных с ошибкой
       ["way", 2132],
       ["relation", 11]
     ],
     "params": { // опционально, хеш с дополнительной информацией об ошибке
       "city": "Рыбинск"
     }
   }]
 }

Если валидатор поддерживает кроссдоменные запросы, то ответ должен содержать заголовок:

 Access-Control-Allow-Origin: *

Если валидатор поддерживает JSONP и в запрос был передан параметр callback, то JSON должен быть завернут в вызов функции с именем, равным значению callback.

Валидаторы, реализующие протокол

Валидатор Назначение Автор
???  ??? shurik
Пример запроса: http://osm.sbin.ru/pt/vps?minlat=55.65778561672654&minlon=37.38329887390137&maxlat=55.67274455523506&maxlon=37.468013763427734
"name":"PT Demo",
"url":"http://osm.sbin.ru/pt/vps?bbox={minlon},{minlat},{maxlon},{maxlat}",
"types": {
  "some_error": {"text": "SOME ERROR"}
},
"frequency": 86400,
"cors": true
Валидатор сиротских улиц Выявление названных улиц (name=*) не входящих в границу города/поселка. Такие дороги не попадают в адресный поиск http://osm.org.ru ErshKUS
Пример запроса: http://openstreetmap.ru/api/bug_orphan_street?minlat=55.6&minlon=37.3&maxlat=55.7&maxlon=37.4
"name": "Валидатор сиротских улиц",
"url": "http://openstreetmap.ru/api/bug_orphan_street?minlat={minlat}&minlon={minlon}&maxlat={maxlat}&maxlon={maxlon}",
"types": {
  "test_error": {"text": "Улица вне полигона города/поселка"}
},
"offset_limit": false,
"cors": true,
"jsonp": false


Валидатор адресов/роутинга http://peirce.gis-lab.info/addr.php

Основные показатели, отражающие качество карт, при конвертации в СитиГид. Проверяется адресный реестр, дорожный граф и отрисовка карты.

Валидация Zkir, адаптация alno
Пример запроса: http://osm.alno.name/validators/zkir?minlat=55.6&minlon=37.3&maxlat=55.7&maxlon=37.4
 "name": "Валидатор адресов/роутинга Zkir",
 "url": "http://osm.alno.name/validators/zkir?minlat={minlat}&minlon={minlon}&maxlat={maxlat}&maxlon={maxlon}&types={filtered_types}",
 "types": {
   "city_without_population": {"text": "Город без населения"},
   "city_without_place_polygon": {"text": "Город без полигональной границы"},
   "city_without_place_node": {"text": "Город без точечного центра"},
   "routing_subgraph": {"text": "Рутинговый подграф"},
   "routing_subgraph_trunk": {"text": "Рутинговый подграф на уровне trunk"},
   "routing_subgraph_primary": {"text": "Рутинговый подграф на уровне primary"},
   "routing_subgraph_secondary": {"text": "Рутинговый подграф на уровне secondary"},
   "routing_subgraph_tertiary": {"text": "Рутинговый подграф на уровне tertiary"},
   "duplicate_point": {"text": "Точка-дубликат"},
   "building_not_in_place": {"text": "Здание за пределами населенного пункта"},
   "address_without_street": {"text": "Адрес без улицы"},
   "address_street_not_found": {"text": "Адресная улица не найдена"},
   "address_street_not_in_place": {"text": "Улица из адреса не связана с городом"},
   "address_by_territory": {"text": "Здание нумеруется по территории"},
   "address_street_not_routed": {"text": "Не-рутинговая улица"},
   "street_not_in_place": {"text": "Улица за пределами города"}
 },
 "offset_limit": true,
 "cors": true,
 "jsonp": true,
 "filtered_types": true

Компоненты для взаимодействия с валидаторами

Слой для Leaflet и контролы для управления набором видимых ошибое и используемых валидаторов (на базе jQuery): https://github.com/alno/osm-js-libs