(私はアンドロイド開発の初心者なので、ダウンキャストに投票しないでください。私の悪い英語で申し訳ありません)
私はHaver Sine式を使用して距離bt 2点を計算しています。
上記の場合、Alix Axel は mysql と php を使用しますが、私の場合、これを Android アプリに実装しています。実際に私のアプリには、GPS とネットワーク プロバイダーの両方を使用してアプリが経度/緯度を継続的に取得する LocationService (バックグラウンド) があります。を使用して....
locationManager.requestLocationUpdates(provider, THIRTY_SEC, HUNDRED_METER, Locationlistener);
その場所の基本よりも最適なものが見つかったら、sqlite indexng クエリを実行しています。私の sqlite クエリは (このメソッドは SQLiteHelper クラスで同期されます)
SELECT * FROM (
SELECT * FROM Places WHERE
(Lat >= 1.2393 AND Lat <= 1.5532) AND (Lon >= -1.8184 AND Lon <= 0.4221)
) WHERE
acos(sin(1.3963) * sin(Lat) + cos(1.3963) * cos(Lat) * cos(Lon - (-0.6981))) <= 0.1570;
上記のように、このクエリは、ローカル変数に保存しているいくつかの行を返します
List<Places> places = aboveQuery(location);
結果の場所は1,100以上になる可能性があり、その後、リスト内の場所ごとに簡単な通知を生成しています。そのため、通知はまだ 1、100、またはそれ以上になる可能性があります。以下は、このタスクを実行しているコードです。
public class LocationServices extends Service {
// rest of the code here to fatch location using GPS, Network
private class LocationServiceProcess implements Runnable {
@Override
public void run() {
try {
List<Places> Places = query a databse for location matching
// generate notification here
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
皆さんは私の問題を理解していただけると思います。私の質問は
Alix Axel が彼の投稿で、Haversine Formula は Vincenty Formula よりもはるかに高速であると述べているように、約 6 秒で 100 万回の計算を実行できました。
このシナリオは、データベースから現在の場所に代わって場所を取得するのに最適ですか (私のデータベース テーブルに数千の場所/行が含まれているとします)。つまり、この計算とサービス スレッドでのデータのクエリが最適かどうかです。(サービスメインスレッド以外で実行する必要があります)そうでない場合は、何をすべきか教えてください??
その後、場所のリストを取得したら、同じスレッドで通知を生成するか、すべての場所をブロードキャストし、BroadCastReceiver で各場所の通知を生成するのが最善の考えです。場所の名前、発生する時間、小さな説明のみを含む簡単な通知だけを覚えておいてください