API геолокации не работает, и Google Maps My Location не работает

Должно быть, я делаю что-то не так, но я не могу найти, что... Я делаю страницу для веб-сайта своей компании, которая, среди прочего, предоставляет маршруты к сайтам вакансий в зависимости от текущего местоположения пользователя. Чтобы узнать их местоположение, я использую API геолокации, реализованный в Firefox (я тестировал с FF9, а теперь с FF10). На данный момент я тестирую пример кода из статьи Википедии:

<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" и перетащите файл в браузер, чтобы открыть его)

Очень простой код, и он отлично работал в прошлый четверг, 26.01.12. (Я знаю, я знаю, люди говорят: «Это сработало вчера!», когда они на самом деле что-то напутали, но я клянусь, что это действительно так.) Однако с тех пор он выдает мне код ошибки 2, «POSITION_UNAVAILABLE». Я пробовал это на своем рабочем компьютере в своей рабочей сети, на своем рабочем и домашнем компьютерах при домашнем подключении к Интернету и на своем рабочем компьютере в точке доступа Wi-Fi с моего телефона, и он каждый раз выдает код ошибки 2.

Я подумал, может быть, я что-то напутал в своем браузере, или в настройках сети, или еще в чем-то (хотя я не мог представить, что именно), поэтому я попробовал следующий тест, который должен уметь делать каждый:

  1. Перейдите на сайт maps.google.com.
  2. Ищите «сиэтл» (или какое-то другое место, что угодно).
  3. Нажмите кнопку «Проложить маршрут».
  4. В полях направления слева «А» должно говорить «Мое местоположение», а «Б» должно говорить «Сиэтл». (Если в A не указано «Мое местоположение», введите «m» в поле, и в автоматически заполняющемся раскрывающемся списке обычно будет «Мое местоположение» в качестве первого варианта.)
  5. Нажмите кнопку «ПОЛУЧИТЬ МАРШРУТЫ».
  6. Firefox должен вывести сообщение о том, что maps.google.com хочет узнать ваше местоположение. Нажмите «Поделиться местоположением».
  7. Через пару секунд он должен либо показать вам направление откуда-то (там, где, по его мнению, находится ваш сервер) до Сиэтла, либо поле «А» должно стать пустым, и в нем будет написано «Не удалось найти ваше местоположение» или подобное вверху. карты.

И вот что странно: я еще никогда не заставлял это работать ни на одном компьютере. Мой рабочий компьютер (как на FF10, так и на Chrome), компьютеры моих коллег, мой домашний компьютер и рабочий компьютер моей подруги делают одно и то же; никто не может найти место.

Итак, мой вопрос: API местоположения не работает или что-то в этом роде, или я что-то напортачил? Мне не удалось найти в Интернете каких-либо указаний на сбой API, и кажется, что сбой маловероятен, но если да, то почему он не работает ни на одном компьютере, на котором я его пробовал? Может ли кто-нибудь еще повторить эти выводы или знает, что я делаю неправильно?

Спасибо!


person Sam    schedule 02.02.2012    source источник


Ответы (2)


Ваш скрипт работает нормально, и функция определения местоположения в Картах Google тоже (FF9.0.1)

Где ты? (Я имею в виду физически) Возможно, если вы находитесь в каком-то удаленном месте, Google еще не может вычислить ваше местоположение! Попробуйте, может быть, в каком-нибудь большом городе...

Другая возможность заключается в том, что у вас нет доступа к серверам местоположения Google, как если бы ваш интернет-провайдер заблокировал его...

person Stéphane    schedule 02.02.2012
comment
Да, API запущен и работает. Поскольку вы пробовали, чтобы компьютеры принадлежали нескольким людям, я бы также исключил, что вы настроили свой браузер так, чтобы он никогда не делился своим местоположением. Звучит более правдоподобно, что ваш просмотр пытается, но терпит неудачу, потому что что-то стоит на пути. - person miguev; 02.02.2012
comment
Я в Портленде, штат Орегон. Надеюсь, Гугл знает, где это. :) И я мог видеть, что один интернет-провайдер блокирует его, но я пробовал от того, что должно быть как минимум четыре отдельных провайдера: мой рабочий доступ в Интернет, который на самом деле через интранет, который подключается к внешнему миру где-то на восточном побережье, а затем мой домашний интернет-провайдер, точка доступа Wi-Fi моего телефона Android и рабочее соединение моей подруги. Появляется окно с вопросом, хочу ли я делиться местоположением каждый раз, так что эта часть работает нормально, но затем он возвращает код ошибки 2 с моим тестовым кодом и не может найти Мое местоположение на Картах Google. - person Sam; 02.02.2012

Кажется, ваш скрипт работает в Chrome, но не в FF. Ошибка, которую я получаю в FF, позиция недоступна, что, вероятно, означает, что служба определения местоположения FF не имеет доступа к моей сети Wi-Fi. Я предполагаю, что ошибка, которую вы получаете, это ошибка 2 в вашем предупреждении?

Если вы используете Firebug, вы можете установить точку остановки в строке 15. Когда она остановится, нажмите positionError на панели Watch справа и проверьте, что это за код. Мой читает: код 2, который переводится как «Недоступен».

Я предлагаю вам иметь другой код для обработки этого экземпляра.

person Mano Marks    schedule 02.02.2012
comment
positionError.code выводится в окне предупреждения JS; это код 2 каждый раз. Насколько я могу судить, API геолокации должен работать до тех пор, пока у вас есть какой-либо доступ в Интернет, и во многих случаях должен быть более точным для Wi-Fi, поскольку Google нанес на карту расположение нескольких точек доступа Wi-Fi. Но именно поэтому я пробовал несколько компьютеров и типов подключения. В моем производственном коде во внутренней сети компании у меня есть код для обработки невозможности найти местоположение (он выбирает значение по умолчанию), но отсутствие поиска делает его гораздо менее полезным. - person Sam; 02.02.2012
comment
Ну, 3 пункта: 1) Google, возможно, не нанес на карту все ваши внутренние сети Wi-Fi, возможно, не знает, где они находятся. 2) Не уверен, почему FF не получает местоположение, когда это делает Chrome, они должны использовать одного и того же поставщика местоположения. Получаете ли вы одинаковые результаты независимо от браузера? 3) Это только для внутреннего пользования? В этом случае вам может потребоваться перейти на Maps API for Business, версию Google Enterprise. - person Mano Marks; 02.02.2012
comment
Я думал, что API геолокации должен как минимум получить местоположение вашего интернет-провайдера по вашему IP-адресу, если он не знает, где находится точка Wi-Fi. Во всяком случае, как отмечалось в моем посте, Chrome не получает местоположение и в Картах Google. А с помощью простого тестового кода HTML даже не появляется всплывающее сообщение с вопросом, хочу ли я поделиться своим местоположением, даже после установки параметра «Разрешить всем сайтам отслеживать мое физическое местоположение». Код теста дает код ошибки 1, PERMISSION_DENIED. - person Sam; 02.02.2012