GeoServer发布图层遇到的几个雷点及解决方案

目录

前言

一、图层编码导致图层预览无服务的异常问题

1、问题描述

 2、问题分析

3、问题解决

 二、图层空间参考投影设置的问题

1、问题描述

2、问题分析

3、问题解决

三、Qgis导出的SLD在GeoServer中发布预览报错的问题

1、问题描述

 2、问题分析

3、问题解决

 四、GeoServer中多字段拼接联合标注问题

1、问题描述

2、问题分析解决

 总结


前言

        在前面的博客GeoServer中使用Qgis发布的SLD样式进行图层美化中,基本学会了自主发布地图图层数据。也了解了基于地图的基本样式设置。对Webgis制图的基本流程和操作方式有了基本认识。在平时的工作学习过程当中,还会遇到很多的问题。这里简单几种常见的问题,以及针对性的解决方案。

        这里的雷点和坑点主要是以下几个方面:

  1. 图层编码导致图层预览无服务的异常问题。
  2. 图层空间参考投影设置的问题。
  3. Qgis导出的SLD在GeoServer中发布预览报错的问题。
  4. GeoServer中多字段拼接联合标注问题。

        本文将紧密围绕以上四个问题,通过在GeoServer中以上4个问题的具体描述以及问题的针对性解决方案,让读者在实际操作中遇到以上问题时,知道如何去解决。

一、图层编码导致图层预览无服务的异常问题

1、问题描述

        问题场景:原始shp数据的数据编码是UTF-8格式,GeoServer中数据dbf数据的字符集采用ISO-8859-1。数据发布后,使用预览服务进行数据预览时,出现下载页面,同时在GeoServer控制台中明显看到报错信息。

        tomcat的控制台的报错日志如下所示:

 2、问题分析

        出现以上问题,初步看起来是因为在样式设置的时候,图层样式定义文件中有“省代码”的样式没有找到,找不到的原因是由于字符编码不对应导致的样式无法应用到图层中。知道了出现的原因就可以对症下药,只需要在Geoserver发布图层数据时,将图层数据的字符编码与原始文件保持一致即可。原始文件的编码可以使用Qgis软件进行查看。

3、问题解决

        在GeoServer中,将字符集编码设置为GBK,完成后点击保存。

 完成后,在图层预览中,点击OpenLayers预览,可以看到图层服务正常,不会再有下载的提示。

 二、图层空间参考投影设置的问题

1、问题描述

        原始的省份数据采用的Albers等面积投影,在Geoserver中发布不好找,默认的坐标参考系统没有定义,在数据选择页面中默认为Unknown。

         其读取的srs信息如下:

PROJCS["µÈÃæ»ýµÄAlbersͶӰ", 
  GEOGCS["GCS_WGS_1984", 
    DATUM["D_WGS_1984", 
      SPHEROID["WGS_1984", 6378137.0, 298.257223563]], 
    PRIMEM["Greenwich", 0.0], 
    UNIT["degree", 0.017453292519943295], 
    AXIS["Longitude", EAST], 
    AXIS["Latitude", NORTH]], 
  PROJECTION["Albers_Conic_Equal_Area"], 
  PARAMETER["central_meridian", 105.0], 
  PARAMETER["latitude_of_origin", 0.0], 
  PARAMETER["standard_parallel_1", 25.0], 
  PARAMETER["false_easting", 0.0], 
  PARAMETER["false_northing", 0.0], 
  PARAMETER["standard_parallel_2", 47.0], 
  UNIT["m", 1.0], 
  AXIS["x", EAST], 
  AXIS["y", NORTH]]

2、问题分析

        这里为了统一统一的坐标参考系,默认为4326,所以把省图层的坐标参考信息也同样修改为4326。解决投影的问题有很多的解决方案,arcgis或者qgis都可以直接使用。这里讲解使用Qgis来进行转换。

3、问题解决

        在原来的图层数据,使用鼠标右键,点击导出,在导出的数据参数设置中,将坐标参考系修改为4326,(同时可以设置字符编码)。   详细信息如下图所示:

         将导出的数据按照步骤一进行数据发布即可解决这个问题。

三、Qgis导出的SLD在GeoServer中发布预览报错的问题

1、问题描述

        将Qgis中导出的SLD文件导入到GeoServer中,经过数据验证也没有报错,在选择数据进行预览时出现错误。图层并没有按照设想进行展示。

