これはやや大雑把ですが、ここで説明します。三角形分割アルゴリズムで非常に奇妙な問題が発生しています。時々、正しい緯度/経度が返され、しばらくすると間違った緯度/経度が返されます。さらに奇妙なのは、このエラーがいつ発生するかを予測することも、再現することもできないことです。コードの行を変更しなくても発生します (正しい値を受け取り、次に間違って、次に訂正する...)。
Google GLM サービスを使用して、デバイスの LAC (ロケーション エリア コード) とタワー 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 に保存し、それをすべてのビューで使用します。
間違ったアルゴリズムでメソッドを実装したのか、プロセスに見逃したトリックがあるのか 疑問に思っています。現在、私の正しい近似緯度/経度値は緯度 = -23および経度 = -46ですが、(時々)緯度 = 17および経度 = 81の値を受け取っています。誰かが何が起こっているのかについてのヒントを教えてもらえますか?