Google Maps API v3 - “设置当前位置”的最准确方法

时间:2012-10-22 20:06:31

标签: javascript google-maps-api-3 geolocation ip-geolocation

好的,我正在将Google Maps API用于我的网站,并且正在使用“设置当前位置”功能。

对某些用户来说效果很好,但对于其他用户来说,它默认为“错误”位置。

示例1 我有一个朋友在利物浦的学生宿舍里测试这个网站。 当他允许当前位置时,它将他的位置设置为他在斯塔福德的家庭住宅,这是一个方便的。

示例2 在大学计算机上,我测试了网站并允许当前位置功能。这次,它将位置设置为大学服务器所在的建筑物,而不是计算机的位置(在利物浦的另一边!)

我对IP地理定位知之甚少,所以想不出解决方案,也找不到任何类似的stackoverflow问题。 有没有办法以更准确的方式设置位置?也许我可以使用邮政编码设置位置?

任何帮助都将不胜感激。

特里斯坦

编辑: 这是我在初始化函数

中设置位置的代码
if(navigator.geolocation) {

         navigator.geolocation.getCurrentPosition(currentPositionCallback);

        } else {

        alert('The browser does not support geolocation');

        }

    function currentPositionCallback(position) {

         // Create a new latlng based on the latitude and longitude from the users position
         var user_lat_long = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);

         // Add a marker using the user_lat_long position
         var userpos = new google.maps.Marker({
         position: user_lat_long,
          icon: new google.maps.MarkerImage("img/icons/icon_home.png", new google.maps.Size(32, 34)),
         map: map
         });

         // Set the center of the map to the users position and zomm into a more detailed level
         map.setCenter(user_lat_long);
         map.setZoom(15);

    }

1 个答案:

答案 0 :(得分:1)

问题在于地理位置是一种黑暗的艺术。 API使用许多技术来确定它的位置。

  • 最可靠的是机器是否有GPS。这可以使你缩小到最近的十米左右。
  • 接下来,移动电话可以通过报告区域中的细胞桅杆和信号强度来做一些工作。这可以用来将你三角测量到一百米左右。
  • 另一种方法是查看IP地址。这些可以映射到地理位置,但往往非常不准确。仅当您的机器没有其他地理定位方法时,才会使用此技术。这可以解释大学计算机的跨城效应。
  • 最后一种方法(我觉得你的朋友正在玩)正在寻找该地区的WiFi网络。你还记得谷歌几年前因为人们的WiFi上的数据泄漏而陷入困境吗?他们首先看到WiFi的原因是获得WiFi路由器的地图。他们知道这个国家的每个WiFi路由器的名称和位置(好吧,几乎所有的)。浏览器提供了一个可以看到的信号列表,Google可以非常准确地计算出你的位置。

如果您使用的是标准笔记本电脑,可能使用的唯一方法就是最后一种方法。如果谷歌的数据库是最新的,那么效果很好。

不幸的是,它可能不准确。人们总是设置新的路由器,升级,更改WiFi细节,搬家和带路由器,甚至只是打开或关闭它们。

如果在您的电脑周围检测到的信号与您认为在您所在位置的信号不匹配,则会产生奇怪的结果。我的猜测是你的朋友带着他从家到他学生的路由器?谷歌可能认为该路由器来自斯塔福德,并且不识别该区域的其他任何人(因为所有学生自上次扫描以来都有所改变),因此它猜测它必须在斯塔福德。

当它工作时,这种技术非常准确,但如果没有,结果可能会非常不准确。如果没有在你的笔记本电脑上安装GPS信标,或者说服你附近的每个人都没有改变他们的路由器,那么你可以用另一种方式做到这一点。