Это несколько широко, но начнём: у меня возникла очень странная проблема с моим алгоритмом триангуляции. Иногда он возвращает правильную широту/долготу, а затем, через некоторое время, возвращает неправильную широту/долготу. Еще более странно то, что я не могу предсказать, когда произойдет эта ошибка, и не могу ее воспроизвести. Это происходит, даже если я не меняю строки в своем коде (получаю правильные значения, затем неправильные, затем правильные и т. д.).
Я использую службу Google GLM, отправляю LAC устройства (код зоны местоположения) и идентификатор башни, чтобы определить мое положение треугольником. Основной метод моего алгоритма заключается в следующем:
private double[] getPositionByTriangle(int lac, int cid) {
int shortcid = cid & 0xffff;
double location[] = new double[2];
try {
String surl = "http://www.google.com/glm/mmap";
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(surl);
httppost.setEntity(new CellIDRequestEntity(shortcid, lac));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
DataInputStream dis = new DataInputStream(entity.getContent());
// Read some prior data
dis.readShort();
dis.readByte();
// Read the error-code
int errorCode = dis.readInt();
if (errorCode == 0) {
location[0] = (double) dis.readInt() / 1000000D;
location[1] = (double) dis.readInt() / 1000000D;
}
} catch (Exception e) {}
return location;
}
Дополнительная информация, которая может оказаться полезной: этот метод используется в классе, который расширяет службу Android и вызывается с задержкой в 1 минуту через PendingIntent. Вызывающий его поток сохраняет значения широты и долготы в SharedPreferences, а затем я использую их во всех своих представлениях.
Мне интересно, реализовал ли я метод с неправильным алгоритмом или есть ли в процессе какой-то трюк, который я пропустил. В настоящее время мои правильные приблизительные значения широты и долготы: широта = -23 и долгота = -46, но я получаю (иногда) значения широты = 17 и долгота = 81. Может ли кто-нибудь дать мне подсказку о том, что происходит?