2012-03-30 74 views
3

我正在使用GeoServer(2.1.1),GeoWebCache(1.2.6),OpenLayers(2.11),GeoExt開發webGIS應用程序。我所有的圖層都通過GeoWebCache作爲wms服務。對於任何層的樣本定義如下:如何將MapFish打印模塊用於GeoServer-GeoWebCache圖層?

var My_Layer = new OpenLayers.Layer.WMS("My_Layer", 
      "http://my-ip + my-port/geoserver/gwc/service/wms", 
      {layers: 'layer-name',transparent: "true",format: "image/png", 
      tileSize: new OpenLayers.Size(256,256), 
      tilesOrigin : map.maxExtent.left + ',' + map.maxExtent.bottom }, 
      { isBaseLayer: false, visibility:false}); 

一切工作正常,直到這一點。但是,當我計劃提前一點並嘗試實施MapFish打印模塊......輸出pdf是空白的!我收到以下錯誤消息:

java.io.IOException異常:錯誤(狀態= 400),而從........

讀取圖像 我尋覓了許多。根據this一個選項是訪問我的圖層作爲TMS層。但我不想要一個靜態圖像層,而不是一個GeoServer WMS地圖圖層。

再次發現另一個選項here正在使用OpenLayers.Control.ExportMap()。 但由於我的數據範圍太大,限制使用不同的比例。因此,如果用戶想要打印整個地圖區域(可能在A0文件中),這在Openlayers div中完全不可見,這就無法解決目的。

所以問題是我該如何做到這一點,而不使用TMS或GeoWebCache圖層?

編輯#1: 對不起我遲到了,因爲我不在辦公室。以下是我的config.yaml文件。我覺得沒有錯誤,這可以打印我的WMS圖層,直接來自GeoServer。

dpis: [75, 150, 300] 

outputFormats: 
    - pdf 

scales: 
    - 10000 
    - 25000 
    - 50000 
    - 100000 

hosts: 
    - !localMatch 
    dummy: true 
    - !ipMatch 
    ip: www.camptocamp.org 
    - !dnsMatch 
    host: labs.metacarta.com 
    port: 80 
    - !dnsMatch 
    host: terraservice.net 
    port: 80 
    - !dnsMatch 
    host: sigma.openplans.org 
    - !dnsMatch 
    host: demo.mapfish.org 

layouts: 
    A4 portrait: 
    metaData: 
     title: 'Arunava TopoMap PDF' 
     author: 'Arunava print module' 
     subject: 'Map layout' 
     keywords: 'map,print' 
     creator: 'Arunava' 
    mainPage: 
     pageSize: A4 
     rotation: true 
     items: 
     - !text 
      text: '${mapTitle} ${now MM.dd.yyyy}' 
      fontSize: 20 
      spacingAfter: 30 
     - !map 
      spacingAfter: 30 
      width: 440 
      height: 600 
     - !scalebar 
      type: bar 
      maxSize: 100 
      barBgColor: white 
      fontSize: 8 
      align: right 
     - !text 
      font: Helvetica 
      fontSize: 9 
      align: right 
      text: '1:${scale}' 
     footer: *commonFooter 

    A2 portrait: 
    metaData: 
     title: 'Arunava TopoMap PDF' 
     author: 'Arunava print module' 
     subject: 'Map layout' 
     keywords: 'map,print' 
     creator: 'Arunava' 
    mainPage: 
     pageSize: A2 
     rotation: true 
     items: 
     - !text 
      text: '${mapTitle} ${now MM.dd.yyyy}' 
      fontSize: 20 
      spacingAfter: 30 
     - !map 
      spacingAfter: 30 
      width: 880 
      height: 1200 
     - !scalebar 
      type: bar 
      maxSize: 100 
      barBgColor: white 
      fontSize: 8 
      align: right 
     - !text 
      font: Helvetica 
      fontSize: 9 
      align: right 
      text: '1:${scale}' 
     footer: *commonFooter 
+0

mapfish配置是否正確?你可以發佈config.yaml嗎? – igorti 2012-03-30 13:49:16

回答

2

沒有進一步的調試,400錯誤太模糊了很多幫助。根據經驗,我可以告訴你我在geowebcache服務器不喜歡服務你請求的wms層之前就已經看到了一個問題。 Mapfish試圖用不同的瓷磚尺寸做怪異的事情(最終你會得到10%的閾值錯誤)。你的日誌顯示它正在請求的圖像嗎?你可以在我們的瀏覽器中查看該服務器的實際內容嗎?這就是我最終暴露我的問題的方式。

爲了便於調試,我還創建了一個單獨的mapfish日誌,以便更容易地找到我的mapfish問題。使用Geoserver管理員屏幕找出您正在使用的日誌配置文件,然後在該log4j.properties文件中,爲mapfish添加一個單獨的文件appender,並將所有org.mapfish活動指向它。這使得調試更容易。

而且FINALLY,我個人的討伐:在你的config.yaml,不使用 outputFormats:[PDF], 而是使用格式: 'PDF'。

儘管所有文檔都描述了outputFormat(並且這是客戶端「規範」中所要求的),但實際的服務器配置使用的是「格式」變量。我已經提交了一個補丁,以便在文檔中更加清楚,但在此之前,讓我們以本說明爲準。如果你想進入圖像輸出,這是關鍵。

相關問題