安卓 - 在SQLite数据库中保存位置

4

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

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


添加代码,展示你如何获取它们。 - Simon Dorociak
2个回答

2

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

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

由于您知道存储坐标(例如数字)的格式,因此将它们存储为TEXT,然后作为TEXT检索,如果需要对其进行操作,则可以简单地执行解析以转换为DOUBLE

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

0
您应该在查询值周围定义一个小区间,即

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

您可以根据需要更改epsilon。在您提供的示例中,1e-3应该足够。

另一个选项是在插入值时对其进行四舍五入,但这样会丢失您未来可能需要的信息。


我的真正关键问题是我得到了一个四舍五入的值。他们怎么没想过解决这个问题...而且在你的第一种方法中,你需要epsilon 1e-3,因为123.1235也会被四舍五入到123.124。 - nrofis
先生,您是正确的。已在帖子中进行了更正。但是,如果您担心得到的是四舍五入的值,那么您还应该发布用于检索它的代码。 - scf
我就是不知道这个round如何影响真实位置,无论我的代码怎么写都是错的。(我只是在地图上显示点) - nrofis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接