这是我的问题,我有一个包含位置和纬度/经度的SQLite表。基本上我需要:用SQLite计算大圆距离
SELECT location, HAVERSINE(lat, lon) AS distance FROM location ORDER BY distance ASC;
HAVERSINE()
是一个PHP函数应该返回Great-Circle Distance(英里或公里)给出一对纬度和经度值。 其中一对应由PHP提供,另一对应由locations
表中可用的每个纬度/经度行提供。
由于SQLite不具有任何地理空间扩展(据我所知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的一个大胜),我会感激一点。
在此先感谢!
你是否有没有定义自定义函数的工作方式?见http://stackoverflow.com/questions/3126830/query-to-get-records-based-on-radius-in-sqlite – Pentium10 2010-06-27 08:39:04
@ Pentium10:不,不是至少一快一。检查我的其他问题:http://stackoverflow.com/questions/2096385/formulas-to-calculate-geo-proximity。 – 2010-06-27 19:27:56