Географические координаты всех городов на Земле

    В поисках базы данных городов мира для своего погодного сайта, наткнулся на интересный ресурс. На нем просто выложен список всех населенных пунктов, упорядоченный по странам и областям.

    Информация, предоставляемая для каждого населенного пункта:
    — географические координаты
    — высота над уровнем моря
    — часовой пояс
    — используется ли летнее/декретное время
    — ориентировочное количество жителей (обычно, сильно заниженное)

    Также отображается небольшая карта, метеорологическая информация и список ближайших аэродромов.

    Теперь сижу и думаю, как заполучить эту базу данных. Никакой контактной информации на сайте не нашел, ссылка «Credits» ведет вникуда. Просто стащить всю эту базу через http, видимо, не представляется возможным: только по России там больше 200000 точек. Это несколько суток непрерывного парсинга.

    Update:
    На сайте geonames.org найдена готовая к скачиванию база данных с подробной информацией по населенным пунктам всего мира. Только по России там 249 516 объектов.
    Огромное спасибо, sapl!

    Комментарии 57

      0
      Буду очень благодарен, если кто-нибудь подскажет, где можно взять подобную базу данных. Нужен список городов Земли (штук 10000-50000) с координатами, высотой и часовым поясом.
        +1
        напишите парсер с настройками. т.е. чтобы можно было бы указать диапазон.
        я помогу выкачать.

        — часовой пояс
        — используется ли летнее/декретное время

        Что то не увидел


        — ориентировочное количество жителей (обычно, сильно заниженное)


        в 5 раз :)
          0
          и правда, просто парсер самому писать не когда, а так присоединюсь к парсингу, я думаю если наберется человек 20 то проблема уже станет разрешимой.
            0
            хм... попробую написать парсер... недавно нечто подобное писалось... но тут конечно посложнее будет)
              0
              Сейчас пробую на свой сервер залить используя wget. Пока всё идет хорошо.
              Если на сайте нет защиты от скачивания всего-всего, то к утру будет все населенные пункты России.

              У меня же на сервере можно будет запустить парсер. Лишь бы скачалось...
                0
                думаю скачается, кудаж оно денется )
                  0
                  Процесс пошел. 500 страниц закачались за 20 минут.
                  Надеюсь, сайт примет меня за ГуглБота :-)
                  Утром напишу о результатах.
                    0
                    Тоже сразу захотелось скачать - подумал, что главное - "не спугнуть" :) Как докачаете страницы - выложите где-нибудь исходники? А потом уж совместными усилиями распарсим.
                      0
                      Ресурс имеет PR=6 и 840 000 страниц с ненулевым PR в индексе Google.
                      Куда он от нас денется..?

                      Может, скинуть им ссылку на SAPE? ))
                    +1
                    Больше половины населенных пунктов России закачалось. К вечеру будут готовы остальные. Дальше я захвачу весь мир :-)

                    По данных Гугла всего на сайте около 1.2 млн страниц.
                      0
                      как захватите весь мир - не поделитесь ли данными? :)
                        0
                        Запросто.
                          0
                          обещаете? =)
              0
              Часовой пояс есть на странице населенного пункта (а не в общей таблице):
              Time zone (est) UTC+3(+4DT)

              С количеством жителей что-то непонятное... В разных странах ошибки разные.
              0
              Когда-то я качал данные для Америки и Европы (или только Германии, не помню). С каких-то других сайтов, но слово Gazetteer узнаю. Размеры огромные (ок. гигабайта), формат, мягко говоря, странный. Так ничего с этим и не сделал. Я к тому, что эти базы данных почти наверняка можно найти.
                0
                Давно ищу... Мне даже такие подробные не нужны. Самая большая проблема с часовым поясом. На данный момент у меня есть база координат 1300 городов по России (многие с численностью населения из недавней переписи, русские названия) и 4500 городов остального мира. Это всё собиралось из разных источников (парсилось). Готовую базу данных нигде не встречал.
                0
                нашел в перу замечательный город:
                http://www.fallingrain.com/world/PE/8/Nahui.html
                  0
                  Там рядом озеро какое-то... Случайно, не Титикака? ))
                  0
                  Странные карты на этом сайте координат. Впечатление, что они создавались на основе карты начала прошлого века. Просто деревни и города до 50х годов там отмечены хоть как-то, а после не отмечены даже водохранилища. Сужу на основе своего города, которому уже 50 лет.
                    0
                    По Нижегородской области, вроде бы, современные населенные пункты есть...
                    Но численность населения из 30-х годов. Так что информация явно древняя.
                    0
                    Для моего родного города есть неточность. Точнее, там есть ещё один город с такими же данными, но название у него не Ижевск, а Ишевск.
                      0
                      Есть такое. Для моего города там штук 10 вариантов названия, но все они объединены по координате и файл описания один, как и для Ижевска (Izhevsk.html).
                      0
                      Берется база GeoIP от MaxMind
                      по ней можно узнать имя города\регион и координаты.
                      А далее есть википедия.
                      Я в данный момент обьдиняю эти две базы, плюс КЛАДР и гугл.
                      Получается гдето 4.2 крупных обьектов на територии россии( в зоне дейсвия КЛАДР) и 4059 вики статей..
                      Для большинсва обьектов есть история, часовой пояс, население, в том числе и по национальностям.. блин да что же я расказываю - это же ВИКИ!
                      Сейчас все еше идет сведение таблиц, через недельку будет финал.
                      Будет актуально - выложу
                        0
                        Еще есть алфавитный указатель наименований географических объектов и таблица численность и размещение населения на сайте переписи 2002 года. Таблица есть в виде excel-документа.

                        MaxMind для России я бы не стал использовать... Неизвестно, откуда они это всё насобирали. По их данным город Нижний Новгород называется Novgorod и находится где-то рядом с Владивостоком.

                        Ваш БД очень интересна. Какая информация туда в итоге буедт входить? Будут ли названия на русском/английском?
                          0
                          Базу я собирал для проекта типа МирТесен.
                          Все на русском языке.
                          Названия МаксМинда уточнялись через КЛАДР, координаты через гугль-геокодинг.
                          (если точнее - плясало все от КЛАДРа)
                          Проблема в том что великого города Рыбинкс( там проживает отписавшийся тут Vass) в гугле НЕТ.
                          В Максе есть его координаты. В кладре - название.
                          Как информация будет входить...ммм
                          Иеархия адресов до улиц, вики инфо, координаты. Названия на русском, но только Россия
                            0
                            Рыбинск
                              0
                              Всеравно нет :)
                          0
                          да, было бы отлично!
                          0
                          а откуда, если не секрет, вы брали данные по прогнозам?
                            0
                            Это данные GFS-модели. Ищите и найдёте :-)
                            GisMеtеo, например, активно торгует этими данными.
                            0
                            А кто-нибудь собирается скачивать оттуда весь мир? ;) А то я подумываю этим заняться.
                              0
                              Через пару часов у меня закончится загрузка российских населенных пунктов. Смогу выложить архив. Поставлю на загрузку всё остальное.

                              Просьба ко всем заинтересованным лицам:
                              Пока ничего не мешает мне продолжать качать страницы сайта. Озадачтесь, пожалуйста, парсером. Структуру парсить не нужно, т.к. она получается довольно логичная:
                              /world/{код_страны}/{номер_региона}/{название_населенного_пункта}.html
                                0
                                Сейчас занят проектами, в конце этой недели, начале следующей могу написать парсер, если до этого времени он еще будет нужен обращайтесь.
                                  0
                                  Отлично, давайте организуемся. Предлагаю такой принцип: выкачиваем страницы как есть (без картинок) и сохраняем их в сыром виде. Потом сливаем и распарсиваем.

                                  Я сделал список стран, которые надо выкачать, прямо в виде команд wget. Размещен тут: http://www.plaxo.ru/fallingrain (plaxo тут не при чем - просто первое что подвернулось). Давайте там организовываться.

                                  С такой формой выкачивания все согласны?
                                    0
                                    Как вам данные http://www.geonames.org?
                                    Я докачаю RS и буду разбираться с geonames. А дальше — посмотрим.
                                      0
                                      Да, уже тоже прочитал и обрадовался :) Наверное, выкачивание отменяется :)
                                +3
                                  0
                                  Хабрахабр — великий ресурс! Больше года я искал эту информацию. И вот! :)
                                    0
                                    так насколько эта база лучше хуже чем та, которую надо скачивать и парсить?

                                    у меня древнерусская привычка иметь самое большое и лучшее :)
                                      0
                                      Geonames немного больше + там есть родные наименования объектов на различных языках.
                                      И даже не знаю, зачем может понадобится столько объектов.
                                      Сам добавил только WHERE `population` > 1000. Это >80000 точек :-)
                                  0
                                  Люди!
                                  есть уже готовая база, с координатами и почти актуальным населением даже
                                  http://www.world-gazetteer.com/wg.php?x=…
                                  Примечание по координатам: напирмер в гугл-мапс цифры вида 5079 надо преобразовывать в 50.79, то есть последние две всегда после запятой
                                    0
                                    ох! Как раз искал именно это! А какая в итоге самая полная база с русскоязычными названиями?
                                      0
                                      Если нужна совсем полная и хорошая база с русскоязычными названиями, то придется объединять несколько баз. В базе geonames названия на нескольких языках указаны для небольшого количества объектов. Но никто не мешает приделать к ней русские/олбанские/кетайские названия по координатам...
                                        0
                                        а откуда взять эти названия? :-/
                                          0
                                          В таблице названий на всяких-разных языках нашлось около 80000 имен в кириллице. Сколько из них относится к России — не могу сказать. Но этого должно хватить для многих задач. Тем более, большего количества русских наименований я нигде не встречал. Так что в geonames уже всё приделано ))
                                      0
                                      Имеется в наличии вот эта база:
                                      http://www.geodatasource.com/cities-gold.html

                                      Именно ГОЛД ЭДИШН
                                      GeoDataSource™ Cities Database Gold Edition

                                      Рар-Архив 57 метров (экстракт 400 метров)
                                        0
                                        можешь куда-нибудь закачать? интересно на нее взглянуть ;)
                                          0
                                          На сайте дают скачать небольшой образец.
                                            +1
                                            Залил сюда: http://ifolder.ru/5294563

                                            GeoDataSource™ Cities Database Gold Edition (та которая стоит на сайте $1000+)
                                            Сразу предупреждаю: база краденная и соответственно пиратская ну и т.д. и т.п.
                                              0
                                              Вот спасибо!
                                            0
                                            Хорошая штука, но база от geonames.org лучше в некоторых мелочах. Например, у geonames есть информация о переходе на летнее время. И русскоязычных названий гораздо больше. Есть корректная информация о численности населения. Суммарный объем данных 750 Мб.
                                              0
                                              странно, сегодня скачал, запакованное все весит 370МБ, или вы распакованный размер указали?
                                                0
                                                Да, я имел ввиду распакованный размер файла со всеми населенными пунктами (allCountries.txt). Без альтернативных языков. Они еще на 80Mb потянут (alternateNames.txt).
                                            0
                                            Большое спасибо! Давно искала что-нибудь такое.
                                              0
                                              кстати просто большой список (без координат) есть тут http://speakrus.ru/dict/kladrw.zip
                                                0
                                                Да, списки хорошие, но, к сожалению? в них используется какая-то мутная нестандартная транслитерация и неизвестно вообще есть ли в ней твёрдое правило. Так что под сомнением то, можно ли это использовать в публичном проекте.

                                                Я-то было уже транслитератор сделал, который по госту работает, а тут такая лажа. Кто-нибудь продвинулся в этом вопросе?


                                                $from = array('/shh/', '/Shh/', '/jo/', '/zh/', '/jj/', '/kh/', '/ch/', '/sh/', '/eh/', '/yu/', '/ya/', '/Jo/', '/Zh/', '/Jj/', '/Kh/', '/Ch/', '/Sh/', '/Eh/', '/Yu/', '/Ya/', '/a/', '/b/', '/v/', '/g/', '/d/', '/e/', '/z/', '/i/', '/k/', '/l/', '/m/', '/n/', '/o/', '/p/', '/r/', '/s/', '/t/', '/u/', '/f/', '/c/', '/"/', '/y/', "/'/", '/A/', '/B/', '/V/', '/G/', '/D/', '/E/', '/Z/', '/I/', '/K/', '/L/', '/M/', '/N/', '/O/', '/P/', '/R/', '/S/', '/T/', '/U/', '/F/', '/C/', '/Y/');
                                                $to = array('щ', 'Щ', 'ё', 'ж', 'й', 'х', 'ч', 'ш', 'э', 'ю', 'я', 'Ё', 'Ж', 'Й', 'Х', 'Ч', 'Ш', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'з', 'и', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'ц', 'ъ', 'ы', 'ь', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'З', 'И', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Ц', 'Ы');


                                                $text = 'Varim shhi';

                                                ksort($from);
                                                ksort($to);

                                                $text = preg_replace($from, $to, $text);
                                                echo $text;
                                                  +1
                                                  Вот так выходит:

                                                  $lenName = strlen($arrRows[1]);
                                                  $trans0 = array (
                                                  "-Moscow" => "-Московский",
                                                  "Moscow" => "Москва",
                                                  "Queen Victoria Sea" => "Море Королевы Виктории",
                                                  "Africa" => "Африка",
                                                  "Vulcan" => "Вулкан",
                                                  "Blecna" => "Блесна",
                                                  "Волга-" => "Волго-",
                                                  "-Baltic" => "-Балтийский",
                                                  "Pokhicstnevskiy Rayon" => "Похвистневский район",
                                                  "Il’icehvka" => "Ильечевка",
                                                  "Fuyuansanjiao Zhou" => "Большой Уссурийский"
                                                  );
                                                  $trans1 = array (
                                                  "Shch" => "Щ",
                                                  "shch" => "щ",
                                                  "Yaye" => "Яе",
                                                  "yaye" => "яе",
                                                  "Yuye" => "Юе",
                                                  "yuye" => "юе",
                                                  "Yoye" => "Йое",
                                                  "yoye" => "йое",
                                                  "nnyy" => "нный",
                                                  "skyy" => "ский",
                                                  "chnyy" => "чный",
                                                  "lyy" => "лый",
                                                  "vyy" => "вый" );
                                                  $trans2 = array (
                                                  "que" => "к",
                                                  "Eye" => "Ее",
                                                  "eye" => "ее",
                                                  "Iye" => "Ие",
                                                  "iye" => "ие",
                                                  "iya" => "ия",
                                                  "Oye" => "Ое",
                                                  "oye" => "ое",
                                                  "Uye" => "Уе",
                                                  "uye" => "уе",
                                                  "Aye" => "Ае",
                                                  "aye" => "ае",
                                                  "yye" => "ые",
                                                  "yya" => "ия",
                                                  '"ye' => 'ъе',
                                                  "”ye" => "ъе",
                                                  '"ya' => 'ъя',
                                                  "”ya" => "ъя",
                                                  "''ye" => 'ъе',
                                                  "''ye" => "ъе",
                                                  "''ya" => 'ъя',
                                                  "''ya" => "ъя",
                                                  '’ye' => 'ье',
                                                  "'ye" => "ье",
                                                  '’ya' => 'ья',
                                                  "'ya" => "ья" );
                                                  $trans3 = array (
                                                  "ck" => "х",
                                                  "ca" => "ца",
                                                  "Cz" => "Ч",
                                                  "Ch" => "Ч",
                                                  "ch" => "ч",
                                                  "jh" => "ж",
                                                  "ji" => "жи",
                                                  "Kh" => "Х",
                                                  "kh" => "х",
                                                  "Oy" => "Ой",
                                                  "oy" => "ой",
                                                  "Qu" => "Ку",
                                                  "Ts" => "Ц",
                                                  "ts" => "ц",
                                                  "Sh" => "Ш",
                                                  "sh" => "ш",
                                                  "Zh" => "Ж",
                                                  "zh" => "ж",
                                                  "Yu" => "Ю",
                                                  "yu" => "ю",
                                                  "Ya" => "Я",
                                                  "ya" => "я",
                                                  "Yo" => "Йо",
                                                  "Jo" => "Йо",
                                                  "yo" => "йо",
                                                  "Ye" => "Е",
                                                  "yy" => "ий",
                                                  "iy" => "ий",
                                                  "Je" => "Е",
                                                  "je" => "е",
                                                  "Ja" => "Я",
                                                  "ja" => "я",
                                                  "ia" => "ия",
                                                  "''" => "ъ",
                                                  );
                                                  $trans4 = array (
                                                  "a" => "а",
                                                  "b" => "б",
                                                  //"c" => "ч",
                                                  "d" => "д",
                                                  "e" => "е",
                                                  "f" => "ф",
                                                  "g" => "г",
                                                  "h" => "х",
                                                  "i" => "и",
                                                  "j" => "й",
                                                  "k" => "к",
                                                  "l" => "л",
                                                  "m" => "м",
                                                  "n" => "н",
                                                  "o" => "о",
                                                  "p" => "п",
                                                  "r" => "р",
                                                  "s" => "с",
                                                  "t" => "т",
                                                  "u" => "у",
                                                  "v" => "в",
                                                  "w" => "в",
                                                  "x" => "кс",
                                                  "y" => "ы",
                                                  "z" => "з",
                                                  "A" => "А",
                                                  "B" => "Б",
                                                  "D" => "Д",
                                                  "E" => "Е",
                                                  "F" => "Ф",
                                                  "G" => "Г",
                                                  "H" => "Х",
                                                  "I" => "И",
                                                  "K" => "К",
                                                  "L" => "Л",
                                                  "M" => "М",
                                                  "N" => "Н",
                                                  "O" => "О",
                                                  "P" => "П",
                                                  "R" => "Р",
                                                  "S" => "С",
                                                  "T" => "Т",
                                                  "U" => "У",
                                                  "V" => "В",
                                                  "W" => "В",
                                                  "Y" => "Ы",
                                                  "Z" => "З",
                                                  '"' => 'ъ',
                                                  "”" => "ъ",
                                                  "’" => "ь",
                                                  "'" => "ь" );
                                                  $trans5 = array (
                                                  "рний" => "рный",
                                                  "яний" => "яный",
                                                  "сний" => "сный",
                                                  "одний" => "одный",
                                                  "ведний" => "ведный",
                                                  "ений" => "еный",
                                                  "ёний" => "ёный",
                                                  "емний" => "емный",
                                                  "ёмний" => "ёмный",
                                                  "брий" => "брый",
                                                  "Старий" => "Старый",
                                                  "старий" => "старый",
                                                  "стий" => "стый",
                                                  "ежний" => "ежный",
                                                  "ёжний" => "ёжный",
                                                  "ольний" => "ольный",
                                                  "ельний" => "ельный" );
                                                  for($i=0; $i<$lenName; $i++) {
                                                  $arrRows[1] = strtr($arrRows[1], $trans0); }
                                                  for($i=0; $i<$lenName; $i++) {
                                                  $arrRows[1] = strtr($arrRows[1], $trans1); }
                                                  for($i=0; $i<$lenName; $i++) {
                                                  $arrRows[1] = strtr($arrRows[1], $trans2); }
                                                  for($i=0; $i<$lenName; $i++) {
                                                  $arrRows[1] = strtr($arrRows[1], $trans3); }
                                                  for($i=0; $i<$lenName; $i++) {
                                                  $arrRows[1] = strtr($arrRows[1], $trans4); }
                                                  for($i=0; $i<$lenName; $i++) {
                                                  $arrRows[1] = strtr($arrRows[1], $trans5); }
                                                  $ruName = $arrRows[1];

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

                                                Самое читаемое