Android - 在SQLite数据库中保存位置

时间:2013-04-09 19:49:56

标签: android database sqlite sqldatatypes

我在SQLite数据库中保存纬度和经度有问题。我可以保存一些位置,如(123.123999,123.123999),它将保存在数据库中。 但如果我想阅读它,我会得到像(123.124,123.124)那样的圆形位置。

我的表由这个sql段创建:

CREATE TABLE locs(id INTEGER PRIMARY KEY AUTOINCREMENT, lat DOUBLE, lng DOUBLE, num INTEGER)

查询结果:

SELECT * FROM locs WHERE lat = 123.124; //RETURN NO ROWS
SELECT * FROM locs WHERE lat = 123.123999; //RETURN 1 ROW

所以我不能用我得到的数字来查询数据。

我相信我不是第一个处理这个问题的人,因为这是基本的事情。但我没有找到任何适用于SQLite数据库的答案。

如何在db中读取和写入正确的数字?

2 个答案:

答案 0 :(得分:2)

  

如何在db中读取和写入正确的数字?

我建议你快速解决一个问题。

由于您知道以何种格式存储坐标e.q.数字,所以将它们存储为TEXT然后将它们检索为TEXT没有问题,如果你想用它们做一些事情,那么简单地执行解析回DOUBLE

CREATE TABLE locs(
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   lat TEXT,
   lng TEXT,
   num INTEGER
)

答案 1 :(得分:0)

您应该在查询的值周围定义一个epsilon,即

SELECT * FROM locs WHERE lat BETWEEN value-epsilon AND value+epsilon;

您可以根据需要更改您的epsilon。在示例中,您给出了1e-3就足够了。

另一种选择是在插入值时对值进行舍入,但随后您将丢失可能需要的信息。