如何使用地理位置获取访问者的位置(即国家/地区)?

我正在尝试扩展本地地理定位function

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

这样我可以使用访问者的国家名称(也许返回一个信息丰富的数组)。

到目前为止,我所能find的都是显示谷歌地图界面的函数,但实际上并没有给出我想要的东西,除了这个库 在这个例子中运行良好,但由于某种原因在我的电脑上无法正常工作。 我不知道为什么那里出了问题。

不pipe怎样,你知道我怎样才能从经度和纬度值简单地返回包含国家,城市等信息的数组?

如果您只需要他们的国家,您不需要find用户。 您可以在任何IP 到位服务(如maxmind )中查看其IP地址。 这在大部分时间都是准确的。

如果你确实需要find他们的位置,可以用这种方法获取他们的经纬度,然后查询谷歌或雅虎的反向地理编码服务。

你可以使用我的服务, http://ipinfo.io ,为此。 它会给你客户的IP,主机名,地理位置信息(城市,地区,国家,地区代码,邮政编码等)和networking所有者。 以下是一个logging城市和国家的简单示例:

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

下面是一个更详细的JSFiddle示例,它也打印出完整的响应信息,所以您可以看到所有可用的详细信息: http : //jsfiddle.net/zK5FN/2/

该位置通常不会比本地地理位置详细信息准确,但不需要任何用户权限。

你可以使用你的IP地址来得到你的“国家”,“城市”,“isp”等等。
只需使用一个为您提供简单api的Web服务之一,如http://ip-api.com ,它可以在http://ip-api.com/json上为您提供JSON服务。; 简单的发送一个Ajax(或者Xhr)请求,然后parsingJSON来获取你需要的任何数据。

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

你不能通过IP获得城市位置。 在这里你可以得到国家与jQuery的:

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

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

Webtechriser提供免费且易于使用的服务(点击此处阅读文章) (称为wipmania )。 这是一个JSONP服务,需要使用HTML进行JavaScript编码。 它也可以用在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> 

对于寻找function全面的地理定位工具的开发者,你可以看看geolocator.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="jquery-1.12.4.js"></script> <div> <input type="text" id="txtIP" /> <button id="btnGetIpDetail">Get Location of IP</button> </div> 

这段代码将返回您当前的 IP的详细信息。 要查找其他IP地址,只需将该IP附加到https://api.ipdata.courl,例如。;

 https://api.ipdata.co/1.1.1.1 
 $.get("https://api.ipdata.co", 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>