我在Android應用程序的正常SQLite數據庫中存儲具有位置(lat/long)的對象。應用程序接收存儲在此DB中的新對象的消息(UDP數據包)。根據當前位置刪除數據庫行
爲了避免數據庫在一個點爆炸並保持點亮,我想刪除所有遠離特定半徑的對象。數據庫通過DB-Adapter類來實現DB Helper。
由於我不想使用距離近似值,我想使用haversine公式。現在我有以下問題:
- 在輕量級智能解決方案中實現此任務的最佳方法是什麼?
- 我想過使用AsyncTask來完成這項工作。這是建議嗎?
我在Android應用程序的正常SQLite數據庫中存儲具有位置(lat/long)的對象。應用程序接收存儲在此DB中的新對象的消息(UDP數據包)。根據當前位置刪除數據庫行
爲了避免數據庫在一個點爆炸並保持點亮,我想刪除所有遠離特定半徑的對象。數據庫通過DB-Adapter類來實現DB Helper。
由於我不想使用距離近似值,我想使用haversine公式。現在我有以下問題:
這是我一直在使用以獲得一種條款與存儲在數據庫中的GPS數據對象的方法:
public String getOrderString(double latitude, double longitude) {
double fudge = Math.pow(Math.cos(Math.toRadians(latitude)), 2);
return "((" + latitude + " - " + KEY_LATITUDE + ") * (" + latitude
+ " - " + KEY_LATITUDE + ") + (" + longitude + " - "
+ KEY_LONGITUDE + ") * (" + longitude + " - " + KEY_LONGITUDE
+ ") * " + fudge + ") ASC";
}
從here「借」。我對這個模糊因素的理解是它考慮到不在赤道附近的座標。迄今爲止,這個方程對我來說效果很好,而且速度很快。
現在,我想你可以使用相同的公式,通過執行類似:
public String getWhereString(double latitude, double longitude, double threshold) {
double fudge = Math.pow(Math.cos(Math.toRadians(latitude)), 2);
return "((" + latitude + " - " + KEY_LATITUDE + ") * (" + latitude
+ " - " + KEY_LATITUDE + ") + (" + longitude + " - "
+ KEY_LONGITUDE + ") * (" + longitude + " - " + KEY_LONGITUDE
+ ") * " + fudge + ") < " + threshold;
}
然後你刪除的方法是這樣的:
public int removeBuildingEntry(double latitude, double longitude, double threshold) {
String where = getWhereString(double latitude, double longitude, double threshold)
return db.delete(TABLE, where, null);
}
唯一的問題是,我不知道方程結果的單位,因此應該通過什麼作爲閾值。在我的情況下,我不關心那些,因爲我只想要訂單,但在你的情況下,可能會有所作爲。如果您需要更精確的數字,您可以使用不同的值或嘗試計算它。
看這個答案http://stackoverflow.com/a/12997900/779408 – breceivemail