#firefox #geolocation
#firefox #геолокация
Вопрос:
Источник геолокации по умолчанию в 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-адрес (рабочий стол) и вернет мое приблизительное местоположение.
Что я хочу сделать, так это настроить страницу на моем собственном сервере, которая возвращает определенное геолокационное местоположение; Я жестко закодирую значения широты, lon и точности, которые будут возвращены на мою страницу, которая выполняет вызов 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
, я возвращаю свои широту, lon и точность, как ожидалось. Когда я меняю 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
?
Ответ №1:
Интересно. Я проделал небольшую работу по геолокации и не знал об этой маленькой детали. Взглянув на исходный код поставщика геолокации и с небольшой помощью 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>"}
Попробуйте придать своему ответу подобный вид и посмотрите, что получится.
Ответ №2:
Проверьте http://code.google.com/p/gears/wiki/GeolocationAPI раздел «Протокол поставщика сетевого местоположения» содержит как формат запроса, так и формат ответа.