屋内測位用の Android アプリを開発しています。次の列を含むテーブルtbl_rssiに wifi フィンガープリントを既に保存しています。
- _id (各フィンガープリントの ID - これも tbl_reference_points._id の FK)
- MAC (各フィンガープリントで読み取ることができるアクセス ポイントの MAC アドレス)
- 信号(各アクセスポイントの信号)
次を含む別のテーブルtbl_reference_pointsもあります。
- _id (20 の基準点のそれぞれの PK)。
- floorNum (建物内)
- buildingNum (建物の数)
データベースで作業する前に:
WifiManager を宣言し、startScan() を使用して、所定の基準点ごとにアクセス ポイントとその信号を読み取ります。
スキャンの結果を に保存し
List<ScanResult>
ます。
tbl_rssi の 20 個の参照ポイント () のそれぞれに対して 10 個の MAC アドレスを保存したとします。ユーザーの位置 (20 の基準点のうちの 1 つ) を特定するには、次の手順を実行する必要があります。
- ScanResults のリストから取得しているのと同じ MAC アドレスを持つレコードを取得しています。ここで、動的クエリを作成する必要があると思います。
- 事前に保存された信号と、前のステップで各レコードのリストから読み取った信号との差を、20 の基準点すべてについて見つけます。
- 各差の二乗を個別に計算します。
- 20 の基準点のそれぞれについて、(差の二乗) の合計を計算する必要があります。
- 最小数を見つけます。これが必要な基準点です。
動的 SQL クエリを作成する必要があると思いますが、最初のステップとしてそれを行うことができます。しかし、私は SQL クエリを初めて使用するため、後続の手順で計算を行うには助けが必要です。前もって感謝します