2015-06-19 81 views
0

我在Google和StackOverflow上搜索是否有人對我的問題有解決方案,但沒有發現任何人有同樣的問題。Mapserver的臨時磁貼高速緩存

因此,目前我正在運行安裝有Mapserver的Debian機器。該服務器還運行webserver以通過瀏覽器顯示地圖數據。地圖的生成是動態的,基於數據庫中的圖層定義我在PHP中構建mapfile,並基於生成的PHP地圖向用戶顯示。數據在數據庫中定義並作爲SHP文件(都在單個映射文件中組合)。

它是完全動態的,我的意思是說,用戶可以啓用/禁用任何圖層或單擊內部多邊形(選擇地圖上的某些點)它爲選區着色(根據選擇生成新的地圖文件並重新生成磚)。

因此,從選擇某個區域到選定項目着色的所有代碼的執行需要花費太多時間以獲得良好的用戶體驗。

對於解決方案,我想使用某種類型的臨時切片緩存,可用於單個用戶,並且可以在用戶選擇地圖上的某些項目或啓用/禁用其中一個圖層時刪除其內容。

P.S.我已經做了從Mapserver文檔提供的所有優化。

感謝您的任何幫助。

+0

請張貼您的地圖文件。你使用的是哪個數據庫?數據庫查找速度慢嗎?還是渲染?或者兩者兼而有之?你是如何衡量這一點的? –

+0

嗨,我使用的最簡單的地圖示例包含DOF和來自PG數據庫的兩層,mapfile如下所示:http://pastebin.com/0qb87Wgs。 – user2473933

+0

我認爲最耗時的任務是處理DOF文件和重新投影數據,因爲我使用的數據保存在我們當地的高斯克魯格投影中,但後來又重新投影到Google的3857投影中,其中地圖顯示給用戶。我使用mapfile中的DEBUG選項將映射文件生成設置爲5,並在linux中查找進程。我不知道如何測試從創建mapfile到在屏幕上顯示切片的整個過程的性能。 – user2473933

回答

0

這聽起來像你的問題不會被服務器端緩存幫助。如果所有的貼圖都依賴於用戶選擇,那麼每當有交互時你就會生成一堆新的貼圖。

我一直在使用MapCache來解決類似的問題,我正在渲染一個tileset以響應用戶查詢。但是我已經把我的瓷磚分成了多個邏輯層,並且我在瀏覽器端進行了合成。這讓我可以在服務器端緩存各種查詢的切片,並且極大地提升了性能。我確實將緩存放到了12級,我需要使用BerkeleyDB緩存類型以防止inode耗盡。

我使用的是用於瀏覽器端渲染的Leaflet.js,但您也應該考慮OpenLayers。


看過源代碼後,我有一些其他的想法。

看起來您每次都以相同的方式繪製每個圖層。是對的嗎?也就是說,特定圖層的樣式和謂詞從不改變。如果用戶選擇了圖層,每個用戶都會以相同的方式查看該圖層。但是,基於OpenLayers控件,您展示的圖層組合是否會發生變化?如果是這種情況,則不需要服務器上的每用戶緩存。相反,使用每層緩存,並讓用戶的瀏覽器找出客戶端緩存。

尋找緩慢層的一種快速技術就是將它們全部轉化。然後一個接一個地找到罪魁禍首。從命令行調用Mapserver,並計算運行時間,以獲得比通過Web服務器運行它更高的精度。

您提到您正在使用Google 3857中的圖像,而這些圖層位於高斯克魯格/ EPSG 3912.重新投影此操作非常昂貴。在飛行中重新投射光柵非常昂貴。如果可以的話,你應該提前重新投影它們,並將它們存儲在3857中(添加一個額外的幾何列)。

我不知道DOF文件是什麼 - 可能是數字障礙文件?也許可以將DOF文件預加載到PostGIS中?這將消除你認爲有問題的兩件。

看看在SQL查詢中PostGIS的正在執行,並確保那些使用索引

在任何情況下,這些單獨的層應該進入MapCache,在我看來。由MapCache項目領導者提供的Here is a video of a September 2014 talk

+0

謝謝你的回答。與你的情況不同,幾乎所有圖層都是動態的,但柵格圖層是靜態的,所以可能有一些預緩存空間。關於多個圖層 - 由於在瀏覽器中顯示地圖的過程中使用了大量圖像,因此我應該有多少層不會遇到性能問題? – user2473933

+0

假設樣式不會改變是錯誤的,因爲當用戶點擊圖形時(即當用戶使用選擇工具並單擊內部多邊形時,將新表達式添加到地圖文件中,爲所選多邊形着色時,圖層樣式會改變)。 我將在OpenLayers中添加與OpenLayers相同投影的其他幾何列以查看效果,然後檢查視頻以查看MapCache是​​否對我有用 - 目前我看到它對於已經提到的DOF(數字Ortophoto)非常有用,層。 關於調試 - 我認爲我必須測量從用戶點擊到渲染的整個過程。 – user2473933

+0

調試/分析:Web服務器端添加與查詢/渲染問題無關的可變性(服務器負載,延遲)。這就是爲什麼我建議離開這個。這只是噪音。動態地圖文件:如果您向我們展示更多代碼,這將有所幫助。當用戶輸入改變時,精確地對地圖/地圖文件進行了哪些更改?測量:哪些圖層很慢? –