Лучший способ получить географическое положение в Java - PullRequest
20 голосов
/ 12 сентября 2009

Каков наилучший способ получения географического местоположения в Java (по возможности бесплатно)

Обновление: не с устройства GPS. Как это делает Firefox 3.5 / HTML 5

Ответы [ 11 ]

16 голосов
/ 18 октября 2013

Простой способ - с 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.

6 голосов
/ 12 сентября 2009

Самая большая база данных WiFi-to-location, вероятно, SkyHook Wireless , используемая Apple и Google для их географического местоположения. Доступны SDK - см. http://skyhookwireless.com/developers/.

4 голосов
/ 12 марта 2011

Лучшая библиотека с открытым исходным кодом для геолокации в Java теперь http://geo -google.sourceforge.net / index.html , основанная на API карт Google (вам просто нужен ключ API карт Google) использовать его)

2 голосов
/ 12 сентября 2009

Если вам нужна локальная база данных, вы можете проверить, что IPInfoDB может предложить.

Если вы можете использовать веб-службу, то там есть номер, но я не уверен, что допускают его Условия обслуживания. A Поиск в Google по запросу "ip geolocation lookup web service" обнаруживает некоторые вещи, но многие из них являются коммерческими продуктами, и вам необходимо внимательно прочитать их ПС, чтобы убедиться, что вы используете их в соответствии с указаниями. *

1 голос
/ 05 ноября 2017

Вот пример, основанный на API ipdata.co , который бесплатно до 1500 запросов в день.

Замените 8.8.8.8 IP-адресом, который вы хотите посмотреть

// Maven : Add these dependecies to your pom.xml (java6+)
// <dependency>
//     <groupId>org.glassfish.jersey.core</groupId>
//     <artifactId>jersey-client</artifactId>
//     <version>2.8</version>
// </dependency>
// <dependency>
//     <groupId>org.glassfish.jersey.media</groupId>
//     <artifactId>jersey-media-json-jackson</artifactId>
//     <version>2.8</version>
// </dependency>

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;

Client client = ClientBuilder.newClient();
Response response = client.target("https://api.ipdata.co/8.8.8.8?api-key=test")
  .request(MediaType.TEXT_PLAIN_TYPE)
  .header("Accept", "application/json")
  .get();

System.out.println("status: " + response.getStatus());
System.out.println("headers: " + response.getHeaders());
System.out.println("body:" + response.readEntity(String.class));
1 голос
/ 06 января 2017

Вы говорите, что у вас все в порядке с веб-службами, поэтому вы можете использовать мой API http://ipinfo.io. Вот пример вывода JSON для IP-адреса:

$ curl ipinfo.io
{
  "ip": "24.6.61.239",
  "hostname": "c-24-6-61-239.hsd1.ca.comcast.net",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
  "loc": "37.3845,-122.0881",
  "org": "AS7922 Comcast Cable Communications, LLC",
  "postal": "94040"
}

Подробнее см. https://ipinfo.io/developers.

1 голос
/ 07 декабря 2012

Я рекомендую использовать http://jgeocoder.sourceforge.net/ если вы используете SVGE jgeocoder - бесплатный Java Geocoder

1 голос
/ 10 мая 2012

вы можете попробовать http://code.google.com/p/mygeoloc/

1 голос
/ 14 сентября 2009

Если я достаточно хорошо понимаю, вы хотите узнать географическое местоположение посетителей вашего сайта или веб-приложения. Альтернативы, которые я знаю:

Google Gears имеет несколько функций для создания GeoLocation (http://code.google.com/apis/gears/api_geolocation.html),, но необходимо установить Gears

Использование функций JavaScript, которые вызывают онлайн-сервис, таких как IP Location Tools (www dot iplocationtools dot com). На сайте есть примеры и даже есть видеоурок.

1 голос
/ 12 сентября 2009

Если вы хотите узнать, как Firefox 3.5 (или Google Chrome) получает геолокацию, посмотрите здесь: Как работает Google / Firefox API геолокации

По сути, Firefox 3.5 (также как и Chrome) получает список ближайших сетей Wi-Fi и отправляет этот список с помощью JSON в веб-сервис Google, который затем возвращает приблизительные координаты.

Кстати, в этом процессе нет Java. Чтобы получить геолокацию от Firefox / Chrome, достаточно вызвать несколько методов JavaScript. (Я действительно надеюсь, что вы знаете, что Java отличается от JavaScript)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...