RSS
 

База GeoIP – страны и города, декабрь 2010

20 Дек

Вышла в свет новая версия русскоязычной базы данных стран и городов. Основные изменения:
- база maxmind.com была объединена с базой городов России ipgeobase.ru
- с помощью Переводчика Google были переведены на русский язык ~60,000 названий, а затем с помощью Яндекс.Карт из них были отсеяны артефакты типа «Инь молодых» и «Авиаторов деревня»
- были удалены дубли и произведена оптимизация структуры базы.
Результат этой работы доступен для свободного скачивания.

База распространяется в двух модификациях: «Страны и города» (14Mb, после установки ~77Mb)  и «Только страны» (1Mb, после установки ~6Mb).  Также в архивах находится небольшой пример использования базы данных на php.

Точность определения страны ~99%, точность определения городов в среднем ~95%, России ~98%, Украины ~90%.  Много это или мало – зависит от задач, которые собираетесь решать с помощью этой базы.

Тестовое демо – определение вашей страны и города по IP-адресу

Рабочее демо – автоподстановка города в форме поиска билетов

Для установки базы рекомендую воспользоваться программами типа mysqldumper или через ssh выполнить
mysql –p –uюзер база_данных < файл.sql

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

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

Добавлено 21.12.2010:
Исправлена ошибка в базе «Страны и города», файл обновлён.

Добавлено 24.01.2011:
Вышла новая версия базе данных, январь 2011

 

Тэги:

Обсудить

 

 
  1. Сергей

    27 декабря 2010, 5:44

    Не плохая работа! но заметил что малая часть городов/сел были удалены, например:
    Антил,Геба,Гиба,Карбук,Нита,Новокаякент,Новый Хушет,Сталское в «maxmind» есть а в объединённой базе нет. Такое наверно произошло и с другими мало известноми городами.
    Может это произошло когда были отсеяны артефакты, я не знаю, но могу помочь правильно перевести название городов.

    Сделать это можно так: с начало транслить все города в базе на русский язык, патом скриптом искать похожие совпадения с другой базы которая только с названиями городов(есть в формате txt), затем заменять совпадения.

     
  2. Сергей

    27 декабря 2010, 5:53

    и ещё….

    function ipaddress_to_uint32($ip)
    {
    list($v4,$v3,$v2,$v1) = explode(«.», $ip);
    return ($v4*256 *256*256) + ($v3*256*256) + ($v2*256) + ($v1);
    }

    $i = ipaddress_to_uint32($ip);

    $query = «select * from `net_city_ip` where begin_ip<= $i and $i <=end_ip;";
    $result = mysql_query($query);
    if ($row = mysql_fetch_assoc($result))
    {
    $locId = $row['id'];
    }

    $query = "select * from `net_city` where city_id='".$locId."'";

    есть лучший вариант?

     
  3. NetLoad

    27 декабря 2010, 11:48

    Скорее всего названия небольших городов потерялись на этапе перевода (Google не знает таких). На досуге попробую другую технику перевода, возможно, будет лучший результат.
    Сравнивать со списком городов – отличная идея, да вот не нашёл я приличный список городов мира. Если у Вас есть такой – поделитесь.

    По поводу запроса к базе данных. Конструкция с вложенным SELECT в моем запросе выглядит страшно, но она отрабатывает на два порядка быстрее, чем один запрос с двумя условиями. Невероятно, но факт.

     
  4. Сергей

    27 декабря 2010, 22:38

    Ваш запрос с начало проверяет страну, патом город? можно взглянуть?

     
  5. NetLoad

    27 декабря 2010, 22:41

    В архиве «Страны и города» есть пример запросов.

     
  6. Виктор

    14 января 2011, 1:26

    А сколько в базе стран и сколько городов?
    Можно ли использовать эту базу в качестве классификатора стран и городов (как MaxMind World Cities без координат, но на русском)?

     
  7. NetLoad

    15 января 2011, 13:49

    В базе все страны (таблица net_country) и ~ 57 тысяч городов (таблица net_city). В русских названиях городов возможны ошибки.