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 标准?
从 SQLite 数据库加载的数据未保存在模型类 ArrayList android 中