0

屋内測位用の Android アプリを開発しています。次の列を含むテーブルtbl_rssiに wifi フィンガープリントを既に保存しています。

  1. _id (各フィンガープリントの ID - これも tbl_reference_points._id の FK)
  2. MAC (各フィンガープリントで読み取ることができるアクセス ポイントの MAC アドレス)
  3. 信号(各アクセスポイントの信号)

次を含む別のテーブルtbl_reference_pointsもあります。

  1. _id (20 の基準点のそれぞれの PK)。
  2. floorNum (建物内)
  3. buildingNum (建物の数)

データベースで作業する前に:

  • WifiManager を宣言し、startScan() を使用して、所定の基準点ごとにアクセス ポイントとその信号を読み取ります。

  • スキャンの結果を に保存しList<ScanResult>ます。

tbl_rssi の 20 個の参照ポイント () のそれぞれに対して 10 個の MAC アドレスを保存したとします。ユーザーの位置 (20 の基準点のうちの 1 つ) を特定するには、次の手順を実行する必要があります。

  1. ScanResults のリストから取得しているのと同じ MAC アドレスを持つレコードを取得しています。ここで、動的クエリを作成する必要があると思います。
  2. 事前に保存された信号と、前のステップで各レコードのリストから読み取った信号との差を、20 の基準点すべてについて見つけます。
  3. 各差の二乗を個別に計算します。
  4. 20 の基準点のそれぞれについて、(差の二乗) の合計を計算する必要があります。
  5. 最小数を見つけます。これが必要な基準点です。

動的 SQL クエリを作成する必要があると思いますが、最初のステップとしてそれを行うことができます。しかし、私は SQL クエリを初めて使用するため、後続の手順で計算を行うには助けが必要です。前もって感謝します

4

1 に答える 1

0

SQL で計算を実行できるようにするには、データベースにスキャン結果が必要です。次のようなテーブルを作成します。

CREATE TEMPORARY TABLE ScanResults(MAC, signal);

そしてそれを埋めます。

ScanResults1 つの特定の基準点について、とtbl_rssi表を結合することにより、各 MAC の信号強度の差を計算できます。

SELECT tbl_rssi.MAC,
       tbl_rssi.signal - ScanResults.signal
FROM tbl_rssi JOIN ScanResults ON tbl_rssi.MAC = ScanResults.MAC
WHERE tbl_rssi._id = ?

二乗和の計算は、集計関数を使用して簡単に実行できます。

SELECT SUM((tbl_rssi.signal - ScanResults.signal) * 
           (tbl_rssi.signal - ScanResults.signal))
FROM tbl_rssi JOIN ScanResults ON tbl_rssi.MAC = ScanResults.MAC
WHERE tbl_rssi._id = ?

1 つの特定の基準点ではなく、各基準点の合計を計算するには、次を使用しますGROUP BY

SELECT tbl_rssi._id,
       SUM((tbl_rssi.signal - ScanResults.signal) * 
           (tbl_rssi.signal - ScanResults.signal))
FROM tbl_rssi JOIN ScanResults ON tbl_rssi.MAC = ScanResults.MAC
GROUP BY tbl_rssi._id

最小値の基準点を取得するには、結果を計算値列で並べ替え、最初のレコードのみを取得します。

SELECT tbl_rssi._id,
       SUM((tbl_rssi.signal - ScanResults.signal) * 
           (tbl_rssi.signal - ScanResults.signal))
FROM tbl_rssi JOIN ScanResults ON tbl_rssi.MAC = ScanResults.MAC
GROUP BY tbl_rssi._id
ORDER BY 2
LIMIT 1
于 2013-07-28T08:50:43.003 に答える