gpt4 book ai didi

android - 从 SQLite 数据库中获取某个点周围的所有项目

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:17 25 4
gpt4 key购买 nike

我有一个包含 map 位置 (纬度、经度) 的数据库,有没有一种方法可以执行 SQL 查询以返回特定位置周围的所有点?

现在我基本上是抓取数据库中的所有内容并遍历每一个并使用

检查距离
Location.distanceBetween(startPoint.latitude, startPoint.longitude,endPoint.latitude,endPoint.longitude, results);

并保持在设定距离内的项目,但可能有很多点要循环。

那么有没有办法在 SQL 语句中执行此操作?

最佳答案

您可以使用 WHERE 子句表达式过滤原点 (x0, y0) 的角距离 r。由于 SQLite 没有平方根函数,因此您必须使用平方距离:

SELECT ... FROM ...
WHERE (Latitude-x0)*(Latitude-x0) + (Longitude-y0)*(Longitude-y0) < r*r;

唯一无法正常工作的地方是靠近两极或本初子午线。它也是球体的平面近似,因此它仅适用于非常小的 r 值。最后,它平均缩放纬度和经度,所以所选区域看起来越椭圆,原点离赤道越远。

您必须将直线距离(例如,“30 米以内”)转换为纬度/经度差异。这是一个相当复杂的主题,因为地球不是一个完美的球体。但是,对于粗略计算,您可以使用 1 海里 = 1852 米 = 赤道经度 1 弧分的近似值。由于随着纬度远离赤道,经度线会靠得更近,因此您需要使用一些三角函数来计算在给定纬度下使用什么 r 值。有关此问题的更多信息,请参阅 this threadthis one ,或在网络上搜索“将米转换为经纬度”

关于android - 从 SQLite 数据库中获取某个点周围的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16110189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com