2010-05-02 54 views

回答

2

如果您可以對仲裁網站執行HTTP Post,則可以使用Google的geolocation api

只需以下面的JSON格式POST數據到https://www.google.com/loc/json

請參閱上述鏈接,瞭解如何從wifi等向json添加更多信息,從而大大提高結果的準確性。並特別注意移動國家代碼,得到它是not obvious

{ 
    "version": "1.1.0", 
    "cell_towers": [ 
    { 
     "cell_id": "42", 
     "location_area_code": 415, 
     "mobile_country_code": 310, 
     "mobile_network_code.": 410, 
     "age": 0, 
     "signal_strength": -60, 
     "timing_advance": 5555 
    }, 
    { 
     "cell_id": "88", 
     "location_area_code": 415, 
     "mobile_country_code": 310, 
     "mobile_network_code": 580, 
     "age": 0, 
     "signal_strength": -70, 
     "timing_advance": 7777 
    } 
    ] 
} 

這將返回Google對您所在位置的緯度/經度的估計值,以及準確性和可選的地理編碼地址。您可以快速測試使用名爲REST控制檯的Chrome擴展程序。

但是,似乎Blackberry API只提供有關當前連接的單元的信息,而不是其他可見但未註冊的單元。在這種情況下不能進行三角測量,因爲你(不自然地)需要三點來進行三角測量!然而,位置的不準確的徑向估計仍然是可能的。

您仍然可以通過提供一個塔來使用Google API,或者如果您選擇使用Ericsson API。您可能想要同時測試並比較準確性。 Ericcson API與Google相似,但只希望單個單元格作爲輸入。 A tutorial is available,但它歸結爲這樣的JSON請求:

StringBuffer url = new StringBuffer(); 
url.append("http://cellid.labs.ericsson.net/json/lookup"); 
url.append("?cellid=").append(cell.getCellId()); 
url.append("&mnc=").append(cell.getMnc()); 
url.append("&mcc=").append(cell.getMcc()); 
url.append("&lac=").append(cell.getLac()); 
url.append("&key=").append(API_KEY); 
try { 
    byte[] data = getHttp(url.toString()); 
    if(data!=null) { 
    JSONObject o = new JSONObject(new String(data)); 
    JSONObject pos = o.getJSONObject("position"); 
    this.longitude = pos.getDouble("longitude"); 
    this.latitude = pos.getDouble("latitude"); 
    this.accuracy = pos.getDouble("accuracy"); 
    this.cellName = pos.optString("name"); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

嗨!分鐘是多少?這個功能的單元數量? – 2010-05-04 05:48:24

+0

只需要一個手機塔。但是,隨着更多的蜂窩塔的添加,精確度將會增加。 JSON結果應包含準確性估計。 – fmark 2010-05-04 07:19:41

+0

感謝您的信息,但我不知道如何獲得3黑莓手機的數據,我只能得到一個單元格的數據: Integer.toString(GPRSInfo.getCellInfo()。getCellId()); //獲取當前的小區ID。 Integer.toString(GPRSInfo.getCellInfo()。getLAC()); //檢索位置區域代碼。 Integer.toString(GPRSInfo.getCellInfo()。getBSIC()); //基站識別碼。 – 2010-05-04 13:44:33