我有一个完整的地图位置(纬度,经度)的数据库,有没有办法我可以做一个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 thread或this one,或在网络上搜索“将米转换为纬度经度”.