2015-04-20 29 views
1

我已經設置了一個openlayers html窗口,它與geoserver平臺進行通信。 Geoserver通過參數化視圖連接到數據庫,其中整個「where」子句是一個參數。Geoserver sql查看參數搞錯了postgis函數調用

我的問題是,當我在我的數據庫中創建的形式 的SQL查詢,測試版「b,其中b.point_id < 100‘’從選擇b.the_geom」 它的工作原理。

如果我發送一個視圖參數GEOSERVER:從 「測試版」 B%參數%<

  • >選擇b.the_geom -

和參數是SQL語句的where子句我剛剛演示過的查詢,一切正常。

因此,我知道我的程序可以發送參數(完整的「where」子句)並將查詢輸出。例如,當ID爲< 40時,它顯示4點中的3點,如果ID爲<,則顯示全爲4.

但是,當我使用任何postgis函數比較幾何時,pgadmin中的sql查詢完美工作,並返回與第一部分中成功查詢相同類型的數據。例如,它會返回所有具有相同the_geom數字的幾何。

但是,當我實際上從html發送到地理服務器的where子句包含像ST_CROSSES(b.the_geom,c.the_geom)這樣的postgis函數時,沒有任何內容顯示在openlayers窗口中。

這怎麼可能?

+0

我會做的第一件事是檢查日誌,看看a)如果你得到一個錯誤和b)什麼查詢實際上正在執行 – mlinth

+0

我已經嘗試了上週,並設法打破一切。你在談論geoserver日誌或postgresql日誌嗎?我不能爲我的生活啓用postgresql日誌記錄,但與geoserver我仍然有機會 – JamesTR

+0

好吧,我已經設法找到可能在geoserver日誌中相關的東西,它表明「1層請求,但發現2查看指定的參數「 – JamesTR

回答

2

好吧,如果有人碰巧有同樣的問題,在查看建議的日誌後,我發現了罪魁禍首。 Geoserver抱怨有兩個參數,這意味着where子句中的逗號必須被轉義。在查看其他類似問題的人後,我發現您必須三次跳過逗號,「\ \ \」,從本質上確保在通過JavaScript發送請求後,「\,」將保持轉義狀態。