<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:se="http://www.opengis.net/se" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1.0">
  <NamedLayer>
    <se:Name>2022年全国百强县一般公共预算收入榜</se:Name>
    <UserStyle>
      <se:Name>2022年全国百强县一般公共预算收入榜</se:Name>
      <se:FeatureTypeStyle>
        <se:Rule>
          <se:Name>45 - 100</se:Name>
          <se:Description>
            <se:Title>45 - 100</se:Title>
          </se:Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThanOrEqualTo>
                <ogc:PropertyName> abs("ggys")</ogc:PropertyName>
                <ogc:Literal>44.79999999999999716</ogc:Literal>
              </ogc:PropertyIsGreaterThanOrEqualTo>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName> abs("ggys")</ogc:PropertyName>
                <ogc:Literal>100</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <se:PolygonSymbolizer>
            <se:Fill>
              <se:SvgParameter name="fill">#f7fcf5</se:SvgParameter>
            </se:Fill>
            <se:Stroke>
              <se:SvgParameter name="stroke">#232323</se:SvgParameter>
              <se:SvgParameter name="stroke-width">1</se:SvgParameter>
              <se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
            </se:Stroke>
          </se:PolygonSymbolizer>
        </se:Rule>
        <se:Rule>
          <se:TextSymbolizer>
            <se:Label>
              <!--SE Export for NAME + '\n' + ' 预算收入' + ggys + '(亿元)' not implemented yet-->Placeholder</se:Label>
            <se:Font>
              <se:SvgParameter name="font-family">SimSun</se:SvgParameter>
              <se:SvgParameter name="font-size">13</se:SvgParameter>
            </se:Font>
            <se:LabelPlacement>
              <se:PointPlacement>
                <se:AnchorPoint>
                  <se:AnchorPointX>0</se:AnchorPointX>
                  <se:AnchorPointY>0.5</se:AnchorPointY>
                </se:AnchorPoint>
              </se:PointPlacement>
            </se:LabelPlacement>
            <se:Fill>
              <se:SvgParameter name="fill">#000000</se:SvgParameter>
            </se:Fill>
            <se:VendorOption name="maxDisplacement">1</se:VendorOption>
          </se:TextSymbolizer>
        </se:Rule>
      </se:FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

         在进行图层预览时出现如下提示,abs('ggys')定义找到。

 2、问题分析

        这份SLD是在Qgis中进行样式设置生成的,使用Qgis中采用abs(‘ggys’),表示的是对公用预算采用绝对值,abs是一个函数名字,对公共预算的绝对值进行区间分类设置。但是这个函数仅在Qgis软件中支持,在GeoServer中没有这个函数。

        在Qgis中,要设置区间分类,要求值必须为数值类型,通过绝对值函数进行转换。在Geoserver中可以直接使用。

3、问题解决

        明确以上这个问题后,就可以进行针对性的解决。在GeoServer中将abs函数去掉。

<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:And>
     <ogc:PropertyIsGreaterThanOrEqualTo>
     <ogc:PropertyName> ggys</ogc:PropertyName>
     <ogc:Literal>44.79999999999999716</ogc:Literal>
</ogc:PropertyIsGreaterThanOrEqualTo>
 <ogc:PropertyIsLessThanOrEqualTo>
     <ogc:PropertyName>ggys</ogc:PropertyName>
     <ogc:Literal>50</ogc:Literal>
     </ogc:PropertyIsLessThanOrEqualTo>
     </ogc:And>
</ogc:Filter>

        将以上图层保存后,重新预览发现服务正常。

 四、GeoServer中多字段拼接联合标注问题

1、问题描述

        在Qgis中进行中文标注是,采用联合标注的方式,生成代码如下所示:

<se:Rule>
          <se:TextSymbolizer>
            <se:Label>
              <!--SE Export for NAME + '\n' + ' 预算收入' + ggys + '(亿元)' not implemented yet-->Placeholder</se:Label>
            <se:Font>
              <se:SvgParameter name="font-family">SimSun</se:SvgParameter>
              <se:SvgParameter name="font-size">13</se:SvgParameter>
            </se:Font>
            <se:LabelPlacement>
              <se:PointPlacement>
                <se:AnchorPoint>
                  <se:AnchorPointX>0</se:AnchorPointX>
                  <se:AnchorPointY>0.5</se:AnchorPointY>
                </se:AnchorPoint>
              </se:PointPlacement>
            </se:LabelPlacement>
            <se:Fill>
              <se:SvgParameter name="fill">#000000</se:SvgParameter>
            </se:Fill>
            <se:VendorOption name="maxDisplacement">1</se:VendorOption>
          </se:TextSymbolizer>
        </se:Rule>

        这里对文字标注进行了声明

<se:Label>
<!--SE Export for NAME + '\n' + ' 预算收入' + ggys + '(亿元)' not implemented yet-->Placeholder
</se:Label>

        这个标注最终也是无法进行展示。导出图层标注为:Placeholder

2、问题分析解决

要解决这个问题比较简单,直接给出解决方案。采用xml的文字拼接表达式来实现。

<se:Rule>
          <se:TextSymbolizer>
            <se:Label>
              <ogc:PropertyName>NAME</ogc:PropertyName><![CDATA[]]>
              <![CDATA[公共预算收入]]>
              <ogc:PropertyName>ggys</ogc:PropertyName><![CDATA[(亿元)]]>
            </se:Label>
            <se:Font>
              <se:SvgParameter name="font-family">SimSun</se:SvgParameter>
              <se:SvgParameter name="font-size">13</se:SvgParameter>
            </se:Font>
            <se:LabelPlacement>
              <se:PointPlacement>
                <se:AnchorPoint>
                  <se:AnchorPointX>0</se:AnchorPointX>
                  <se:AnchorPointY>0.5</se:AnchorPointY>
                </se:AnchorPoint>
              </se:PointPlacement>
            </se:LabelPlacement>
            <se:Fill>
              <se:SvgParameter name="fill">#000000</se:SvgParameter>
            </se:Fill>
            <se:VendorOption name="maxDisplacement">1</se:VendorOption>
          </se:TextSymbolizer>
        </se:Rule>

        最主要的核心代码如下:

<se:Label>
    <ogc:PropertyName>NAME</ogc:PropertyName><![CDATA[]]>
    <![CDATA[公共预算收入]]>
    <ogc:PropertyName>ggys</ogc:PropertyName><![CDATA[(亿元)]]>
</se:Label>

 总结

        以上就是本文的主要内容,本文将紧密围绕图层编码导致图层预览无服务的异常问题、图层空间参考投影设置的问题、Qgis导出的SLD在GeoServer中发布预览报错的问题、GeoServer中多字段拼接联合标注问题,通过在GeoServer中以上4个问题的具体描述以及问题的针对性解决方案,让读者在实际操作中遇到以上问题时,知道如何去解决。

  • 25
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 31
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜郎king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值