Подтвердить что ты не робот

Как получить местоположение посетителя (т.е. Страну) с использованием геолокации?

Я пытаюсь расширить встроенную функцию геолокации

if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;
    });
}

чтобы я мог использовать название страны посетителя (возможно, вернуть информативный массив).

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

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

4b9b3361

Ответ 1

Вам не нужно искать пользователя, если вам нужна только его страна. Вы можете посмотреть их IP-адрес в любой службе IP-to-location (например, maxmind). Это будет точным большую часть времени.

Если вам действительно нужно узнать их местоположение, вы можете получить их широту/долготу с помощью этого метода, а затем запросить службу обратного геокодирования Google или Yahoo.

Ответ 2

Для этого вы можете использовать мой сервис http://ipinfo.io. Он предоставит вам IP-адрес клиента, имя хоста, информацию о геолокации (город, регион, страну, код города, почтовый индекс и т.д.) И владелец сети. Вот простой пример, который регистрирует город и страну:

$.get("https://ipinfo.io", function(response) {
    console.log(response.city, response.country);
}, "jsonp");

Здесь представлен более подробный пример JSFiddle, который также выводит полную информацию об ответах, поэтому вы можете увидеть все доступные детали: http://jsfiddle.net/zK5FN/2/

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

Ответ 3

Вы можете использовать свой IP-адрес для получения "страны", "города", "isp" и т.д.

Просто используйте одну из веб-сервисов, которые предоставляют вам простой api, например http://ip-api.com, который предоставляет вам услугу JSON по адресу http://ip-api.com/json. Просто отправьте запрос Ajax (или Xhr), а затем проанализируйте JSON, чтобы получить нужные данные.

var requestUrl = "http://ip-api.com/json";

$.ajax({
  url: requestUrl,
  type: 'GET',
  success: function(json)
  {
    console.log("My country is: " + json.country);
  },
  error: function(err)
  {
    console.log("Request failed, error= " + err);
  }
});

Ответ 4

Посмотрите ipdata.co - сервис, который я построил, который быстр и имеет надежную производительность благодаря 10 глобальным конечным точкам, каждая из которых способна обрабатывать> 10 000 запросов в секунду!

В этом ответе используется "тестовый" API-ключ, который очень ограничен и предназначен только для тестирования нескольких вызовов. Зарегистрируйтесь для получения своего бесплатного ключа API и ежедневно получайте до 1500 запросов на разработку.

Этот фрагмент вернет детали вашего текущего ip. Для поиска других ip-адресов просто добавьте ip к https://api.ipdata.co?api-key=test url, например.

https://api.ipdata.co/1.1.1.1?api-key=test

API также предоставляет поле is_eu указывающее, находится ли пользователь в стране ЕС.

$.get("https://api.ipdata.co?api-key=test", function (response) {
    $("#response").html(JSON.stringify(response, null, 4));
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="response"></pre>

Ответ 5

Очень простой в использовании сервис предоставляется ws.geonames.org. Вот пример URL:

http://ws.geonames.org/countryCode?lat=43.7534932&lng=28.5743187&type=JSON

И вот некоторый (jQuery) код, который я добавил в ваш код:

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        $.getJSON('http://ws.geonames.org/countryCode', {
            lat: position.coords.latitude,
            lng: position.coords.longitude,
            type: 'JSON'
        }, function(result) {
            alert('Country: ' + result.countryName + '\n' + 'Code: ' + result.countryCode);
        });
    });
}​

Попробуйте на jsfiddle.net...

Ответ 6

вы не можете получить местоположение города по ip. здесь вы можете получить страну с jquery:

$.get("http://ip-api.com/json", function(response) {
console.log(response.country);}, "jsonp");

Ответ 7

Бесплатный и простой в использовании сервис предоставляется по адресу Webtechriser (нажмите здесь, чтобы прочитать статью) (называемый wipmania). Это служба JSONP и требует простого javascript кодирования с HTML. Его также можно использовать в JQuery. Я немного изменил код, чтобы изменить выходной формат, и это то, что я использовал и нашел, что он работает: (это код моей HTML-страницы)

<html>
    <body>
        <p id="loc"></p>


        <script type="text/javascript">
            var a = document.getElementById("loc");

  	            function jsonpCallback(data) { 
	            a.innerHTML = "Latitude: " + data.latitude + 
                              "<br/>Longitude: " + data.longitude + 
                              "<br/>Country: " + data.address.country; 
 	            }
        </script>
        <script src="http://api.wipmania.com/jsonp?callback=jsonpCallback"
                     type="text/javascript"></script>


    </body>
</html>

Ответ 8

Для разработчиков, ищущих полнофункциональную утилиту геолокации, вы можете взглянуть на geolocator.js (я автор).

Пример ниже сначала попросит API-интерфейс HTML5 Geolocation для получения точных координат. Если это не удастся или отклонено, он будет возвращаться к поиску Geo-IP. Как только он получит координаты, он изменит геокодирование координат на адрес.

var options = {
    enableHighAccuracy: true,
    timeout: 6000,
    maximumAge: 0,
    desiredAccuracy: 30,
    fallbackToIP: true, // if HTML5 geolocation fails or rejected
    addressLookup: true, // get detailed address information
    timezone: true, 
    map: "my-map" // this will even create a map for you
};

geolocator.locate(options, function (err, location) {
    console.log(err || location);
});

Он поддерживает геолокацию (через поиск HTML5 или IP), геокодирование, поиск адресов (обратное геокодирование), расстояние и длительность, информацию о часовом поясе и многое другое...

Ответ 9

Вы можете использовать ip-api.io, чтобы получить местоположение посетителя. Он поддерживает протокол IPv6.

В качестве бонуса он позволяет проверить, является ли ip-адрес tor node, общедоступным прокси-сервером или спамером.

Код JavaScript:

function getIPDetails() {
    var ipAddress = document.getElementById("txtIP").value;

    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            console.log(JSON.parse(xhttp.responseText));
        }
    };
    xhttp.open("GET", "http://ip-api.io/json/" + ipAddress, true);
    xhttp.send();
}

<input type="text" id="txtIP" placeholder="Enter the ip address" />
<button onclick="getIPDetails()">Get IP Details</button>

Код jQuery:

$(document).ready(function () {
        $('#btnGetIpDetail').click(function () {
            if ($('#txtIP').val() == '') {
                alert('IP address is reqired');
                return false;
            }
            $.getJSON("http://ip-api.io/json/" + $('#txtIP').val(),
                 function (result) {
                     alert('Country Name: ' + result.country_name)
                     console.log(result);
                 });
        });
    });

<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<div>
    <input type="text" id="txtIP" />
    <button id="btnGetIpDetail">Get Location of IP</button>
</div>