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

Posted

技术标签:

【中文标题】Android - 在 SQLite 数据库中保存位置【英文标题】:Android - Save location in SQLite database 【发布时间】:2013-04-01 10:19:03 【问题描述】:

我在 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 数据库的答案。

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

【问题讨论】:

添加您检索它们的代码。 【参考方案1】:

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

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

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

另一种选择是在插入值时对其进行四舍五入,但这样会丢失以后可能需要的信息。

【讨论】:

我真正的关键问题是我得到了四舍五入的值。他们是如何没有想到解决这个问题的...在您的第一种方式中,您需要 epsilon 1e-3 因为 123.1235 也将四舍五入为 123.124 您说得对,先生。已在帖子中更正。但是,如果您关心的是获得舍入值的事实 - 您还应该发布用于检索它的代码。 我只是不知道这一轮对真实位置的影响,不知道我的代码是什么,它错了。 (我只是在地图上显示点)【参考方案2】:

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

我建议你一个快速的解决方案。

由于您知道存储坐标的格式,例如:数字所以没有问题将它们存储为TEXT,然后将它们检索为TEXT,如果你想对它们做一些事情,只需执行解析回DOUBLE

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

【讨论】:

以上是关于Android - 在 SQLite 数据库中保存位置的主要内容,如果未能解决你的问题,请参考以下文章

将用户应用程序数据保存在 SQLite/Android 中是不是符合 HIPAA 标准?

Android 从 Sqlite 数据库保存和获取图像

从 SQLite 数据库加载的数据未保存在模型类 ArrayList android 中

急求android中SQLite样例代码???

Android:如何用相机拍照并将位图转换为字节数组并保存到sqlite db?

遍历嵌套的json对象并将数据保存在android sqlite