3.6. CSS工作簿结论

我们希望您喜欢这个造型车间。

其他资源:

3.6.1. CSS工作簿应答键

在整个讲习班中列出了以下问题,以此作为更深入探讨材料的机会。在查看这里的答案之前,请尽量仔细考虑这些问题。提供问题以教授有价值的技能,例如有机会了解如何使用要素类型样式来控制z顺序,或在用户手册中的何处查找信息。

3.6.1.1. SLD生成

回答 Challenge SLD Generation

  1. 为以下CSS生成SLD。

    * {
      stroke: black;
    }
    
  2. 挑战: 生成的SLD有什么异常?你能解释一下为什么它仍然像预期的那样工作吗?

    生成的SLD不包含任何笔画属性,即使指定了黑色::

    <sld:LineSymbolizer>
      <sld:Stroke/>
    </sld:LineSymbolizer>
    

    SLD认为黑色是线条符号的默认笔划颜色,因此不需要进一步的细节。

3.6.1.2. 分类

回答 Challenge Classification

  1. 挑战: 创建新样式根据 type .

    ../../../_images/line_type.png

    提示:可用值为“主要公路”、“次要公路”、“道路”和“未知”。

  2. 下面是一个例子:

    [type = 'Major Highway' ] {
        stroke: #000088;
        stroke-width: 1.25;
    }
    [type = 'Secondary Highway' ]{
        stroke: #8888AA;
        stroke-width: 0.75;
    }
    [type = 'Road']{
        stroke: #888888;
        stroke-width: .75;
    }
    [type = 'Unknown' ]{
        stroke: #888888;
        stroke-width: 0.5;
    }
    * {
       stroke: #AAAAAA;
       stroke-opacity: 0.25;
       stroke-width: 0.5;
    }
    

3.6.1.3. sld z-索引生成

回答 Challenge SLD Z-Index Generation

  1. 查看由 z-index 例子。

    * {
      stroke: black, #8080E6;
      stroke-width: 5px, 3px;
      z-index: 0, 1;
    }
    
  2. 挑战: 在生成的SLD中有一个有趣的技巧,你能解释一下它是如何工作的吗?

  3. z顺序示例生成多个FeatureTypesTitle定义,每个定义都像一个“内层”。

    每个FeatureTypeStyle都被渲染到自己的栅格中,结果按顺序合并。地图预览中显示的图例还提供提示,因为显示了每个FeatureType样式的规则。

3.6.1.4. 标签屏蔽

回答 Challenge Label Shields

  1. 在美国,传统的道路表示法是使用一个盾形符号,在顶部标记道路编号。

