2010-05-02 11 views

Répondre

2

Si vous pouvez publier un message HTTP sur un site Web d'arbitrage, vous pouvez utiliser le geolocation api de Google. Il suffit de POST les données au format JSON suivant à https://www.google.com/loc/json.

Voir le lien ci-dessus sur la façon d'ajouter plus d'informations à votre json de wifi etc. pour augmenter considérablement la précision du résultat. Et accordez une attention particulière au code de pays mobile, obtenant c'est 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 
    } 
    ] 
} 

Cela vous ramènera l'estimation de Google de la latitude/longitude de votre emplacement, ainsi que la précision et le cas échéant une adresse géocodées. Vous pouvez le tester rapidement, par ex. avec l'extension Chrome appelée REST Console.

Cependant, il semble que le Blackberry API ne fournisse que des informations sur la cellule actuellement connectée, pas sur d'autres cellules visibles mais non enregistrées. Dans cette situation, vous ne pouvez pas faire de triangulation, car vous avez (sans surprise) besoin de trois points pour trianguler! Cependant, une estimation radiale moins précise de l'emplacement est encore possible.

Vous pouvez toujours utiliser l'API Google pour cela, en fournissant une seule tour, ou vous pouvez utiliser le Ericsson API si vous le souhaitez. Vous pourriez vouloir tester avec les deux et comparer la précision. L'API Ericcson est une API JSON similaire à celle de Google, mais n'attend qu'une seule cellule en entrée. Un tutorial is available, mais il se résume à une demande JSON comme ceci:

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

Hi! quel est le min. nombre de cellules pour cette fonctionnalité? –

+0

Une seule tour de téléphonie cellulaire est requise. Cependant, la précision augmentera à mesure que d'autres tours cellulaires seront ajoutées. Le résultat JSON doit inclure une estimation de précision. – fmark

+0

merci pour l'info, mais je ne sais pas comment obtenir des données de 3 cellules dans blackberry, je ne peux obtenir des données d'une cellule en utilisant: Integer.toString (GPRSInfo.getCellInfo(). GetCellId()); // Récupère l'ID de cellule actuel. Entier.toChaîne (GPRSInfo.getCellInfo(). GetLAC()); // Récupère le code de zone de localisation. Entier.toChaîne (GPRSInfo.getCellInfo(). GetBSIC()); // Code d'identification de la station de base. –