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 - 没有资产文件夹