我正在使用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 Printing模块......输出pdf是空白的!我收到以下错误消息:
java.io.IOException:读取图像时出错(status = 400) 从........
我搜索了很多。根据{{3}},一个选项是将我的图层作为TMS图层访问。但我不想要静态图像层,而是想要GeoServer WMS地图图层。
再次发现另一个选项this正在使用 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 :(得分:2)
如果没有进一步调试,400错误太过模糊,无法提供太多帮助。根据经验,我可以告诉你,在geowebcache服务器不喜欢为您请求的wms层提供服务之前,我已经看到了一个问题。 Mapfish试图用不同的瓷砖尺寸做奇怪的事情(最终你会得到10%的门槛误差)。您的日志是否显示它请求的图像?您可以在我们的浏览器中访问该磁贴,看看服务器实际上说了什么吗?这就是我最终揭露问题的方式。
为了便于调试,我还创建了一个单独的mapfish日志,以便更容易找到我的mapfish问题。使用Geoserver管理屏幕确定您正在使用的日志配置文件,然后在该log4j.properties文件中,为mapfish添加一个单独的文件appender,并将所有org.mapfish活动指向它。这使调试变得更加容易。
最终,我个人的讨伐:在你的config.yaml中, 不要使用 outputFormats:[pdf], 相反,使用格式:['pdf']。
即使所有文档都描述了outputFormat(并且这是客户端“spec”中所需要的),实际的服务器配置也使用'formats'变量。我已经提交了一个补丁,以便在文档中更加清晰,但在此之前,让我们将此笔记作为指南。如果你想进入图像输出,这是关键。