获得美国用户状态的最有效方法是什么? HTML5地理位置是一个选项而不需要涉及谷歌地图吗?
答案 0 :(得分:12)
以下是JavaScript和JSON中的几个示例(在jQuery的帮助下)使用IP查找方法(在IPinfoDB的帮助下)和Geolocation API方法(与Google Maps API和YQL)的帮助。
在这两个示例中,我正在检索区域和国家/地区,但您可以选择多个值。请注意,这些示例不会进行任何错误处理,因此为了简洁起见,我们会对其进行编辑,否则请参阅the full demo。
这种方法很好,因为它易于实施,并且在国家层面上相当准确,但对于任何更具体的内容,准确度会大幅下降。
// 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);
}
);
虽然绝不是完美的,但这种方法准确无误。系统会提示用户共享可能会降低使用率的地理位置详细信息。
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);
}
);
});
在那里你会看到我通过Google Maps API v3使用YQL,以便可以进行JSON回调。
答案 1 :(得分:2)
如果网站需要确切的位置来显示本地数据,餐馆,商店等,新的浏览器地理定位功能非常好。但是,如果您在笔记本电脑上运行它,它将尝试根据无线网络估算位置附近可用,所以它可能只有几公里,这意味着它可以获得的最准确的是城镇级别。
对于网站开发人员,如果您依赖于此,您必须首先知道,用户必须接受为您的网站提供位置。大多数人看不到,其他人忽略了该消息,以及当用户使用不支持此功能的Internet Explorer或旧浏览器时,或者如果他没有打开计算机上的Wi-Fi,您会执行的操作。认为在大多数情况下你会得到一个大约2公里的位置,那么在大多数情况下你会考虑城镇级的准确性,这不过是知识产权所能给你的地理位置。
IP地理定位的优势是: *您不必担心用户拥有过时的浏览器 *您不必担心用户会害怕共享其位置的请求。他不知道这个位置不是他的确切位置,而是近似的位置。 *用户不会收到通知您正在使用他的计算机来跟踪位置的通知。 *它适用于没有Wi-Fi的计算机。
我认为实现这一目标的理想方法是将两个系统都安装到位。询问用户该位置,但如果浏览器已过时或用户未提供该位置,则切换到从IP获取位置。要从IP获取位置,您可以在此处使用IPGP API:http://www.ipgp.net/developer-tools/
答案 2 :(得分:1)
我不确定它是否更有效,但另一种选择是通过IP定位。它虽然可能不正确,但只是大致的位置。
答案 3 :(得分:1)
假设您已经从Geolocation回调中获得了经度和纬度,您需要的是反向地理编码。 (地理编码意味着按地址查找纬度和经度,因此反向地理编码的作用很明显。)
Google的地理编码(以及反向地理编码)服务是免费的。您可以在此处阅读API: http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding
请务必在使用之前申请Google Maps API密钥。
答案 4 :(得分:0)
是的,与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!
}
答案 5 :(得分:0)