这是我的问题,我有一个包含位置和纬度/经度的 SQLite 表。基本上我需要:
SELECT location, HAVERSINE(lat, lon) AS distance FROM location ORDER BY distance ASC;
HAVERSINE()
是一个 PHP 函数,它应该返回给定一对纬度和经度值的大圆距离(以英里或公里为单位)。其中一对应由 PHP 提供,另一对应由表中可用的每个纬度/经度行提供locations
。
由于 SQLite 没有任何地理空间扩展(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();
我在弄清楚如何获得 SQLite 用户定义的函数来同时处理来自 PHP 和表数据的数据时遇到了一些麻烦,如果有人可以帮助我解决这个问题,同时也理解 SQLite UDF,我将不胜感激(一个巨大的胜利SQLite IMO) 好一点。
提前致谢!