1

地理的近接性を計算する式

(私はアンドロイド開発の初心者なので、ダウンキャストに投票しないでください。私の悪い英語で申し訳ありません)

私は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 万回の計算を実行できました。

  1. このシナリオは、データベースから現在の場所に代わって場所を取得するのに最適ですか (私のデータベース テーブルに数千の場所/行が含まれているとします)。つまり、この計算とサービス スレッドでのデータのクエリが最適かどうかです。(サービスメインスレッド以外で実行する必要があります)そうでない場合は、何をすべきか教えてください??

  2. その後、場所のリストを取得したら、同じスレッドで通知を生成するか、すべての場所をブロードキャストし、BroadCastReceiver で各場所の通知を生成するのが最善の考えです。場所の名前、発生する時間、小さな説明のみを含む簡単な通知だけを覚えておいてください

4

1 に答える 1