Вышла в свет новая версия русскоязычной базы данных стран и городов. Основные изменения:
- база 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
Сергей
27 декабря 2010, 5:44
Не плохая работа! но заметил что малая часть городов/сел были удалены, например:
Антил,Геба,Гиба,Карбук,Нита,Новокаякент,Новый Хушет,Сталское в «maxmind» есть а в объединённой базе нет. Такое наверно произошло и с другими мало известноми городами.
Может это произошло когда были отсеяны артефакты, я не знаю, но могу помочь правильно перевести название городов.
Сделать это можно так: с начало транслить все города в базе на русский язык, патом скриптом искать похожие совпадения с другой базы которая только с названиями городов(есть в формате txt), затем заменять совпадения.
Сергей
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."'";
есть лучший вариант?
NetLoad
27 декабря 2010, 11:48
Скорее всего названия небольших городов потерялись на этапе перевода (Google не знает таких). На досуге попробую другую технику перевода, возможно, будет лучший результат.
Сравнивать со списком городов – отличная идея, да вот не нашёл я приличный список городов мира. Если у Вас есть такой – поделитесь.
По поводу запроса к базе данных. Конструкция с вложенным SELECT в моем запросе выглядит страшно, но она отрабатывает на два порядка быстрее, чем один запрос с двумя условиями. Невероятно, но факт.
Сергей
27 декабря 2010, 22:38
Ваш запрос с начало проверяет страну, патом город? можно взглянуть?
NetLoad
27 декабря 2010, 22:41
В архиве «Страны и города» есть пример запросов.
Виктор
14 января 2011, 1:26
А сколько в базе стран и сколько городов?
Можно ли использовать эту базу в качестве классификатора стран и городов (как MaxMind World Cities без координат, но на русском)?
NetLoad
15 января 2011, 13:49
В базе все страны (таблица net_country) и ~ 57 тысяч городов (таблица net_city). В русских названиях городов возможны ошибки.