javascript - Google Maps API v3 - 'Set Current Location' 最准确的方法

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

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

它对于某些用户来说工作正常,但对于其他用户来说,它默认为“错误”位置。

示例 1 我让一位 friend 在我们位于利物浦的学生宿舍里测试了该网站。 当他允许当前位置时,它会将他的位置设置为他在斯塔福德的家,距离很远。

示例 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);

    }

最佳答案

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

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

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

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

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

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

关于javascript - Google Maps API v3 - 'Set Current Location' 最准确的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13018979/

相关文章:

javascript - jquery 文档级 onmousedown 在元素的单击处理程序之前被调用

javascript - WebStorm 错误 : expression statement is not assignment or call

Javascript,数组在不同的地方显示不同的长度

javascript - Google Maps API 信息窗口都具有相同的内容

android - Cordova geolocation watchPosition frequency is higher the options allow it

javascript - 建立地理定位照片索引——爬网还是依赖现有的 API?

javascript - 如何使用ajax jquery在没有提交按钮的情况下上传多张图片?

javascript - 如何为 Google Maps V3 中的所有标记创建一个事件处理程序?

google-maps - Google Maps API 旋转矩形

javascript - html5 地理位置点击当前位置然后减去两个点