Если вы можете отправить HTTP-сообщение на произвольный сайт, вы можете использовать Google geolocation api .
Просто отправьте данные в следующем формате JSON в https://www.google.com/loc/json.
См. Ссылку выше, как добавить дополнительную информацию в свой JSON с Wi-Fi и т. Д., Чтобы значительно повысить точность результата. И обратите особое внимание на мобильный код страны, получив его неочевидно .
{
"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 широты / долготы вашего местоположения, а также точность и, при желании, геокодированный адрес. Вы можете проверить это быстро, например с расширением Chrome под названием REST Console.
Однако, похоже, Blackberry API предоставляет информацию только о текущей подключенной ячейке, но не о других видимых, но незарегистрированных ячейках. В этой ситуации нельзя делать триангуляцию, так как вам (неудивительно) нужны три точки для триангуляции! Однако менее точная радиальная оценка местоположения все еще возможна.
Вы все еще можете использовать Google API для этого, предоставив только одну вышку, или вы можете использовать Ericsson API , если хотите. Возможно, вы захотите проверить с обоими и сравнить точность. API Ericcson - это API-интерфейс JSON, аналогичный API Google, но он ожидает только одну ячейку в качестве входных данных. Учебное пособие доступно , но сводится к запросу 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();
}