【问题标题】:Google Maps API v3 - most accurate method of 'Set Current Location'Google Maps API v3 - 最准确的“设置当前位置”方法
【发布时间】:2012-10-22 20:06:30
【问题描述】:

好的,我正在为我的网站使用 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);

    }

【问题讨论】:

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


【解决方案1】:

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

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

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

很遗憾,它可能不准确。人们总是在设置新路由器、升级、更改 WiFi 细节、搬家并随身携带路由器,甚至只是打开或关闭它们。

如果在您的 PC 周围检测到的信号与 Google 认为您所在位置的信号不匹配,则可能会出现奇怪的结果。我的猜测是你的朋友从家里带了一个路由器到他的学生宿舍? Google 可能会识别出该路由器来自斯塔福德,并且无法识别该地区的任何其他路由器(因为自上次扫描以来所有学生都发生了变化),因此它猜测它一定在斯塔福德。

当它奏效时,这种技术精确得可怕,但当它不起作用时,结果可能会非常不准确。除了在您的笔记本电脑上安装 GPS 信标,或者说服附近的每个人永远不要更换他们的路由器,您无能为力。

【讨论】:

  • 其实家里的路由器是全新安装的。房子很新,所有的电器等都是全新的。使用你的想法,我猜他的笔记本电脑仍然以某种方式设置在他的家中......我将如何改变它?
  • @tristanojbacon:很遗憾,这就是我的第一句话的来源:API 是一个黑盒子。它不会告诉你它使用了哪些方法,你也没有机会告诉它使用哪些方法。这是一个“提问,回答,没有第二次猜测”的案例。如果你愿意,你可以尝试一下;看看它是否在不同的浏览器等上为他报告了相同的情况,但你真正的问题是你网站的其他用户没有这个选项。地理编码最适合在移动设备上使用,因为 GPS 和小区三角测量非常准确,但如果您没有这些,通常效果不佳。
猜你喜欢
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
相关资源
最近更新 更多