使用地理位置获取用户的状态
Posted
技术标签:
【中文标题】使用地理位置获取用户的状态【英文标题】:Get a user's State with Geolocation 【发布时间】:2011-09-13 07:44:05 【问题描述】:获取美国用户所在州的最有效方法是什么? html5 Geolocation 是一种不需要涉及谷歌地图的选项吗?
【问题讨论】:
不要忘记将您的问题标记为已回答。从任何适合您的答案中选择。 有趣的是,使用 chrome 时,位置与当前位置相差 50 公里,而使用 Firefox 时,位置非常准确,使用相同的代码。只有我吗? 【参考方案1】:这里有几个 javascript 和 JSON 示例(在 jQuery 的帮助下)使用 IP 查找方法(在 IPinfoDB 的帮助下)和 Geolocation API 方法(在 Google Maps API 的帮助下和YQL)。
在这两个示例中,我都在检索地区和国家/地区,但您可以选择多个值。请注意,这些示例不进行任何错误处理,为了简洁起见,此处对其进行了编辑,否则请参阅the full demo。
JavaScript 中的 IP 查找
这种方法很好,因为它易于实施,并且在国家一级相当准确,但对于更具体的情况,准确度会大幅下降。
// API key excluded for brevity, see full demo.
var apiurl = 'http://api.ipinfodb.com/v3/ip-city';
$.getJSON(apiurl+'/format=json&callback=?',
function(data)
$("h3#location").html(data.regionName + ", " + data.countryName);
);
地理位置 API
虽然绝不是完美的,但这种方法是尽可能准确的。系统会提示用户分享地理位置详细信息,这可能会减少使用量。
navigator.geolocation.getCurrentPosition(function(pos)
$.getJSON(apiurl+'/format=json&callback=?',
function(data)
var regionName = data[...]AdministrativeAreaName;
var countryName = data[...]CountryName;
$("h3#location").html(regionName + ", " + countryName);
);
);
在那里你会看到我通过YQL 使用了Google Maps API v3,以便可以进行JSON 回调。
完整演示:http://jsfiddle.net/ZjXXh
【讨论】:
演示使用IPInfoDB 的过期 API 密钥,只需访问他们的网站获取新的。【参考方案2】:如果网站需要确切的位置来显示本地数据、餐馆、商店等,新的浏览器地理定位功能非常有用。但是,如果您在笔记本电脑上运行它,它将尝试根据无线网络来估计位置附近有,所以它可能在几公里之外,这意味着它可以得到的最准确的是镇级。
对于网站开发人员,如果您依赖于此,您必须首先知道,用户必须接受为您的网站提供位置。大多数人看不到,其他人会忽略该消息,以及当用户使用不支持此功能的 Internet Explorer 或较旧的浏览器,或者如果他的计算机没有打开 Wi-Fi 时您会做什么。认为在大多数情况下您将获得大约 2 公里的位置,那么在大多数情况下您会要求城镇级的准确度,这只不过是 IP 地理定位可以给您的。
通过 IP 进行地理定位的优点是: * 您不必担心用户的浏览器已过时 *您不必担心用户会害怕分享他的位置的请求。他不知道这个位置不是他的确切位置,而是一个大概的位置。 * 用户不会收到您正在使用他的计算机跟踪位置的通知。 * 它适用于没有 wi-fi 的计算机。
我认为理想的方法是同时安装两个系统。向用户询问位置,但如果浏览器已过时或用户未提供位置,则切换到从 IP 获取位置。要从 IP 获取位置,您可以在此处使用 IPGP API:http://www.ipgp.net/developer-tools/
【讨论】:
IP 地理定位有一个显着的缺点,即大多数数据库都不完整,并且至少包含一些非常不准确的位置。某些 IP 不能有有效的位置 - 例如 In Aircraft【参考方案3】:我不确定它是否更有效,但另一种选择是通过 IP 定位。但它可能不正确,只是大概的位置。
【讨论】:
如果使用 IP,是否有任何内置方法可以将 IP 与状态配对?我目前仅限于这个项目的 php :(【参考方案4】:假设您已经从 Geolocation 回调中获得了纬度和经度,您需要的就是所谓的反向地理编码。 (地理编码意味着通过地址查找经纬度,因此反向地理编码的作用显而易见。)
Google 的地理编码(以及反向地理编码)服务是免费的。你可以在这里阅读 API: http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding
记得在使用前申请 Google Maps API Key。
【讨论】:
【参考方案5】:是的,如果您真的坐下来比较浏览器提供给您的速度和开销(我的意思是您/您的服务器),那么与 gmaps 相比,地理定位是最有效的方式。 Gmaps 需要了解其 API 才能使用它。但是地理定位更容易。一篇文章here 清楚地描述了地理定位。这是从该站点获取的一段代码,非常简单
navigator.geolocation.getCurrentPosition(show_map);
function show_map(position)
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
// let's show a map or do something interesting!
【讨论】:
【参考方案6】:使用第三方 API,例如ipdata.co
此答案使用非常有限的“测试”API 密钥,仅用于测试几个调用。 Signup 获取您自己的免费 API 密钥,每天最多可收到 1500 个开发请求。
$.get("https://api.ipdata.co/74.125.230.195?api-key=test", function(data, status)
console.log(data.region);
);
【讨论】:
以上是关于使用地理位置获取用户的状态的主要内容,如果未能解决你的问题,请参考以下文章
微信小程序 uniapp wx.startLocationUpdateBackground前后台实时获取用户位置消息 获取用户使用设备的GPS开启状态