Получить пользовательское состояние с Geolocation

Какой самый эффективный способ получить государство-член Соединенных Штатов? Является ли HTML5 Geolocation вариантом без необходимости использования карт Google?

Ответ 1

Вот несколько примеров в JavaScript и JSON (с помощью jQuery) с использованием метода поиска IP (с помощью IPinfoDB) и API геолокации (с помощью Google Maps API и YQL).

В обоих примерах я извлекаю регион и страну, но есть несколько значений, которые вы можете выбрать. Помните, что в этих примерах нет обработки ошибок, и здесь они редактируются для краткости, в противном случае см. полную демонстрацию.

Поиск IP-адресов в JavaScript

Этот метод хорош, потому что он прост в реализации и довольно точен на уровне страны, но точность значительно снижается для чего-то более конкретного.

// API key excluded for brevity, see full demo.
var apiurl = 'http://api.ipinfodb.com/v3/ip-city';
$.getJSON(apiurl+'/format=json&callback=?',
    function(data){
        $("h3#location").html(data.regionName + ", " + data.countryName);
    }
);

API геолокации

Хотя это и не идеально, этот метод так же точен, как и он. Пользователю предлагается поделиться сведениями о геолокации, которые могут уменьшить использование.

navigator.geolocation.getCurrentPosition(function(pos){
    $.getJSON(apiurl+'/format=json&callback=?',
        function(data){
            var regionName = data[...]AdministrativeAreaName;
            var countryName = data[...]CountryName;
            $("h3#location").html(regionName + ", " + countryName);
        }
    );
});

Там вы увидите, что я использовал Google Maps API v3 с помощью YQL так что возможен обратный вызов JSON.

Полная демонстрация: http://jsfiddle.net/ZjXXh

Ответ 2

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

Что касается разработчика веб-сайта, если вы полагаетесь на это, вы должны знать, что во-первых, пользователь должен принять, чтобы предоставить вашему сайту местоположение. Большинство людей не видит, другие игнорируют сообщение и что вы делаете, когда у пользователя есть Internet Explorer или более старый браузер, который не поддерживает эту функцию, или если у него нет Wi-Fi, включенного на компьютере. Подумав, что в большинстве случаев вы получите приблизительное местоположение в 2 км, тогда вы будете запрашивать в большинстве случаев информацию об уровне города, которая может быть не более, чем геолокация по IP может дать вам.

Преимущества геолокации по IP: * Вам не нужно беспокоиться о том, что у пользователя устаревший браузер * Вам не нужно беспокоиться о том, что пользователь боится запроса поделиться своим местоположением. Он не знает, что это не его точное местоположение, а приблизительное. * Пользователь не получает уведомление о том, что вы используете его компьютер для отслеживания местоположения. * Он работает на компьютерах без wi-fi.

Я думаю, что идеальный способ сделать это - иметь обе системы. Спросите пользователя о местоположении, но если браузер устарел или пользователь не указал местоположение, переключитесь, чтобы получить местоположение от IP. Чтобы получить местоположение от IP, вы можете использовать API IPGP здесь: http://www.ipgp.net/developer-tools/

Ответ 3

Я не уверен, что он более эффективен, но другой альтернативой является поиск по IP. Это может быть неверно, хотя и только приблизительное местоположение.

Ответ 4

Предполагалось, что вы уже получили широту и долготу от обратного вызова Geolocation, то, что вам нужно, называется обратным геокодированием. (Геокодирование означает поиск широты и долготы по адресу, поэтому очевидно, что делает обратное геокодирование).

Служба геокодирования (а также обратного геокодирования) Google бесплатна. Вы можете прочитать здесь API: http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding

Не забудьте обратиться за ключом API Карт Google, прежде чем использовать его.

Ответ 5

Да, геолокация является наиболее эффективным способом по сравнению с gmaps, если вы действительно сидите и сравниваете скорости и накладные расходы (для вас/вашего сервера я имею в виду), как браузер дает вам. Gmaps требует знания своего API, прежде чем вы сможете его использовать. Но геолокация проще. В статье здесь четко описывается геолокация. Вот фрагмент кода, взятый с этого сайта, который довольно прост

navigator.geolocation.getCurrentPosition(show_map);
function show_map(position) {
  var latitude = position.coords.latitude;
  var longitude = position.coords.longitude;
  // let show a map or do something interesting!
}

Ответ 6

Использовать сторонний API, такой как my ipdata.co

$.get("https://api.ipdata.co/74.125.230.195", function(data, status){
    console.log(data.region);
});