我正在考虑在REST中使用DreamFactory。我有一个名为“tags”的表,它有一个名为“lat”的拼图,一个名为“lon”的表,用于存储在“db”中的位置的纬度和经度。
问题是,我需要能够将一个纬度和经度以及一个distance传递给我的服务调用,并过滤结果只返回行where,位置是<=,距离我提供的纬度和经度。
我的SQL命令有点生疏,但如下所示:
SELECT *, 3956 * 2 * ASIN(SQRT( POWER(SIN((42.347109 - abs(tags.lat)) * pi()/180 / 2),2) +
COS(42.347109 * pi()/180 ) * COS( abs (lat) * pi()/180) * POWER(SIN((-71.075589 – tags.lon) *
pi()/180 / 2), 2) )) as distance FROM tags having distance < 2;有人有做这种过滤器的经验吗?尤其是对DreamFactory?
发布于 2014-06-12 18:27:20
听起来,您需要在运行时对表中的全部记录执行距离计算。因此,从性能的角度来看,您可能希望数据库使用存储过程进行此计算。有关此方法的更多信息,请参见这篇文章。
latitude/longitude find nearest latitude/longitude - complex sql or complex calculation
触发服务器端事件的存储过程很快就会出现在DreamFactory路线图上(不是在6月中旬的1.6版中,而是在7月的下一个版本中)。该特性将允许您从客户端发出REST调用,该调用将触发DreamFactory运行您的存储过程,并将正确的JSON (或XML)格式的记录返回给客户机。
DreamFactory目前支持MySQL、Postgres和Server,因此只要您将其中一个关系数据库用于存储过程,存储过程方法就能工作(Oracle和DB2也在路线图上)。
希望这能有所帮助。
https://stackoverflow.com/questions/24152381
复制相似问题