Android 寻找室内定位的最小序列和(SS)

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()读取每个预定参考点中的访问点及其信号 我将

我正在开发一款用于室内定位的android应用程序,我已经将wifi指纹存储在一个包含以下列的表中:

  • _id(每个指纹的id-这也是tbl_参考点的FK。\u id)
  • MAC(可在每个指纹中读取的接入点的MAC地址)
  • 信号(每个接入点的信号)
  • 我还有另一个表tbl_参考点,其中包含:

  • _id(20个参考点中每一个的PK)
  • 楼层(建筑内)
  • buildingNum(建筑数量)
  • 在使用我的数据库之前:

    • 我声明WifiManager并使用startScan()读取每个预定参考点中的访问点及其信号

    • 我将扫描结果存储在
      列表中

    假设我在tbl_rssi中为20个参考点()中的每一个存储了10个mac地址。要确定用户的位置(即他所在的20个参考点之一),我需要执行以下步骤:

  • 检索与我从扫描结果列表中获得的mac地址相同的记录。在这里,我想应该创建一个动态查询
  • 找出预存储信号和我们在上一步中为所有20个参考点的每条记录在列表中读取的信号之间的差异
  • 分别计算每个差值的平方
  • 对于20个参考点中的每一个,应计算(差异平方)之和
  • 找到最小的数字,这是所需的参考点

  • 我相信我需要创建一个动态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