如您所知,Google地图移动计划可以查找用户位置(我的位置服务)。 我想知道谷歌地图如何使用互联网移动,GPRS(非GPS)检测用户位置? 是否可以用PHP或其他基于Web的语言编写程序,以便在打开该页面时检测用户的位置? 我猜测Google不会使用用户IP来确定他们的位置,因为当我尝试使用移动互联网IP猜测我的位置时,会得到错误的位置。
答案 0 :(得分:6)
查看Google Geocoding API和W3 Geolocation API Specification。然后this可能有助于您找到答案。
答案 1 :(得分:4)
在没有GPS定位的情况下,进行定位的常用方法是对服务小区ID或检测到的Wi-Fi MAC地址进行反向查找。存在基于服务器的数据库,其提供所有已知小区站点的地理定位 - 其由小区ID唯一地标识,或者更确切地说,其小区全局ID(CGI)以及所有已知Wi-Fi AP的位置。因此,知道CGI或MAC,可以通过在诸如GPRS之类的蜂窝数据集合中浸入数据库来确定一个人的近似(“粗略”)位置。这就像SkyHook(Apple曾经使用但不再使用)这样的商业服务如何发挥作用。
通过使用其他输入(如信号强度或数字地图),可以使这种粗略位置更精确。
某些设备(如iPhone)会在设备上缓存此数据库,以便更快地进行粗分辨率定位。苹果公司几个月前就遇到了麻烦,此后又改变了它的运作方式。
为了让网页知道设备的位置,设备必须调用适当的(设备特定的)定位API,然后将其提交给Web服务器,这显然需要一些设备端代码(不仅仅是浏览器)。
答案 2 :(得分:1)
它的工作原理如下。谷歌地图会询问用户是否愿意根据他们的浏览器(或使用谷歌地图代码的程序)是否支持并实施地理位置界面来共享他们的位置,您可以通过该界面了解有关here的更多信息。如果用户同意共享其位置,则传递关于本地无线接入点的信息,以便谷歌地图(或其他服务)可以估计用户的位置。可以在您的程序或网页中实现此功能。我不太了解在程序中使用谷歌地图,但对于网页,这里有一个用javascript写的一个例子,可以做你想要的。我相信你也可以在PHP中完成这个任务。
<!DOCTYPE html>
<html>
<head>
<title>Google Maps JavaScript API v3 Example: Map Geolocation</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="UTF-8">
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css"
rel="stylesheet" type="text/css">
<script type="text/javascript"
src="http://maps.googleapis.com/maps/api/js?sensor=true"></script>
<script type="text/javascript">
var map;
function initialize() {
var myOptions = {
zoom: 6,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map_canvas'),
myOptions);
//this is the piece of code you are interested in!!
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var pos = new google.maps.LatLng(position.coords.latitude,
position.coords.longitude);
var infowindow = new google.maps.InfoWindow({
map: map,
position: pos,
content: 'Location found using HTML5.'
});
map.setCenter(pos);
}, function() {
handleNoGeolocation(true);
});
} else {
handleNoGeolocation(false);
}
}
function handleNoGeolocation(errorFlag) {
if (errorFlag) {
var content = 'Error: The Geolocation service failed.';
} else {
var content = 'Error: Your browser doesn\'t support geolocation.';
}
var options = {
map: map,
position: new google.maps.LatLng(60, 105),
content: content
};
var infowindow = new google.maps.InfoWindow(options);
map.setCenter(options.position);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map_canvas"></div>
</body>
</html>
请参阅google maps api参考here,了解使用此方法的方式。此外,不是源参考以“sensor = true”结尾。如果使用地理位置,则必须在源中将此值设置为true。