Jak uzyskać lokalizację odwiedzającego (tj. kraj) za pomocą geolokalizacji?

Próbuję rozszerzyć natywną funkcję geolokalizacyjną

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

Abym mógł użyć nazwy kraju odwiedzającego (być może zwrócić tablicę informacyjną).

Do tej pory udało mi się znaleźć tylko funkcje wyświetlające interfejs google maps, ale żadna nie dała tego, czego chcę, z wyjątkiem tej biblioteki, która działała dobrze w tym przykładzie, ale z jakiegoś powodu nie działała na moim komputerze. Nie wiem, dlaczego poszło źle.

Anyway, Czy wiesz, jak mogę po prostu zwrócić tablicę zawierającą informacje takie jak kraj, miasto itp. od szerokości i długości geograficznej?

Author: TylerH, 2010-08-15

9 answers

Nie musisz zlokalizować użytkownika, jeśli potrzebujesz tylko jego kraju. Możesz sprawdzić ich adres IP w dowolnej usłudze IP-to-location (takiej jak maxmind, ipregistry lub ip2location ). To będzie dokładne przez większość czasu.

Jeśli naprawdę chcesz uzyskać ich lokalizację, możesz uzyskać ich lat/lng za pomocą tej metody, a następnie odpytywać Google lub Yahoo odwrócone geokodowanie.

 44
Author: Galen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-18 15:28:45

Możesz skorzystać z moich usług, http://ipinfo.io , za to. Poda ci adres IP klienta, nazwę hosta, informacje geolokalizacyjne (miasto, region, kraj, numer kierunkowy, kod pocztowy itp.) i właściciela sieci. Oto prosty przykład, który rejestruje miasto i kraj:

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

Oto bardziej szczegółowy przykład JSFiddle, który wyświetla również pełne informacje o odpowiedzi, dzięki czemu możesz zobaczyć wszystkie dostępne szczegóły: http://jsfiddle.net/zK5FN/2/

Lokalizacja będzie generalnie mniej dokładne niż natywne szczegóły geolokalizacji, ale nie wymaga żadnych uprawnień użytkownika.

 203
Author: Ben Dowling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-23 16:31:30

Możesz użyć swojego adresu IP, aby uzyskać swój "kraj", "miasto", " isp " itp...
Wystarczy skorzystać z jednej z usług internetowych, które zapewniają proste api, takie jak http://ip-api.com które zapewniają Ci usługę JSON w http://ip-api.com/json. Po prostu wyślij żądanie Ajax (lub Xhr), a następnie przeanalizuj JSON, aby uzyskać potrzebne dane.

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);
  }
});
 31
Author: Gil Epshtain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-21 12:10:17

Zobacz ipdata.co usługa, którą zbudowałem, jest szybka i niezawodna dzięki posiadaniu 10 globalnych punktów końcowych, z których każdy jest w stanie obsłużyć >10 000 zapytań na sekundę!

Ta odpowiedź używa klucza API' test', który jest bardzo ograniczony i przeznaczony tylko do testowania kilku wywołań. Zarejestruj się dla własnego darmowego klucza API i otrzymuj do 1500 zapytań dziennie do rozwoju.

Ten fragment zwróci dane Twojego bieżącego ip. Aby wyszukać inne ip adresy, wystarczy dołączyć ip do https://api.ipdata.co?api-key=test url np.

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

API zawiera również pole is_eu wskazujące, czy użytkownik znajduje się w kraju UE.

$.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>

Oto skrzypce; https://jsfiddle.net/ipdata/6wtf0q4g/922/

Napisałem również szczegółową analizę 8 najlepszych API geolokalizacyjnych IP.

 15
Author: Jonathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-29 13:15:35

Nie można uzyskać lokalizacji miasta po ip. tutaj możesz dostać country z jquery:

$.get("http://ip-api.com/json", function(response) {
console.log(response.country);}, "jsonp");
 12
Author: anmml,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-15 10:51:28

Bardzo łatwy w użyciu serwis jest dostarczany przez ws.geonames.org. Oto przykładowy adres URL:

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

A oto jakiś kod (jQuery) który dodałem do Twojego kodu:

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);
        });
    });
}​

Spróbuj na jsfiddle.net...

 9
Author: hippietrail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-31 16:49:23

Darmowy i łatwy w użyciu serwis jest dostępny pod adresem Webtechriser (kliknij tutaj, aby przeczytać artykuł) (nazywa się wipmania ). Ta usługa jest JSONP i wymaga zwykłego javascript kodowania za pomocą HTML. Może być również używany w JQuery . Zmodyfikowałem trochę kod, aby zmienić format wyjściowy i to jest to, czego używałem i okazało się działać: (to kod mojej strony 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>

Uwaga: to usługa pobiera lokalizację odwiedzającego Bez monitowania odwiedzającego, aby wybrać, czy udostępnić swoją lokalizację, w przeciwieństwie do HTML 5 geolocation API (kod, który napisałeś). Dlatego prywatność jest zagrożona. Powinieneś więc skorzystać z tej usługi.

 5
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-19 06:38:24

Dla programistów poszukujących w pełni funkcjonalnego narzędzia geolokalizacyjnego, możesz rzucić okiem na geolocator.js (jestem autorem).

Poniższy przykład najpierw spróbuje HTML5 geolocation API, aby uzyskać dokładne współrzędne. Jeśli się nie powiedzie lub zostanie odrzucony, powróci do wyszukiwania Geo-IP. Gdy otrzyma współrzędne, odwróci geokodowanie współrzędnych do adresu.

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);
});

Obsługuje geolokalizację( poprzez wyszukiwanie HTML5 lub IP), geokodowanie, wyszukiwanie adresów (reverse geocoding), odległość i czas trwania, informacje o strefie czasowej i więcej...

 3
Author: Onur Yıldırım,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 00:00:42

Możesz użyć ip-api.io Aby uzyskać lokalizację odwiedzającego. Obsługuje IPv6.

Jako bonus pozwala sprawdzić, czy adres ip jest węzłem tor, publicznym proxy lub spamerem.

Kod 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>

Kod 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>
 2
Author: Vindhyachal Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-20 08:33:01