2014-06-10 58 views
0

我正在研究使用DreamFactory作爲我的REST API ..我有一個名爲'tags'的表,它有一個名爲'lat'的柱子和一個名爲'lon'的緯度和經度爲存儲在我的「DB」如何在DreamFactory中執行復雜過濾API

問題是,我需要能夠與一個distance沿着緯度和經度傳遞給我的服務電話和過濾結果只返回where位置是<行位置=的距離提供從我提供的經度和緯度..

我的SQL命令有點生疏,但s像這樣:

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?

回答

2

聽起來就像您需要在表中的整個記錄​​集上執行距離計算。所以從性能角度來看,您可能希望讓數據庫使用存儲過程進行此計算。有關此方法的更多信息,請參閱此文章。

latitude/longitude find nearest latitude/longitude - complex sql or complex calculation

觸發與服務器端事件的存儲過程是在DreamFactory路線圖即將在這裏(不是1.6六月中旬版本,但在七月的時間內完成下一個版本)。該功能可讓您從客戶端進行REST API調用,從而觸發DreamFactory運行存儲過程,並以JSON(或XML)格式將正確的記錄返回給客戶端。存儲過程方法將會起作用(Oracle和DB2也在路線圖上)。只要你在存儲過程中使用其中一個關係數據庫,存儲過程方法就可以工作(Oracle和DB2也在路線圖上)。

希望有所幫助。

+0

本,謝謝.. Dreamfactory團隊一直非常有幫助。非常感激。也就是說,我正在使用Dreamfactory中內置的數據庫..我假設,因爲它是SQL,添加存儲過程的能力將被允許用於默認數據庫嗎? – erik

+0

樂意幫忙!只要您安裝DreamFactory開源軟件包(來自Bitnami或直接來自GitHub),您就可以將存儲過程添加到DreamFactory(即MySQL)中內置的數據庫中。不過,您不能在DreamFactory的免費託管版本中使用存儲過程。免費的託管版本實際上是一個多租戶開發人員沙箱,我們不希望像粗略存儲過程這樣的流氓過程瘋狂地爲其他系統降低系統性能。 – Ben

+0

我在亞馬遜網絡服務上運行它..這是一個免費的安裝..是嗎? – erik