../../../_images/line_shield.png
  1. 挑战: 查看文档并复制此技术。

  2. 标签屏蔽的使用是geoserver呈现引擎的特定于供应商的功能。这个练习的棘手部分是在线查找文档(即 Styled Marks in CSS

    * {
        stroke: black,lightgray;
        stroke-width: 3,2;
        label: [name];
        font-family: 'Ariel';
        font-size: 10;
        font-fill: black;
        shield: symbol(square);
    }
    :shield {
        fill: white;
        stroke: black;
        size: 18;
    }
    

3.6.1.5. 抗锯齿

回答 Explore Antialiasing

  1. 当我们呈现初始预览时,没有笔画,在多边形之间可以看到白色的细缝(或长条)。

    ../../../_images/polygon_04_preview.png

    通过使用JAVA 2D子像素精度的渲染引擎,这种效果变得更加明显。此技术主要用于防止斜线上出现锯齿(阶梯状)外观。

  2. 探索: 实验 fill 设置以消除多边形之间的条。

    显而易见的方法是有效的-将两个值设置为相同的颜色:

    symbolizers:
    - polygon:
        stroke-color: 'lightgrey'
        stroke-width: 1
        fill-color: 'lightgrey'
    

3.6.1.6. 分类

回答 Explore Categorize

  1. geoserver的令人兴奋的使用 形状 符号是通过改变 size 用于图案密度。

  2. 探索: 使用 分类 功能到主题 数据等级 .

    ../../../_images/polygon_categorize.png

    例子:

    .. code-block:: css
    
       * {
         fill: symbol('shape://slash');
         fill-size: [
            Categorize(datarank,
             4, 4,
             5, 6,
             8, 10,
            10)
         ];
         stroke: black;
       }
       :fill {
         stroke: darkgray;
       }
    

3.6.1.7. 晕圈

回答 Challenge Halo

  1. Halo示例将填充颜色和不透明度用于静音Halo,而这提高了可读性,但并未引起标签的注意。

    强调的一个常见的设计选择是用对比色勾勒出文本的轮廓。

  2. 挑战: 生成一个在黑色文本周围使用白色光环的地图。

    下面是一个例子:

    * {  stroke: gray;
         fill: #7EB5D3;
         label: [name];
         label-anchor: 0.5 0.5;
         font-fill: black;
         font-family: "Arial";
         font-size: 14;
         halo-radius: 1;
         halo-color: white;
       }
    

3.6.1.8. 使用多个属性创建主题

回答 Challenge Theming using Multiple Attributes

  1. 一个强大的工具正在使用多个属性创建主题。这是一个重要的概念,允许地图阅读器执行“眼球集成”(检测属性值信息之间的相关性)。

  2. 挑战: 结合 地图颜色9数据等级 复制以下地图的示例。

    ../../../_images/polygon_multitheme.png

    这应该是使用 recode 示例,以及 categorize 已提供示例。

    * {
       fill: [
        recode(mapcolor9,
          1,'#8dd3c7', 2,'#ffffb3', 3,'#bebada',
          4,'#fb8072', 5,'#80b1d3', 6,'#fdb462',
          7,'#b3de69', 8,'#fccde5', 9,'#d9d9d9')
       ], symbol('shape://slash');
    
       fill-size: '',[
          Categorize(datarank,
           6, 4,
           8, 6,
          10, 10,
          12)
       ];
       stroke: black;
    }
    :fill {
       stroke: black;
    }
    

3.6.1.9. 使用Z索引

回答 Challenge Use of Z-Index

  1. 之前我们研究过使用 z-index 模拟管柱套管。线条画了两次,一次画粗线条,第二次画细线条。产生的效果类似于文本光环——在复杂的线条工作周围提供呼吸空间,使其脱颖而出。

  2. 挑战: 使用你所知道的linestring z-index 要复制以下地图:

    ../../../_images/polygon_zorder.png

    这是一个棘手的挑战。虽然引入z-index来控制笔画已经很容易了,但还不明显的是z-order也控制了填充顺序。前面的例子说明了如何引入z顺序,需要一些思想来解开填充和笔画z顺序(需要使用空逗号引入虚拟笔画定义)。

    * {
      fill: lightgray, symbol('shape://slash');
      fill-size: 8px;
      stroke: '','',lightgray, black;
      stroke-width: '','',6,1.5;
      z-index: 1,2,3,4;
    }
    :fill {
      stroke: black;
      stroke-width: 0.75;
    }
    

    所包含的图例应该是关于正在发生的事情的一个很大的线索。

3.6.1.10. 几何位置

回答 Challenge Geometry Location

  1. 这个 mark 属性可用于呈现任何几何内容。

  2. 挑战: 通过使用 mark 财产。

    这可以通过以下两种方式之一实现:

    • 更改多边形层的关联,例如 ne:states_provinces_shp 指向“示例”并使用“层预览”页。

    • 改变 Layer Preview 选项卡到多边形层,例如 ne:states_provinces_shp .

    需要注意的是,每个多边形的质心都被用作一个点位置。

3.6.1.11. 动态符号化

回答 Explore Dynamic Symbolization

  1. SLD标记和外部图形为动态符号化提供了机会。

    这是通过在传递给符号或url的字符串中嵌入一个小的cql表达式来实现的。此子表达式与 ${{ }} 如图所示:

    - point:
        symbols:
        - mark:
            shape: ${if_then_else(equalTo(FEATURECLA,'Admin-0 capital'),'star','circle')}
    
  2. 挑战: 使用此方法重写 动感造型 例子。

    此处提供示例 point_example.css

3.6.1.12. 图层组

回答 Challenge Layer Group

  1. 使用A 图层组 探索符号学如何一起工作以形成地图。

    • 东北:东北1

    • NE:州政府

    • NE:人口密集的地方

  2. 这个背景比较繁忙,必须注意确保符号和标签都清晰可见。

  3. 挑战: 在这个繁忙的背景下,尽你所能地为居住区设计风格。

    下面是一个带有灵感标签的示例:

    ../../../_images/point_challenge_1.png

    这应该是一个重新访问标签光环设置的机会 多边形 .

    * {
       mark-size: [5+((10-SCALERANK)/3)];
    
       font-fill: black;
       font-family: "Arial";
       font-size: 10;
    
       label-anchor: 0.5 1;
       label-offset: 0 [-12+SCALERANK];
    
       halo-radius: 2;
       halo-color: lightgray;
       halo-opacity:0.7;
    
       mark-label-obstacle: true;
       label-max-displacement: 90;
       label-priority: [0 - LABELRANK];
    }
    :symbol {
      fill: black;
      stroke: white;
      stroke-opacity:0.75;
    }
    

    使用浅灰色光晕,0.7不透明度和半径2淡出复杂的标签文本周围立即提高易读性。

3.6.1.13. 对比度增强

讨论 Explore Contrast Enhancement

  1. 灰度信息的一个特殊效果是自动对比度调整。

  2. 使用简单的对比度增强 usgs:dem

    * {
        raster-channels: auto;
        raster-contrast-enhancement: normalize;
    }
    
  3. 你能解释一下当放大到只显示一个陆地区域(如下面的边界框所示)时会发生什么吗?

    ../../../_images/raster_contrast_1.png

    发生的事情是疯狂的,规格化拉伸输出图像的调色板以使用完整的动态范围。只要屏幕上有海洋(值为0),陆地区域的显示方式大致相同。

    ../../../_images/raster_contrast_2.png

    一旦我们放大到只显示一个陆地区域,屏幕上的最低点(比如100)就变成了新的黑色,从根本上改变了屏幕上显示的内容。

3.6.1.14. 间隔

回答 Challenge Intervals

  1. 彩色地图 type 属性指示如何使用值生成结果颜色。

    • ramp 用于定量数据,在提供的颜色值之间提供平滑的插值。

    • intervals 为定量数据提供分类,为每个值范围指定纯色。

    • values 用于定性数据,每个值都需要 color-map 否则将不显示条目。

  2. Challenge: 更新您的DEM示例以使用 intervals 以供演示。对高程数据使用此方法的优势是什么?

    通过使用时间间隔,我们可以清楚地看到大陆大部分的相对平坦程度。斜坡展示提供了许多吸引人的细节,这些细节分散了人们对这个事实的注意力。

    ../../../_images/raster_interval.png

    下面是供您剪切和粘贴的样式:

    * {
      raster-channels: auto;
      raster-color-map:
         color-map-entry(#014636,   0,0)
         color-map-entry(#014636,   1)
         color-map-entry(#016c59, 500)
         color-map-entry(#02818a,1000)
         color-map-entry(#3690c0,1500)
         color-map-entry(#67a9cf,2000)
         color-map-entry(#a6bddb,2500)
         color-map-entry(#d0d1e6,3000)
         color-map-entry(#ece2f0,3500)
         color-map-entry(#fff7fb,4000);
      raster-color-map-type: intervals;
    }
    

3.6.1.15. 清晰的数字高程模型表示

回答 Challenge Clear Digital Elevation Model Presentation

  1. 既然您已经在屏幕上看到了数据,并且对如何修改最初的灰度示例有了更好的理解,那么您将如何修改这些数据呢?

  2. 挑战: 用你所学的来呈现 usgs:dem 很明显。

    ../../../_images/raster_grayscale.png

    原来是一个黑暗的混乱。考虑使用中间色调(或者采用来自颜色酿造商的顺序调色板)来解决这个问题。在下面的例子中,海洋一直是黑暗的,让山脉更加突出。

    * {
      raster-channels: auto;
      raster-color-map: color-map-entry(#000000, 0)
                        color-map-entry(#444444, 1)
                        color-map-entry(#FFFFFF, 3000);
    }
    

3.6.1.16. 栅格不透明度

讨论 Challenge Clear Digital Elevation Model Presentation

  1. 有一种快速的方法可以使栅格数据透明,栅格 不透明性 属性的工作方式与向量数据相同。栅格作为一个整体将被绘制为部分透明的,允许来自其他层的内容提供上下文。

  2. 挑战: 你能举出一个例子来说明这一点吗?

    这是很困难的,因为栅格数据通常是作为一个基础地图提供的,图层绘制在顶部。

    这里最明显的例子是天气系统的显示,或者模型输出,比如火灾危险。通过绘制具有一定透明度的栅格,可以为上下文显示陆块。