Android SQLite 查询我的位置与给定距离值之间的距离的行

Posted

技术标签:

【中文标题】Android SQLite 查询我的位置与给定距离值之间的距离的行【英文标题】:Android SQLite query for rows with distance between my location and a given distance value 【发布时间】:2012-03-20 19:54:55 【问题描述】:

我在 android 中有一个 SQLite 数据库,其中包含一个包含经度、纬度和其他列的表。现在我想获取距离小于或等于给定距离的所有记录。

例如,我知道我当前的坐标(纬度,经度),我想从我的表中获取距离我最远 10 公里的所有记录。

我在堆栈上找到了一些链接,但没有什么太可靠的。有没有人知道这个问题的优化解决方案?

我认为我可以获得所有纬度小于我的纬度 + 距离且大于我的纬度 - 距离和经度小于我的长途 + 距离且大于长途的记录。在这个查询之后,我应该检查一些不需要的记录,因为查询不只返回想要的记录.. 这是个好主意吗?

【问题讨论】:

这更像是一个 SQL 问题,而不是 Android。搜索 SQL 答案或在 Google 上搜索可能会更好 【参考方案1】:

你可能想分两部分来做,

1) 运行查询,在其中找到所有位于当前位置的 lat/lng 某个值 + 或 - 内的记录,where 子句可能如下所示:

其中 (@latitude > (lat - .001) 和 @latitude > (lat - .001)) 和 (@longitude> (lng- .001) 和@longitude> (longitude- .001))

2)根据上面的粗略结果,使用大圆/haversine方法确定每个位置之间的实际距离是多少(大圆/haversinse已经是android maps api的一部分)。

【讨论】:

【参考方案2】:

只是为了记录,它可能很有用。

我不知道您要做什么,或者您是否有后端或服务器。但是,如果您确实有一个存储这些位置的服务器,那么您可以(并且应该)使用 MongoDB 来存储它。它对地理空间信息有很好的支持。

这是一个使用 MongoDB 做你想做的事的例子:http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-Querying

【讨论】:

以上是关于Android SQLite 查询我的位置与给定距离值之间的距离的行的主要内容,如果未能解决你的问题,请参考以下文章

检测距给定位置最近的公交站点

将 SQLite 数据库从 sdcard 导入到 android - 没有资产文件夹

android:SQLite 查询与条件之间的问题

如何从 SQLite 数据库中的用户位置检索特定范围内的一组位置

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

Android SQLite 性能:单个查询中的多个选择与多个查询中的单个选择?