在SQLite数据库中最近的lat和long

时间:2014-08-06 16:24:04

标签: android sqlite

嗨所以我的问题是iv创建一个Android项目,它获取用户当前的纬度和经度,然后使用SQLite数据库在那个位置给它们风速。

我的数据库由4列组成,这些列都是字符串值,其中第1列是ID,第二列是WindSpeed,第三列是经度,第四列是纬度。

我的问题是什么,我需要找到数据库中用户当前位置的最近位置,我已经问过这个问题并且有一个答案,但我不确定它是否正确,如果是正确实施则是b我做错了什么因为我完全陷入困境并开始恐慌

我认为问题可能在于Where子句,但我可能错了。

这是代码

  public class MyDatabase extends SQLiteAssetHelper {

private static final String DATABASE_NAME = "WindSpeedDB.sqlite";
private static final int DATABASE_VERSION = 1;
private static final String LAT_VAL = "Latitude";
private static final String LONG_VAL = "Longitude";
private static final String WIND_SPEED = "WindSpeed";
private static final String ROW_ID=     " ID";
double Lat=   52.9318635;
double Long=  0.6692808;
public MyDatabase(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}




    public Double getWindSpeed2(){

    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

        String [] sqlSelect = {WIND_SPEED,LAT_VAL,LONG_VAL}; 
        String sqlTables = "WindSpeed";
        String whereClause = " ? BETWEEN "+LAT_VAL+" - 1 and "+LAT_VAL+" + 1 and ?     BETWEEN "+LONG_VAL+" - 1 and "+LONG_VAL+" + 1";
        String[] whereArgs = new String[] {
                String.valueOf(Lat),
                String.valueOf(Long)};

        qb.setTables(sqlTables);

        Cursor d = qb.query(db, sqlSelect, whereClause, whereArgs, null, null, null);

     Double wind_speed= 0.0;
     double min_distance=999999;

     if (d != null && d.moveToFirst()){
          double lat_v=Double.parseDouble(d.getString(2));
          double long_v=Double.parseDouble(d.getString(3));
          double dis=Math.sqrt( (lat_v-Lat)*(lat_v-Lat) + (long_v-Long)*(long_v-Long)   );
          if (dis<min_distance){

            wind_speed=Double.parseDouble(d.getString(1));
          }
        }

        return wind_speed;
   }

    }

问题是这总是给我一个0.0的结果,我相信它在风速下传递一个空值,因此它没有找到数据库中的值,即使lat和long im的值是一个在数据库等应该给出那个地方的风速。

任何帮助都会非常受欢迎,因为我可笑地被卡住了!

1 个答案:

答案 0 :(得分:0)

游标的列访问函数使用从零开始的索引;你必须阅读第0,1和2列。

游标可能会返回多行;将if替换为while

永远不要将数字存储为字符串;在比较中,字符串大于任何数字。

query永远不会返回null;你可以放弃d != null支票。