Простым способом является использование GeoLite ( http://dev.maxmind.com/geoip/legacy/geolite/ ). Поскольку он использует локальную базу данных, вызовы веб-служб не требуются, и это намного быстрее для геокодирования большого количества IP-адресов.
Вот как это сделать:
Добавить этот артефакт Maven:
com.maxmind.geoip
geoip-api
1.2.11
Загрузите файл геолокационных данных из http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
Распакуйте файл в любую папку. Затем выполните:
LookupService cl = new LookupService("/var/geolite/GeoLiteCity.dat",
LookupService.GEOIP_MEMORY_CACHE | LookupService.GEOIP_CHECK_CACHE);
Location location = cl.getLocation("some ip address");
Результат будет в объекте Location в свойствах широты, долготы, города, региона и страны.
Пожалуйста, взгляните на их оценки точности на обеспечить его соответствие потребностям вашего проекта: http://www.maxmind.com/en/geolite_city_accuracy .