2012-03-30 4 views
3

GeoServer(2.1.1)、GeoWebCache(1.2.6)、OpenLayers(2.11)、GeoExtを使用してwebGISアプリケーションを開発中です。すべてのレイヤーはGeoWebCacheを通じてwmsとして提供されます。任意のレイヤのサンプル定義は、次のとおりです。GeoServer-GeoWebCacheレイヤーにMapFish印刷モジュールを使用する方法は?

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は空白です!!!

........から画像 を読みながら、私はAを検索しましたエラー(ステータス= 400):

にjava.io.IOException:私は、次のエラーメッセージを取得していますロット。 thisによれば、1つの選択肢は、TMSレイヤとして自分のレイヤにアクセスすることです。しかし、GeoServer WMSマップレイヤの代わりに、静的イメージレイヤは必要ありません。

もう一度別のオプションが見つかったhereは、OpenLayers.Control.ExportMap()を使用しています。 しかし、データのエクステントが大きすぎるため、さまざまなスケールを使用することが制限されています。その結果、ユーザーがOpenlayers divで完全には見えないマップエリア全体(A0用紙にあるかもしれない)の印刷物を撮りたいという特定のスケールでは、これは目的を解決することができません。

TMSまたはGeoWebCacheレイヤーを使用せずにこれをどのように達成できますか?

編集#1: 申し訳ありませんが、私は退職していました。以下は私のconfig.yamlファイルです。私はエラーがないと感じます、これはGeoServerから直接来る私のWMS層を印刷することができます。

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

答えて

2

さらにデバッグすることなく、400エラーは多くのヘルプにとってあまりにも曖昧です。経験から、geowebcacheサーバーが要求しているWMSレイヤーを提供していない前に問題が発生していたことがわかりました。 Mapfishは違ったタイルサイズで奇妙なことをしようとします(そしてあなたは最終的に10%のしきい値エラーを取得します)。ログには要求していたイメージが表示されますか?ブラウザのそのタイルに移動して、サーバーが実際に何を言っているのか確認できますか?これが最終的に私の問題を公開したのです。

デバッグが簡単になるように、Mapfishの問題を簡単に見つけるために、別のMapfishログも作成しました。 Geoserverの管理画面を使用して、使用しているロギングプロファイルを特定し、そのlog4j.propertiesファイル内でMapfishのファイルアペンダを個別に追加し、すべてのorg.mapfishアクティビティをそのディレクトリに転送します。これにより、デバッグがずっと簡単になります。

そしてFINALLY、私自身の個人的な十字軍:[ 'PDF']:形式を使用し、[PDF]、代わりに :あなたのconfig.yamlで、 outputFormatsを使用しないでください。

すべてのドキュメントがoutputFormatを記述していても(それはクライアントの "spec"に必要なものです)、実際のサーバー設定は 'formats'変数を使用しています。私はこれをドキュメントでより明確にするためのパッチを提出しましたが、それまではこのノートを参考にしましょう。画像の出力に入りたい場合は、これが重要です。

関連する問題