相关疑难解决方法(0)

SQlite获取最近的位置(经度和纬度)

我的SQLite数据库中存储了纬度和经度数据,我希望得到最接近我输入参数的位置(例如我的当前位置 - lat/lng等).

我知道这在MySQL中是可能的,我已经做了很多研究,SQLite需要为Haversine公式定义外部函数(计算球体上的距离),但我还没有找到任何用Java编写的工作.

此外,如果我想添加自定义函数,我需要org.sqlite.jar(for org.sqlite.Function),这会给应用程序增加不必要的大小.

另一方面,我需要SQL中的Order by函数,因为单独显示距离并不是一个大问题 - 我已经在我的自定义SimpleCursorAdapter中做了,但是我无法对数据进行排序,因为我我的数据库中没有距离列.这意味着每次更改位置时都会更新数据库,这会浪费电池和性能.因此,如果有人知道使用不在数据库中的列对游标进行排序,我将不胜感激!

我知道有很多Android应用程序使用这个功能,但有人可以解释一下魔术.

顺便说一句,我找到了另一种方法:查询在SQLite中获取基于Radius的记录?

它建议为lat和lng的cos和sin值创建4个新列,但是还有其他任何不那么冗余的方法吗?

java sqlite android geolocation

82
推荐指数
3
解决办法
5万
查看次数

用SQLite计算大圆距离

这是我的问题,我有一个包含位置和纬度/经度的SQLite表.基本上我需要:

SELECT location, HAVERSINE(lat, lon) AS distance FROM location ORDER BY distance ASC;
Run Code Online (Sandbox Code Playgroud)

HAVERSINE()是一个PHP函数,应该返回给定一对纬度和经度值的大圆距离(以英里或公里为单位).其中一对应由PHP提供,另一对应由locations表中可用的每个纬度/经度行提供.

由于SQLite没有任何Geo Spatial扩展(AFAIK SpatiaLite存在但仍然......)我猜测最好的方法是使用自定义函数和其中一个PDO方法:

我认为对于这种情况PDO::sqliteCreateFunction()就足够了,但是我对这个函数的有限经验可以简化为类似于PHP手册中提供的用例:

$db = new PDO('sqlite:geo.db');

function md5_and_reverse($string) { return strrev(md5($string)); }

$db->sqliteCreateFunction('md5rev', 'md5_and_reverse', 1);
$rows = $db->query('SELECT md5rev(filename) FROM files')->fetchAll();
Run Code Online (Sandbox Code Playgroud)

我在弄清楚如何获得一个SQLite用户定义函数来同时处理来自PHP和表数据的数据时遇到了一些麻烦.如果有人能帮助我解决这个问题同时也理解SQLite UDF(一个大赢家),我将不胜感激. SQLite IMO)好一点.

提前致谢!

php sqlite pdo geospatial haversine

7
推荐指数
2
解决办法
6898
查看次数

Android上的Sqlite:如何创建一个sqlite dist db函数 - 在app中用于使用lat进行距离计算,long

我们正在构建一个Android应用程序,它将使用用户的当前位置(lat,long)并显示当前位置周围的前50个场所,按距离排序.

我们将这些场所存储在SQLite DB中.我们计划随应用程序一起发布sqlite数据库.

为了仅获取相关的前50个最近的场所,我们想要定义db函数DIST(以计算两点之间的距离)并在我们的查询中使用它.

如何为Android应用程序定义自定义SQLite功能?要执行此操作的Java API调用是什么?

我们已经在iPhone App中成功实现了这种方法 - 使用Objective C.

java sqlite android

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

sqlite ×3

android ×2

java ×2

geolocation ×1

geospatial ×1

haversine ×1

pdo ×1

php ×1