2011-05-04 20 views
5

La fuente predeterminada para la geolocalización en FF se establece en about:config desde el parámetro geo.wifi.uri al valor de https://www.google.com/loc/json. Cuando la llamada de geolocalización estándar se realiza en Javascript, por ejemplo, navigator.geolocation.getCurrentPosition (handle_geolocation_query, handle_errors); Firefox consultará https://www.google.com/loc/json con mi dirección IP (computadora de escritorio) y me devolverá mi ubicación aproximada.API de Geolocalización de Firefox Alternativa

Lo que quiero hacer es configurar una página en mi propio servidor que devuelva una geolocalización específica; Codificaré el valor de latitud, longitud y precisión para devolverlo a mi página que realiza una llamada getCurrentPosition. Esto me permitirá probar el código para un cliente en varias ubicaciones sin tener que ir a esas ubicaciones físicas para realizar pruebas.

Aquí está mi problema: ¿qué formato puedo hacer de mi página para que devuelva una estructura/objeto válido que FF pueda usar?

La página está alojada en Apache y se generará desde PHP.

Para este ejemplo, digamos que mi página de pseudo geolocalización está en http://mysite/json/index.php.

he probado con el siguiente código PHP:

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

En mi página de llamada tengo el siguiente 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; 
} 
} 

Con juego geo.wifi.uri a https://www.google.com/loc/json que volver a mi lat, lon y precisión como se esperaba. Cuando cambio geo.wifi.uri a http://mysite/json o a http://mysite.json/index.php no aparece ninguna respuesta aparente, incluida la no ejecución de la sección de error de javascript.

Supongo que la respuesta está en el geolocation-API pero no puedo encontrarle sentido cuando todo lo que realmente quiero es devolver la información con el formato correcto.

Cualquier ayuda sobre esto será apreciada.

TL; DR: ¿qué se necesita para generar una respuesta válida para geo.wifi.uri como alternativa al https://www.google.com/loc/json?

Respuesta

0

Interesante. He hecho un pequeño trabajo de geolocalización y no estaba al tanto de este pequeño detalle. Mirando a la fuente para el proveedor de geolocalización y con un poco de ayuda de PHP, se obtiene esto como la respuesta de 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>"} 

intentar hacer su respuesta se parece a eso y ver qué pasa.

Cuestiones relacionadas