Firefox Geolocation API替代方案

时间:2011-05-04 03:24:20

标签: firefox geolocation

FF中地理位置的默认来源是about:config从参数geo.wifi.uri到https://www.google.com/loc/json的值。当在Javascript中进行标准地理定位调用时,例如,navigator.geolocation.getCurrentPosition(handle_geolocation_query,handle_errors); Firefox将使用我的IP地址(桌面)查询https://www.google.com/loc/json并返回我的大致位置。

我想要做的是在我自己的服务器上设置一个返回特定地理位置的页面;我会将lat,lon和precision值的硬代码返回到我的页面,该页面进行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我会按预期恢复我的lat,lon和准确度。当我将geo.wifi.uri更改为http://mysite/jsonhttp://mysite.json/index.php时,我没有明显的响应,包括没有执行javascript的错误部分。

我认为答案在geolocation-API,但是当我真正想要的是返回格式正确的信息时,我无法理解答案。

对此有任何帮助将不胜感激。

TL; DR:为geo.wifi.uri生成有效响应需要什么才能替代https://www.google.com/loc/json

2 个答案:

答案 0 :(得分:0)

有趣。我做了一点地理定位工作,并没有意识到这个小细节。盯着地理定位提供商的来源并获得一些PHP帮助,你可以将其作为谷歌的回应:

{"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>"}

尝试让您的回复看起来像这样,看看会发生什么。

答案 1 :(得分:0)

检查http://code.google.com/p/gears/wiki/GeolocationAPI部分&#34;网络位置提供商协议&#34;包含请求和响应格式。