Простой способ - с GeoLite (http://dev.maxmind.com/geoip/legacy/geolite/).). Поскольку он использует локальную базу данных, не требуются вызовы веб-службы, и он намного быстрее для геокодирования большого количества IP-адресов.
Вот как:
Добавить артефакт Maven:
<dependency>
<groupId>com.maxmind.geoip</groupId>
<artifactId>geoip-api</artifactId>
<version>1.2.11</version>
</dependency>
Загрузить файл данных геолокации из 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 в свойствах широты, долготы, города, региона и countryCode.
Пожалуйста, посмотрите на их оценки точности, чтобы убедиться, что они соответствуют потребностям вашего проекта: http://www.maxmind.com/en/geolite_city_accuracy.