这有点宽泛,但我们开始吧:我的三角测量算法出现了一个非常奇怪的问题。有时,它返回正确的纬度/经度,然后,一段时间后,它返回错误的纬度/经度。更奇怪的是,我无法预测何时会发生此错误,也无法重现它。即使我没有更改代码中的行(收到正确的值,然后是错误的,然后是正确的,等等......),它也会发生。
我正在使用 google GLM 服务,将设备 LAC(位置区号)和 Tower ID 发送到三角我的位置。我的算法的核心方法如下:
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 服务的类中,通过 PendingIntent 延迟 1 分钟调用。调用它的线程将纬度/经度值保存在 SharedPreferences 中,然后我在所有视图中使用它。
我想知道我是否使用错误的算法实现了该方法,或者我错过了过程中的技巧。目前,我正确的近似纬度/经度值为latitude = -23和longitude = -46,但我(有时)收到latitude = 17和longitude = 81的值。有人可以告诉我发生了什么吗?