【问题标题】:Mapfish Print Vector layer GeoJSON example?Mapfish 打印矢量图层 GeoJSON 示例?
【发布时间】:2013-07-16 16:29:38
【问题描述】:

我正在使用 MapFish Print 生成地图的 PDF,当我只使用 WMS 图层作为基础图块时,在 pdf 中创建地图图像是完全可以的。按预期工作。

但是,当我在其中添加矢量图层和 geoJSON 对象时,mapfish print 会引发以下错误:

Exception in thread "tilesReader3" java.lang.NullPointerException
        at org.mapfish.print.map.renderers.vector.PointRenderer.renderImpl(PointRenderer.java:113)
        at org.mapfish.print.map.renderers.vector.PointRenderer.renderImpl(PointRenderer.java:49)
        at org.mapfish.print.map.renderers.vector.GeometriesRenderer.render(GeometriesRenderer.java:69)
        at org.mapfish.print.map.renderers.vector.FeaturesRenderer$FeatureRenderer.renderImpl(FeaturesRenderer.java:62)
        at org.mapfish.print.map.renderers.vector.FeaturesRenderer$FeatureRenderer.renderImpl(FeaturesRenderer.java:58)
        at org.mapfish.print.map.renderers.vector.FeaturesRenderer.render(FeaturesRenderer.java:53)
        at org.mapfish.print.map.renderers.vector.FeaturesRenderer$FeatureCollectionRenderer.renderImpl(FeaturesRenderer.java:70)
        at org.mapfish.print.map.renderers.vector.FeaturesRenderer$FeatureCollectionRenderer.renderImpl(FeaturesRenderer.java:67)
        at org.mapfish.print.map.renderers.vector.FeaturesRenderer.render(FeaturesRenderer.java:53)
        at org.mapfish.print.map.readers.VectorMapReader$1.renderOnPdf(VectorMapReader.java:85)
        at org.mapfish.print.map.ParallelMapTileLoader.handle(ParallelMapTileLoader.java:97)
        at org.mapfish.print.map.ParallelMapTileLoader.handle(ParallelMapTileLoader.java:41)
        at org.pvalsecc.concurrent.OrderedResultsExecutor.addOutput(OrderedResultsExecutor.java:148)
        at org.pvalsecc.concurrent.OrderedResultsExecutor.access$600(OrderedResultsExecutor.java:23)
        at org.pvalsecc.concurrent.OrderedResultsExecutor$Runner.run(OrderedResultsExecutor.java:181)
        at java.lang.Thread.run(Unknown Source)

我发送给 Mapfish 打印的查询是默认示例的略微修改版本(使用不同的 WMS 作为示例的默认设置已关闭),添加了矢量图层,如下所示:

          {
             layout: 'A4 portrait',
             title: 'A simple example',
             srs: 'EPSG:4326',
             units: 'dd',
             outputFilename: 'mapfish-print',
             outputFormat: 'pdf',
             layers: [
                 {
                     type: 'WMS',
                     format: 'image/png',
                     layers: ['OSM-GB:__all__'],
                     baseURL: 'http://www.osmgb.org.uk/ogc/wms'
                 },
                 {
                     type: 'Vector',
                     geoJson: {
                        "type": "FeatureCollection",
                        "features": [
                            {
                                "type": "Feature",
                                "geometry": {
                                    "type": "Point",
                                    "coordinates": [
                                        -0.0996621,
                                        51.5059247
                                    ]
                                },
                                "properties": {
                                }
                            },
                            {
                                "type": "Feature",
                                "geometry": {
                                    "type": "Point",
                                    "coordinates": [
                                        -0.099332,
                                        51.5072000
                                    ]
                                },
                                "properties": {
                                }
                            },
                            {
                                "type": "Feature",
                                "geometry": {
                                    "type": "Point",
                                    "coordinates": [
                                        -0.0945508,
                                        51.50240484
                                    ]
                                },
                                "properties": {
                                }
                            }
                        ]
                    }
                 }
             ],
             pages: [
                 {
                     center: [0.09, 51.50],
                     scale: 4000000,
                     dpi: 190,
                     mapTitle: "First map",
                     comment: "The \"routes\" layer is not shown (the scale is too small)",
                     data: [
                         {id:1, name: 'blah', icon: 'icon_pan'},
                         {id:2, name: 'blip', icon: 'icon_zoomin'}
                     ]
                 },
                 {
                     center: [0.09, 51.50],
                     scale: 500000,
                     dpi: 190,
                     mapTitle: "Second map",
                     comment: "This is a zoomed in version of the first map. Since the scale is more appropriate, we show the \"routes\" layer.",
                     data: [
                         {id:1, name: 'blah', icon: 'icon_pan'},
                         {id:2, name: 'blip', icon: 'icon_zoomin'}
                     ]
                 }
             ]
          }

GeoJSON 验证并显示在 geojsonlint.com 上,很好。查看了 mapfish print 的来源后,我无法弄清楚为什么会发生这种情况。虽然这似乎与样式有关,但我没有运气在请求中添加一个来解决此问题。

-- 更新:

如果其他人遇到过这个问题,那么问题是(未记录),您必须在矢量图层中定义一组样式,并确保 geoJSON 中的每个特征都使用一种样式。

【问题讨论】:

    标签: java json maps gis geojson


    【解决方案1】:

    问题在于(未记录),您必须在矢量图层内定义一组样式和一个样式属性,并确保 geoJSON 中的每个特征都使用一个样式。

    样式本身是 SVG 样式,虽然很多标签被重命名,所以它们不是填充颜色,而是填充颜色。

    更多细节请看这里:http://www.mapfish.org/doc/print/protocol.html#layers-params

    【讨论】:

      【解决方案2】:

      需要定义的SVG样式格式为OpenLayers.Feature.Vector.style

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-08
        • 1970-01-01
        相关资源
        最近更新 更多