Как использовать модуль печати MapFish для слоя GeoServer-GeoWebCache? - PullRequest
3 голосов
/ 30 марта 2012

Я нахожусь в процессе разработки приложения webGIS с использованием GeoServer (2.1.1), GeoWebCache (1.2.6), OpenLayers (2.11), GeoExt.Все мои слои подаются как wms через 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 Printing ...... выходной pdf пустой !!!Я получаю следующее сообщение об ошибке:

java.io.IOException: ошибка (состояние = 400) при чтении изображения из ........

Я много искал.Согласно этот один вариант заключается в том, чтобы получить доступ к моим слоям как к слою TMS.Но я не хочу, чтобы слой статического изображения использовался вместо слоя карты GeoServer WMS.

Снова найден другой вариант здесь используется OpenLayers.Control.ExportMap (). Но это ограничивает использование разных масштабов, так как мой объем данных слишком велик.В результате в определенном масштабе, если пользователь хочет сделать отпечаток всей области карты (может быть на бумаге формата A0), которая не полностью видна в элементе Openlayers, это не может решить задачу.

Таким образом, вопрос в том, как я могу это сделать, не используя слой 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

1 Ответ

2 голосов
/ 30 апреля 2012

Без дальнейшей отладки ошибка 400 слишком расплывчата для большой помощи.По опыту могу сказать, что раньше я сталкивался с проблемой, когда серверу geowebcache не нравится обслуживание запрашиваемого вами слоя wms.Mapfish пытается делать странные вещи с разным размером тайлов (и в итоге вы получаете 10% -ную пороговую ошибку).Показывает ли ваш журнал изображение, которое он запрашивал?Можете ли вы перейти на эту плитку в нашем браузере, чтобы увидеть, что на самом деле говорит сервер?Вот как я в конце концов обнажил свои проблемы.

Для облегчения отладки я также создал отдельный журнал mapfish, чтобы упростить поиск проблем с mapfish.Используйте экран администратора Geoserver, чтобы выяснить, какой профиль ведения журнала вы используете, затем в этом файле log4j.properties добавьте отдельный файловый аппендер для mapfish и направьте на него все действия org.mapfish.Это значительно упрощает отладку.

И И наконец , мой личный крестовый поход: в вашем config.yaml, не используйте outputFormats:[pdf], вместо этого, используйте форматы : ['pdf'].

Несмотря на то, что все документы описывают outputFormat (и это то, что требуется в "спецификации" клиента), фактический серверconfig использует переменную format.Я представил патч, чтобы сделать это более понятным в документации, но до тех пор давайте эту заметку будем руководить.Если вы хотите попасть в вывод изображения, это ключ.

...