Как получить местоположение посетителя (т. е. страна) с помощью геолокации? [дубликат]


этот вопрос уже есть ответ здесь:

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

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

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

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

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

9 68

9 ответов:

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

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

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

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

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

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

вы можете использовать ваш IP-адрес, чтобы получить свой 'страна', 'город', 'провайдер' и т. д...
Просто используйте один из веб-сервисов, которые предоставляют вам простой API как http://ip-api.com, которое предоставит вам сервиса JSON в http://ip-api.com/json. Просто отправьте Аякс (или 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);
  }
});

см.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>

вот скрипка;https://jsfiddle.net/ipdata/6wtf0q4g/922/

я писал этой детальный анализ 8 лучших IP API Геолокации.

очень простой в использовании сервис предоставляется 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 ...

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

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

бесплатный и простой в использовании сервис предоставляется 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>

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: эта служба получает местоположение посетителя без побуждение посетителя выбрать, следует ли делиться своим местоположением, в отличие от HTML 5 geolocation API (код, который вы написали). Таким образом, конфиденциальность нарушается. Таким образом, вы должны использовать эту услугу в судебном порядке.

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

пример ниже сначала попробует HTML5 Geolocation API, чтобы получить точные координаты. Если не удается или отклонено,он вернется к поиску 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-поиск), геокодирование, поиск адресов (обратное геокодирование), расстояние и продолжительность, информация о часовом поясе и многое другое...

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

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

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>