Решаю тривиальную задачу. Из файла ОСМ выбрать всего города региона (группы регионов, страны). Аналогичная задача стоит и по ПГТ.
Как просто программным путём выбрать границы городов чтобы дать ссылку нужного зума?
Задача разбивается на две:
Найти все города (или ПГТ)
Найти контур города и вписать его в минимальный прямоугольник
Но как найти именно города? Ведь place=town это не город а объект классификации:
Единственный адекватный путь который я вижу - парсить Дежинскую проверялку ( http://yav.gis-lab.info/boundaries/ ). Но какова гарантия что это проверялка не навернётся в какой-нибудь момент? Да и экспорт оттуда не так уж и лёгок и оптимален …
Города по официальной классификации? Тогда в России никак, так как официальная классификация НП в OSM на данный момент отсутствует. Единственный способ - использовать сторонний справочник с официальной классификацией (КЛАДР и т.п.)
Несмотря на то что я считаю валидатор границ одной из лучших разработок в российском OSM, хранение важной информации в стороннем (вне OSM) проекте выглядит как немасштабируемое решение. Грубо говоря, чтобы Джону из США разобраться где в России города (а это официальный статус, Пущино может быть городом а может быть деревней в Московской области) то ему придётся изучать валидатор. Ну и вопрос с синхронизацией данных также актуален (у меня БД может оказаться старее или новее чем у валидатора).
Но делать самому аналог такого валидатора ещё более бессмысленная идея. Во всяком случае пока проверялка работает и поддерживается …
Не проще ли будет шерстить постгис? Что-нибудь вроде:
$query = "
SELECT
osm_id,
ST_X(way) AS lon,
ST_Y(way) AS lat,
place,
COALESCE(\"name:ru\",name) AS name,
CASE place WHEN 'city' THEN 1
WHEN 'town' THEN 2
WHEN 'village' THEN 3
WHEN 'hamlet' THEN 4
WHEN 'suburb' THEN 5
ELSE 10 END AS place_ord
FROM
osm_point
WHERE
place IN ('city', 'town', 'village', 'hamlet', 'suburb');
";
Насчёт этого пропозала — я до сих пор против префикса ru: (и системы, поощряющей запихивание всего в один тег). Но статуса rfc нет, как нет и обсуждения — вообще. Не хотелось бы, чтобы Россия была покрыта некрасивыми тегами, и не хотелось бы в определённый момент наткнуться на войну правок из-за такой мелочи.
а если в россии тег town применять только для пгт , a city только для городов?
придётся конечно много ручками править. или сразу нет? ведь в америке так не делают…
началось…
place town пгт к примеру
place city. город. в россии же не различают большие и малые города - всё едино. даже москва - город.
place village деревни, поселки сельского типа и тп
place hamlet самые малые поселения.
Если хотите официальный статус - введите соответствующий тег. Никто и слова не скажет. Но не нужно пытаться приспособить для него уже используемый для других целей и имеющий другие принципы и градации.
Люблю четкие и конкретные определения. Вот сказал человек - и сразу ясно, все самые малые - в hamlet. И все не самые малые - не в hamlet. Все четко и понятно. Ура.
посмейся, не сдерживайся. мама дома тебе кашку жуёт и. в ротик складывает?
пишу щас с мобильного, потому и примеры не развёрнутые. думал люди сами могут додумать, по крайней мере во время обсуждения.
кстати в статье про тег пишут что в беларуси по-другому этот тег используют. нам не кошерно?