我在Android中有一个SQLite数据库,其中包含一个包含经度,纬度和其他列的表格。现在我想获得距离小于或等于给定距离的所有记录。
例如,我知道我当前的坐标(lat,long),我想从我的表中获取距离我最远10km的所有记录。
我在堆栈上找到了一些链接,但没有太多可靠。是否有人知道针对此问题的优化解决方案?
我原以为我可以得到纬度小于我的纬度+距离且大于我的纬度的所有记录 - 距离和经度小于我的长+距离且大于长距离。在此查询之后,我应检查一些不需要的记录,因为查询不返回所需的记录。 这是个好主意吗?
答案 0 :(得分:4)
您可能希望分两部分进行此操作,
1)运行一个查询,您可以在其中查找位于当前纬度/经度的某个值+或 - 内的所有记录,其中where子句可能如下所示:
where(@latitude>(lat - .001)和@latitude>(lat - .001))和 (@longitude>(lng- .001)和@longitude>(经度 - .001))
2)使用上面的粗略结果,使用大圆/半正方法来确定每个位置之间的实际距离(大圆/ hasrsinse已经是android maps api的一部分)。
答案 1 :(得分:3)
仅供记录,它可能很有用。
我不知道你要做什么,或者你有后端或服务器。但是,如果您有一个存储这些位置的服务器,您可以(并且应该)使用MongoDB来存储它。它对地理空间信息有很大的支持。
以下是使用MongoDB执行所需操作的示例:http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-Querying