Firefox Geolocation API Альтернатива - PullRequest
6 голосов
/ 04 мая 2011

Источник по умолчанию для геолокации в FF устанавливается в about:config из параметра geo.wifi.uri в значение https://www.google.com/loc/json.Когда стандартный вызов геолокации выполняется в Javascript, например, navigator.geolocation.getCurrentPosition (handle_geolocation_query, handle_errors);Firefox запросит https://www.google.com/loc/json с моим IP-адресом (рабочий стол) и вернет мое приблизительное местоположение.

Что я хочу сделать, это настроить страницу на моем собственном сервере, которая возвращает определенную геолокацию ;Я буду жестко кодировать значение широты, долготы и точности, которое будет возвращено на мою страницу, которая вызывает getCurrentPosition.Это позволит мне тестировать код для клиента в разных местах без необходимости идти в эти физические места для тестирования.

Вот моя проблема: в каком формате я могу создать свою страницу, чтобы она возвращала действительную структуру /объект, который может использовать FF.

Страница размещена на Apache и будет сгенерирована из PHP.

В этом примере предположим, что моя страница псевдогеолокации находится на http://mysite/json/index.php.

Я попробовал это с помощью следующего кода PHP:

header('Content-type: application/json');
echo '{"position":'
 .    '{"coords":'
 .     '{'
 .      '"latitude":"80",'
 .      '"longitude":"-20",'
 .      '"altitude":"299",'
 .      '"accuracy":"111",'
 .      '"altitudeAccuracy":"222",'
 .      '"heading":"333",'
 .      '"speed":"44"'
 .     '}'
 .    '}'
 .   '}';

На моей странице вызова у меня есть следующий javascript:

function initiate_geolocation() {
navigator.geolocation.getCurrentPosition(handle_geolocation_query,handle_errors);
}

function handle_geolocation_query(position){
 var foo = 'Lat: ' + position.coords.latitude + "\n"
         + 'Lon: ' + position.coords.longitude + "\n"
         + 'Alt: ' + position.coords.altitude + "\n"
         + 'Acc: ' + position.coords.accuracy + "\n"
         + 'AAc: ' + position.coords.altitudeAccuracy + "\n"
         ;
 alert(foo);
}

function handle_errors(error) {
 switch(error.code) {
  case error.PERMISSION_DENIED: alert("user did not share geolocation data");
  break;

  case error.POSITION_UNAVAILABLE: alert("could not detect current position");
  break;

  case error.TIMEOUT: alert("retrieving position timed out");
  break;

  default: alert("unknown error");
  break;
 }
}

с geo.wifi.uri, установленным в https://www.google.com/loc/json Я получаю свои данные, точность и точность, как и ожидалось.Когда я изменяю geo.wifi.uri на http://mysite/json или http://mysite.json/index.php, я не получаю очевидного ответа, в том числе не выполняю раздел ошибки в javascript.

Я предполагаю, что ответ находится в geolocation-API , но я не могу понять, когда все, что я действительно хочу, это вернуть правильно отформатированную информацию.

Любая помощь по этому вопросу будет оценена.

TL;DR: что требуется для генерации правильного ответа для geo.wifi.uri в качестве альтернативы https://www.google.com/loc/json?

Ответы [ 2 ]

0 голосов
/ 26 июля 2011

Проверка http://code.google.com/p/gears/wiki/GeolocationAPI раздел «Протокол провайдера сетевого расположения» содержит формат запроса и ответа.

0 голосов
/ 04 мая 2011

Интересно.Я провел небольшую геолокационную работу и не знал об этой маленькой детали.Взглянув на источник для поставщика геолокации и с небольшой помощью PHP, вы получите ответ Google:

{"location":{
    "latitude":<latitude value>,
    "longitude":<longitude value>,
    "address":{
    "country":"United States",
    "country_code":"US",
    "region":"<state>", 
    "city":"<city>",
    "street":"<streetname>",
    "street_number":"<street number>",
    "postal_code":"<zip code>" 
    }, 
    "accuracy":30.0} ,
 "access_token":"<long access token string>"}

Попробуйте сделать так, чтобы ваш ответ выглядел так, и посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...