3

我正在使用 GeoServer (2.1.1)、GeoWebCache(1.2.6)、OpenLayers(2.11)、GeoExt 开发 webGIS 应用程序。我所有的图层都通过 GeoWebCache 作为 wms 服务。任何层的示例定义如下:

 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: Error (status=400) while reading image from.......

我已经搜索了很多。根据这个选项是访问我的层作为 TMS 层。但我不想要静态图像层,而不是 GeoServer WMS 地图层。

在这里找到的另一个选项是使用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
4

1 回答 1

2

如果没有进一步调试,400 错误太模糊,无法提供太多帮助。根据经验,我可以告诉你我之前看到过一个问题,geowebcache 服务器不喜欢为你请求的 wms 层提供服务。Mapfish 试图用不同的瓦片大小做奇怪的事情(你最终会得到 10% 的阈值错误)。您的日志是否显示它请求的图像?你能到我们浏览器中的那个图块看看服务器实际上说了什么吗?这就是我最终暴露我的问题的方式。

为了便于调试,我还创建了一个单独的 mapfish 日志,以便更轻松地找到我的 mapfish 问题。使用 Geoserver 管理屏幕来确定您正在使用哪个日志记录配置文件,然后在该 log4j.properties 文件中,为 mapfish 添加一个单独的文件附加程序,并将所有 org.mapfish 活动指向它。这使得调试更容易。

最后,我个人的圣战:在您的 config.yaml 中,不要使用outputFormats:[pdf],而是使用格式:['pdf']。

尽管所有文档都描述了 outputFormat(这是客户端“规范”中所要求的),但实际的服务器配置使用了“格式”变量。我已经提交了一个补丁,以便在文档中更清楚地说明这一点,但在那之前,让我们将此注释作为指南。如果你想进入图像输出,这是关键。

于 2012-04-30T03:31:49.047 回答