RU:Validator protocol
Протокол взаимодействия в валидаторами (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:
- Шаблон url: http://check.me/do.php?minlat={minlat}&minlon={minlon}&maxlat={maxlat}&maxlon={maxlon}&from={offset}&count={limit}
- Bbox: [20.11 31.55, 20.25 32.3756]
- Offset: 5
- Limit: 10
- Url запроса: http://check.me/do.php?minlat=20.11&minlon=31.55&maxlat=20.25&maxlon=32.3756&from=5&count=10
Пример 2:
- Шаблон url: http://validator.com/check?from={minlat},{minlon}&to={maxlat},{maxlon}&types={filtered_types}
- Bbox: [1 2, 3 4]
- Filtered types: some_error, another_error
- Url запроса: http://validator.com/check?from=1,2&to=3,4&types=some_error,another_error
В случае, если валидатор объявил о поддержке 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