Как найти города на карте?

Решаю тривиальную задачу. Из файла ОСМ выбрать всего города региона (группы регионов, страны). Аналогичная задача стоит и по ПГТ.

Как просто программным путём выбрать границы городов чтобы дать ссылку нужного зума?

Задача разбивается на две:

  1. Найти все города (или ПГТ)
  2. Найти контур города и вписать его в минимальный прямоугольник

Но как найти именно города? Ведь place=town это не город а объект классификации:

Единственный адекватный путь который я вижу - парсить Дежинскую проверялку ( http://yav.gis-lab.info/boundaries/ ). Но какова гарантия что это проверялка не навернётся в какой-нибудь момент? Да и экспорт оттуда не так уж и лёгок и оптимален …

Что делать? Есть ли более адекватный путь?

Города по официальной классификации? Тогда в России никак, так как официальная классификация НП в OSM на данный момент отсутствует. Единственный способ - использовать сторонний справочник с официальной классификацией (КЛАДР и т.п.)

Полагаться только на данные OSM нельзя.
Можно использовать выгрузки валидатора совместно с базой ОКАТО.

Спасибо!

Несмотря на то что я считаю валидатор границ одной из лучших разработок в российском OSM, хранение важной информации в стороннем (вне OSM) проекте выглядит как немасштабируемое решение. Грубо говоря, чтобы Джону из США разобраться где в России города (а это официальный статус, Пущино может быть городом а может быть деревней в Московской области) то ему придётся изучать валидатор. Ну и вопрос с синхронизацией данных также актуален (у меня БД может оказаться старее или новее чем у валидатора).

Но делать самому аналог такого валидатора ещё более бессмысленная идея. Во всяком случае пока проверялка работает и поддерживается …

Вся надежда на Дежина :slight_smile:

Не проще ли будет шерстить постгис? Что-нибудь вроде:

$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');
";

Офф - в Чехии 595 населённых пунктов имеют статус города (město). Из них только 132 имеют население более 10000 жителей :slight_smile:

Я просто не работал с постгис и ничего не знаю про точность и актуальность данных там. Если там всё ОК - то почему бы и нет.

Гарантий действительно ни каких. Но то что касается легкости и оптимальности - это всё обсуждаемо в принципе.

Возможно и стоит проставить в полу-ручном режиме статусы городам и пгт, например так. Это всего 2500 записей ведь.

PostGis - это расширение PostgreSQL для работы с геоданными. Какие данные туда положишь - такие и получишь. :slight_smile:

Да, я с ПокетГИС перепутал :slight_smile:
Но да, прежде чем что-то получить нужно правильно положить, а проверялка уже и так работает :slight_smile:

http://gis-lab.info/qa/openbase.html

Ну или взять в зубы osm2pgsql, imposm или даже osmosis и самому залить нужные данные в свою базу.

PS: 1024-й пост на форуме.

Насчёт этого пропозала — я до сих пор против префикса ru: (и системы, поощряющей запихивание всего в один тег). Но статуса rfc нет, как нет и обсуждения — вообще. Не хотелось бы, чтобы Россия была покрыта некрасивыми тегами, и не хотелось бы в определённый момент наткнуться на войну правок из-за такой мелочи.

Спасибо, буду знать!

а если в россии тег town применять только для пгт , a city только для городов?
придётся конечно много ручками править. или сразу нет? ведь в америке так не делают…

а какие теги применять только для деревень, сёл, хуторов, посёлков сельского типа, аулов, местечек, посёлков при станции, крупных городов?

началось… :frowning:
place town пгт к примеру
place city. город. в россии же не различают большие и малые города - всё едино. даже москва - город.
place village деревни, поселки сельского типа и тп
place hamlet самые малые поселения.

Если хотите официальный статус - введите соответствующий тег. Никто и слова не скажет. Но не нужно пытаться приспособить для него уже используемый для других целей и имеющий другие принципы и градации.

А если сначала ознакомиться с сутью тега place?
Для официальной классификации применяйте другие теги.

Люблю четкие и конкретные определения. Вот сказал человек - и сразу ясно, все самые малые - в hamlet. И все не самые малые - не в hamlet. Все четко и понятно. Ура.

посмейся, не сдерживайся. мама дома тебе кашку жуёт и. в ротик складывает?
пишу щас с мобильного, потому и примеры не развёрнутые. думал люди сами могут додумать, по крайней мере во время обсуждения.

кстати в статье про тег пишут что в беларуси по-другому этот тег используют. нам не кошерно?