【问题标题】:Geolocation API not working, nor is Google Maps "My Location"地理定位 API 不起作用,谷歌地图“我的位置”也不起作用
【发布时间】:2012-02-24 16:37:23
【问题描述】:

我一定是在这里做错了,但我找不到什么...我正在为我的公司网站制作一个页面,除其他外,它根据用户的当前位置提供前往工作地点的路线。为了获得他们的位置,我使用了在 Firefox 中实现的Geolocation API(我正在使用 FF9 和现在的 FF10 进行测试)。目前我正在使用Wikipedia article 中的示例代码进行测试:

<html>
<head>
<title>Geolocation Test</title>
<script type='text/javascript'>
var gl;

function displayPosition(position) {
  var p = document.getElementById("p");
  p.innerHTML = "<table border='1'><tr><th>Timestamp</th><td>" + position.timestamp +
    "<tr><th>Latitude (WGS84)</th><td>" + position.coords.latitude + " deg</td></tr>" +
    "<tr><th>Longitude (WGS84)</th><td>" + position.coords.longitude + " deg</td></tr></table>";
}

function displayError(positionError) {
  alert("error " + positionError.code);
}

try {
  if (typeof navigator.geolocation === 'undefined'){
    gl = google.gears.factory.create('beta.geolocation');
  } else {
    gl = navigator.geolocation;
  }
} catch(e) {}

if (gl) {
  gl.getCurrentPosition(displayPosition, displayError);
} else {
  alert("Geolocation services are not supported by your web browser.");
}
</script>

<body>
<p id='p'></p>
</body>
</html>

(将其复制/粘贴到文本编辑器中,另存为“whatever.html”,然后将文件拖到浏览器中打开)

非常简单的代码,上周四 12 年 1 月 26 日它实际上运行良好。 (我知道,我知道,人们说“昨天成功了!”当他们实际上搞砸了一些事情时,但我发誓它确实做到了。)然而,从那时起,它一直给我错误代码 2,“POSITION_UNAVAILABLE”。我已经在工作网络上的工作计算机、家庭互联网连接上的工作和家庭计算机以及手机上的 wifi 热点上的工作计算机上尝试过,每次都给出错误代码 2。

我想也许我在浏览器或网络设置中弄错了一些东西(虽然我无法想象是什么),所以我尝试了下一个测试,每个人都应该能够做到:

  1. 访问 maps.google.com。
  2. 搜索“西雅图”(或其他任何位置)。
  3. 点击“获取路线”按钮。
  4. 在左侧的方向框中,“A”应显示“我的位置”,“B”应显示“西雅图”。 (如果 A 中没有显示“我的位置”,请在框中输入“m”,自动填充下拉菜单通常会将“我的位置”作为第一个选项。)
  5. 点击“获取路线”按钮。
  6. Firefox 应该会弹出一条消息,说 maps.google.com 想知道您的位置。点击“分享位置”。
  7. 几秒钟后,它应该会向您显示从某个地方(无论它认为您的服务器在哪里)到西雅图的路线,或者“A”框应该变为空白并显示“找不到您的位置”或类似内容朝向地图的顶部。

奇怪的是:我还没有让它在任何计算机上工作。我的工作电脑(在 FF10 和 Chrome 上)、我同事的电脑、我的家用电脑和我 GF 的工作电脑都做同样的事情;没有人能找到位置。

所以我的问题是:位置 API 是否已关闭或其他原因,还是我搞砸了?我无法在网上找到任何 API 中断的迹象,而且似乎不太可能出现中断,但如果是这样,为什么它在我尝试过的任何计算机上都不起作用?其他人可以复制这些发现或知道我做错了什么吗?

谢谢!

【问题讨论】:

    标签: google-maps geolocation google-geolocation


    【解决方案1】:

    您的脚本运行良好,Google 地图中的位置功能也运行良好 (FF9.0.1)

    你在哪里? (我的意思是物理上)如果您在某个偏远的地方,Google 可能还无法计算您的位置!也许在一些大城市尝试一下......

    另一种可能性是您无权访问 Google 的位置服务器,就好像您的 ISP 阻止了它一样...

    【讨论】:

    • 是的,API 已启动并正在运行。由于您尝试过计算机属于多个人,我也排除您将浏览器设置为从不共享您的位置。您的浏览正在尝试但失败,这听起来更合理,因为有些事情正在发生。
    • 我在俄勒冈州的波特兰。我希望谷歌知道那在哪里。 :) 我可以看到一个 ISP 阻止了它,但我已经尝试了至少应该是四个独立的提供商:我的工作互联网访问实际上是通过一个连接到东海岸某处外部世界的内部网,然后我的家庭互联网 ISP、我的 Android 手机的 wifi 热点和我 GF 的工作连接。它会弹出一个框,询问我是否每次都想共享该位置,因此该部分工作正常,但随后它返回错误代码 2 和我的测试代码,并且在 Google 地图上找不到“我的位置”。
    【解决方案2】:

    您的脚本似乎可以在 Chrome 中运行,但不能在 FF 中运行。我在 FF 中遇到的错误是位置不可用,这意味着 FF 的定位服务可能无法访问我的 wifi 网络。我假设您收到的错误是警报中的错误 2?

    如果您使用 Firebug,您可以在第 15 行设置一个停止点。当它停止时,单击右侧 Watch 面板中的 positionError 并查看代码是什么。我的阅读:代码 2 转换为不可用。

    我建议你有一些其他代码来处理这个实例。

    【讨论】:

    • positionError.code 被转储到 JS 警告框中;每次都是代码 2。据我所知,只要您有任何类型的互联网访问权限,Geolocation API 就应该可以工作,并且在许多情况下实际上应该在 wifi 上更准确,因为 Google 已经映射了一堆 wifi 热点的位置。但这就是为什么我尝试了多台计算机和连接类型。在公司 Intranet 上的生产代码中,我确实有处理无法找到该位置的代码(它选择默认值),但找不到该位置会使它的用处大大降低。
    • 嗯,3 点:1) Google 可能没有映射您所有的内部 wifi 网络,可能实际上不知道它们在哪里。 2)不确定为什么 FF 没有在 Chrome 获取位置时获取位置,他们应该使用相同的位置提供程序。无论浏览器如何,您都获得相同的结果吗? 3) 这是一个仅限内部的网站吗?如果是这样,您可能需要升级到 Google 的企业版 Maps API for Business。
    • 我认为如果 Geolocation API 不知道 wifi 点在哪里,它至少应该通过您的 IP 地址获取您的 ISP 的位置。无论如何,正如我在帖子中指出的那样,Chrome 也无法在 Google 地图中获取该位置。使用简单的 HTML 测试代码,它甚至不会弹出询问我是否要共享位置的消息,即使在将选项设置为“允许所有站点跟踪我的物理位置”之后也是如此。测试代码给出错误代码 1,“PERMISSION_DENIED”。
    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多