Как получить местоположение посетителя (т.е. Страну) с использованием геолокации?
Я пытаюсь расширить встроенную функцию геолокации
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
});
}
чтобы я мог использовать название страны посетителя (возможно, вернуть информативный массив).
Пока что мне удалось найти только функции, которые отображают интерфейс карт Google, но ни одна из них не дала того, что я хочу, за исключением этой библиотеки, которая хорошо работала в этом примере, но по какой-то причине не работала на моем компьютере. Я не уверен, почему это пошло не так.
В любом случае, вы знаете, как я могу просто вернуть массив, содержащий информацию о стране, городе и т.д. Из значений широты и долготы?
Ответы
Ответ 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>