2012-03-30 3 views
3

Ich entwickle gerade eine WebGIS-Anwendung mit GeoServer (2.1.1), GeoWebCache (1.2.6), OpenLayers (2.11), GeoExt. Alle meine Schichten werden als WMS durch GeoWebCache bedient. Eine Beispieldefinition für jede Schicht ist wie folgt:Wie wird das MapFish-Druckmodul für den GeoServer-GeoWebCache-Layer verwendet?

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}); 

Alles funktioniert gut, bis zu diesem Punkt. Aber, als ich vorhatte, ein bisschen voran zu gehen und versuchte, MapFish Druckmodul ...... zu implementieren, ist das ausgegebene pdf leer !!! Ich erhalte die folgende Fehlermeldung:

java.io.IOException: Fehler (status = 400), während die Bildlese von ........

Ich habe gesucht ein Menge. Gemäß this besteht eine Möglichkeit darin, auf meine Layer als TMS-Layer zuzugreifen. Aber ich möchte keine statische Bildschicht, sondern eine GeoServer WMS-Kartenebene.

Wieder eine andere Option gefunden here verwendet OpenLayers.Control.ExportMap(). Aber das beschränkt die Verwendung anderer Maßstäbe, da mein Datenumfang zu groß ist. Als Ergebnis in einem bestimmten Maßstab, wenn der Benutzer einen Ausdruck des gesamten Kartenbereichs (möglicherweise in einem A0-Papier) machen möchte, der nicht vollständig im Divisor Openlayers sichtbar ist, kann dies den Zweck nicht lösen.

Die Frage ist also, wie kann ich dies erreichen, ohne einen TMS oder GeoWebCache-Layer zu verwenden?

Bearbeiten # 1: Sorry, ich bin zu spät, da ich nicht im Büro war. Im Folgenden finden Sie meine Datei config.yaml. Ich habe den Eindruck, dass es keinen Fehler gibt. Dadurch können meine WMS-Layer gedruckt werden, die direkt von GeoServer kommen.

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

ist mapfish korrekt konfiguriert? kannst du config.yaml posten? – igorti

Antwort

2

Ohne weitere Fehlersuche ist der 400 Fehler zu vage für viel Hilfe. Aus Erfahrung kann ich Ihnen sagen, dass ich ein Problem zuvor gesehen habe, bei dem der geowebcache-Server die von Ihnen angeforderte wms-Schicht nicht bedienen möchte. Mapfish versucht, seltsame Dinge mit verschiedenen Kachelgrößen zu tun (und Sie erhalten schließlich einen 10% -Schwellenwertfehler). Zeigt Ihr Protokoll das angeforderte Bild an? Kannst du auf diese Kachel in unserem Browser gehen, um zu sehen, was der Server eigentlich sagt? So habe ich schließlich meine Probleme aufgedeckt.

Um das Debuggen zu erleichtern, habe ich auch ein separates Mapfish-Protokoll erstellt, um meine Mapfish-Probleme leichter zu finden. Verwenden Sie den Geoserver-Administratorbildschirm, um herauszufinden, welches Protokollierungsprofil Sie verwenden. Fügen Sie dann in der Datei log4j.properties einen separaten Dateiappender für mapfish hinzu, und richten Sie alle org.mapfish-Aktivitäten darauf aus. Dies erleichtert das Debugging erheblich.

Und ENDLICH, mein eigener persönlicher Kreuzzug: in Ihrer config.yaml, nicht verwenden outputFormats: [pdf], stattdessen verwenden Formate: [ 'pdf'].

Obwohl alle Dokumente outputFormat beschreiben (und das ist in der "spec" des Clients erforderlich), verwendet die tatsächliche Serverkonfiguration die Variable "formats". Ich habe einen Patch eingereicht, um dies in den Dokumenten klarer zu machen, aber bis dahin sollten wir uns diese Notiz als Richtlinie vorstellen. Wenn Sie in die Bildausgabe kommen wollen, ist dies der Schlüssel.

Verwandte Themen