【问题标题】:Cannot print polygons filled with hatches with Geoserver print无法使用 Geoserver 打印打印填充有阴影的多边形
【发布时间】:2017-10-23 08:48:00
【问题描述】:

我有一个用 Leaflet 构建的叶绿素地图,由于插件 Leaflet-polygon.fillPattern.js 显示了填充有阴影的多边形,它工作正常。

function myStyle (feature)  {
        return {
            fill: 'url(assets/img/image.png)',
            fillColor: '#6677cd',
            weight: 7,
            opacity: 1,
            fillOpacity: 1
        }
    }  

    var layer = new L.geoJson(data,{
        style:myStyle 
    });

我可以使用 Geoserver print 和 Leaflet.print 插件打印我的地图,但问题是我打印的地图只显示填充了颜色的多边形而不是我的图案。

我检查了我发送到 Geoserver 打印的规范 Json,它显示填充功能的选项设置得很好:

fill:"url(assets/img/image.png)"  

我尝试了 png 和 svg 图像,但都没有显示。

知道为什么我的打印地图没有渲染多边形中的阴影吗?

这是我尝试在 Geoserver 中发送多边形样式时的 SLD 代码

<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" 
xmlns:ogc="http://www.opengis.net/ogc" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1.0" 
xmlns:xlink="http://www.w3.org/1999/xlink" 
xsi:schemaLocation="http://www.opengis.net/sld 
http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" 
xmlns:se="http://www.opengis.net/se">
  <NamedLayer>
    <se:Name>PSC_Surf</se:Name>
    <UserStyle>
      <se:Name>PSC_Surf</se:Name>
      <se:FeatureTypeStyle>
        <se:Rule>
          <se:Name>Single symbol</se:Name>
          <se:PolygonSymbolizer>
            <se:Fill>
              <se:SvgParameter name="fill">#ffff00</se:SvgParameter>
            </se:Fill>
            <se:Stroke>
              <se:SvgParameter name="stroke">#000001</se:SvgParameter>
              <se:SvgParameter name="stroke-width">1</se:SvgParameter>
              <se:SvgParameter name="stroke-linejoin">bevel
</se:SvgParameter>
        </se:Stroke>
      </se:PolygonSymbolizer>
      <se:PolygonSymbolizer>
        <se:Fill>
          <se:GraphicFill>
            <se:Graphic>
              <se:Mark>
                    <se:WellKnownName>horline</se:WellKnownName>
                    <se:Stroke>
                      <se:SvgParameter name="stroke">#5c00b8</se:SvgParameter>
                      <se:SvgParameter name="stroke-width">3</se:SvgParameter>
                    </se:Stroke>
                  </se:Mark>
                  <se:Size>11</se:Size>
                  <se:Rotation>
                    <ogc:Literal>45</ogc:Literal>
                  </se:Rotation>
                </se:Graphic>
              </se:GraphicFill>
            </se:Fill>
          </se:PolygonSymbolizer>
        </se:Rule>
      </se:FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

更准确地说,我的问题是为什么 Geoserver 打印模块没有渲染我在传单中调用的填充样式,这要归功于带有 style 选项的 leaflet-polygon.fillPattern.js 填充:'url(assets/img/image.png)',

对于标记层,我可以调用我的图标并将它们发送到规范 JSON 中的 Geoserver 打印模块:

var iconUrl = icon.options.iconUrl;
style = {externalGraphic: this._getAbsoluteUrl(iconUrl)};

所以,我尝试了我的多边形: style = {graphicFill: url(assets/img/image.png)};

但它不起作用

【问题讨论】:

  • GeoServer 可以看到“assets/img/image.png”吗?
  • 是的,我在同一个文件夹中有图标,它适用于图标和外部图形
  • 如果您在 GeoServer 中设置多边形样式,它会起作用吗?
  • 我只是尝试导出我最初在 Qgis 中的多边形样式,然后在 SLD 中导出我的样式。然后,我在 Geoserver 中应用了这种样式,我看不到舱口......
  • 请将 SLD 的相关部分添加到问题中

标签: printing leaflet fill geoserver


【解决方案1】:

GeoServer 无法将horline 识别为众所周知的形状,因为documented here 您需要使用shape://horline

【讨论】:

  • 好的,谢谢@Ian Turton,我会在第二个选项中尝试,在 Geoserver 中使用 SLD 设置图层样式,并在 Leaflet 中将其称为 WMS 图层。但我的问题完全不同,我会更准确地编辑我的帖子
  • 然后需要添加打印插件生成的SLD
  • 它确实可以用 SLD 为我的多边形设置样式,谢谢 Ian。但是当我想打印带有传单的 wfs 图层时,它仍然无法解决我的问题,我打印的地图仍然没有显示影线
  • 正如我所说,您需要查看打印插件发送到 GeoServer 的 SLD,然后将其放入问题中。
猜你喜欢
  • 2018-01-01
  • 1970-01-01
  • 2012-12-08
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
相关资源
最近更新 更多