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

IT技术 javascript geolocation
2021-01-31 07:13:54

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

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

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

到目前为止,我所能找到的只是显示谷歌地图界面的函数,但实际上没有一个函数给出了我想要的,除了这个库在这个例子中运行良好但由于某种原因在我的电脑上不起作用。我不知道为什么那里出错了。

无论如何,您知道我如何从纬度和经度值简单地返回一个包含国家、城市等信息的数组吗?

6个回答

为此,您可以使用我的服务http://ipinfo.io它将为您提供客户端 IP、主机名、地理位置信息(城市、地区、国家、区号、邮政编码等)和网络所有者。这是一个记录城市和国家的简单示例:

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

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

该位置通常不如本地地理位置详细信息准确,但它不需要任何用户许可。

这对我不起作用,当我请求数据时,我得到完整的网站作为我的回应。有没有更好的服务可以打电话?
2021-03-25 07:13:54
但它不支持带有“https”的站点。那太糟了。
2021-03-29 07:13:54
您可以通过将 /json 添加到 url 来强制 json 响应。不过你提出这个请求是为了什么?它应该会自动检测到您想要 json。
2021-04-01 07:13:54
请注意定价页面: > 如果您每天需要向我们的 API 发出少于 1,000 次请求并且它用于非商业用途,或者您只是想测试一下,请注册免费计划。否则,请选择以下付费计划之一。- ipinfo.io/定价
2021-04-04 07:13:54
您不是在回答技术问题,而是在为您的公司做广告,wtf?每个 SO 问题都可以这样回答。:“打电话给我们并与我们的顾问交谈”
2021-04-10 07:13:54

如果您只需要他们的国家,则不需要定位用户。您可以在任何 IP 到位置服务(如maxmindipregistryip2location)中查找他们的 IP 地址这在大多数情况下都是准确的。

这是 Ipregistry 的客户端示例(免责声明,我正在为其工作):

fetch('https://api.ipregistry.co/?key=tryout')
    .then(function (response) {
        return response.json();
    })
    .then(function (payload) {
        console.log(payload.location.country.name + ', ' + payload.location.city);
    });

如果您确实需要获取他们的位置,可以使用该方法获取他们的 lat/lng,然后查询GoogleYahoo 的反向地理编码服务。

ipregistry.co比其他选择更慷慨。它有 10 万次 API 调用的免费层,注册很简单,不需要输入信用卡。
2021-03-25 07:13:54
如果我通过不同国家/地区的代理访问互联网怎么办?
2021-03-29 07:13:54
不错的建议,我尝试了 ipregistry,信息非常简单。
2021-04-05 07:13:54
@juanpastas 你没有。你只要ping一个服务,服务就会知道。或者您自己编写服务,但这超出了纯 javascript 范围。
2021-04-11 07:13:54
但是要ping一个服务,那会在服务器端吗?你知道从客户那里做到这一点的方法吗?
2021-04-11 07:13:54

你可以用你的IP地址,让您的“国家”,“城市”,“ISP”等等
的网络服务,为您提供一个简单的API一样的只是使用一个http://ip-api.com这在http://ip-api.com/json为您提供 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);
  }
});
由于ip-api.com不支持 https 请求,如果从 https 内容/页面中调用,大多数浏览器将拒绝该请求。另外,根据他们的网站,> 您可以免费将 ip-api.com 用于非商业用途。未经事先批准,我们不允许商业用途。
2021-03-22 07:13:54
ip-api只是提供 IP 位置服务的不同服务的一个例子。这个问题不询问https协议。如果您确实使用https网站,我相信您可以实现相同的逻辑,只是使用不同的 IP 位置服务。
2021-04-07 07:13:54

请参阅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/

我也写了这个最佳的IP地理位置API的8详细分析。

那是假的。该服务每月最多可免费处理 45,000 次请求。最小的计划是 10 美元,并返回提到的错误以防止滥用。请注意,它还附有一封电子邮件,警告您已用尽所有请求。
2021-03-22 07:13:54
您的评论本质上是错误的和误导性的。
2021-03-22 07:13:54
我的评论不假
2021-03-26 07:13:54

您无法通过 ip 获取城市位置。在这里,您可以使用 jquery 获取国家/地区:

$.get("http://ip-api.com/json", function(response) {
console.log(response.country);}, "jsonp");
其他人在您之前给出了这个答案+他们补充说,如果您的服务器在 https 服务器上运行,这将不起作用。网络浏览器会阻止它,因为这是一个不安全的调用。
2021-03-21 07:13:54