Android 寻找室内定位的最小序列和(SS)
我正在开发一款用于室内定位的android应用程序,我已经将wifi指纹存储在一个包含以下列的表中:Android 寻找室内定位的最小序列和(SS),android,sql,sqlite,Android,Sql,Sqlite,我正在开发一款用于室内定位的android应用程序,我已经将wifi指纹存储在一个包含以下列的表中: _id(每个指纹的id-这也是tbl_参考点的FK。\u id) MAC(可在每个指纹中读取的接入点的MAC地址) 信号(每个接入点的信号) 我还有另一个表tbl_参考点,其中包含: _id(20个参考点中每一个的PK) 楼层(建筑内) buildingNum(建筑数量) 在使用我的数据库之前: 我声明WifiManager并使用startScan()读取每个预定参考点中的访问点及其信号 我将
- 我声明WifiManager并使用startScan()读取每个预定参考点中的访问点及其信号
- 我将扫描结果存储在
列表中
我相信我需要创建一个动态SQL查询,并且我可以在第一步就这样做。但是我需要帮助来完成后续步骤中的计算,因为我不熟悉SQL查询。提前感谢为了能够用SQL进行计算,您需要在数据库中有扫描结果。 创建如下表:
CREATE TEMPORARY TABLE ScanResults(MAC, signal);
然后填满它
对于一个特定参考点,您可以通过连接ScanResults
和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 = ?
要计算每个参考点(而不是一个特定参考点)的总和,请使用分组依据
:
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
能否提供存储数据的表的详细信息?您所做的任何尝试也会有所帮助。@GordonLinoff我编辑了我的文章,并在数据库中添加了另一个表。我尝试使用新的ArrayList来保存计算结果,但无法跟踪参考点ID