我正在考虑将DreamFactory用于我的REST API ..我有一个名为' tags
'有一个名为' lat
'还有一个名为' lon
'存储在我的数据库中的位置的纬度和经度
问题是我需要能够将纬度和经度与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?
答案 0 :(得分:2)
听起来您需要在运行时跨表中的完整记录集执行距离计算。因此,从性能角度来看,您可能希望让数据库使用存储过程进行此计算。有关此方法的更多信息,请参阅此文章。
latitude/longitude find nearest latitude/longitude - complex sql or complex calculation
使用服务器端事件触发存储过程很快就会出现在DreamFactory路线图中(不是在6月中旬的1.6版本中,而是在7月时间帧的下一个版本中)。该功能允许您从客户端进行REST API调用,触发DreamFactory以运行存储过程并将正确的JSON(或XML)格式的记录返回给客户端。
DreamFactory目前支持MySQL,Postgres和SQL Server,因此只要您将这些关系数据库之一用于存储过程,存储过程方法就可以运行(Oracle和DB2也在路线图上)。
希望有所帮助。