自由标记模板

介绍

本教程将向您介绍一个更深入的视图,了解什么是FreeMarker模板,以及如何使用由GeoServer提供给模板的数据。

Freemarker 是一个简单但功能强大的模板引擎,Geoserver使用它来允许用户定制输出。特别是,在编写本文时,它被用来允许定制GetFeatureInfo、GeoRSS和KML输出。

Freemarker允许简单的变量扩展,如 ${{myVarName}} ,嵌套属性的扩展,如 ${{feature.myAtt.value}} ,最多使用循环、ifs和变量的小程序。关于如何编写模板的大多数相关信息都包含在Freemarker的 Designer guide 不会在这里重复:导游,还有 KML Placemark模板获取功能信息模板 教程应该足够好,可以让您很好地掌握如何构建模板。

模板查找

Geoserver在三个不同的位置查找模板,允许不同级别的定制。例如,在给定 content.ftl 用于生成WMS GetFeatureInfo内容的模板:

  • 观察 GEOSERVER_DATA_DIR/workspaces/<workspace>/<datastore>/<featuretype>/content.ftl 查看是否存在特定于要素类型的样板

  • 观察 GEOSERVER_DATA_DIR/workspaces/<workspace>/<datastore>/content.ftl 查看是否存在特定于商店的模板

  • 观察 GEOSERVER_DATA_DIR/workspaces/<workspace>/content.ftl 查看是否存在特定于工作区的模板

  • 观察 GEOSERVER_DATA_DIR/workspaces/content.ftl 寻找全局覆盖

  • 观察 GEOSERVER_DATA_DIR/templates/content.ftl 寻找全局覆盖

  • 查看geoserver类路径并加载默认模板

每个模板化输出格式教程都应该为您提供模板名称,并说明模板是否可以特定于类型。如果您找不到默认模板的源文件,请查看Geoserver分发版的服务JAR(例如wms-x.y.z.jar)。您只需解压缩它,您就会发现Geoserver使用的xxx.ftl文件作为默认模板。

通用数据模型

Freemarker将提供给模板的一组数据称为“数据模型”。Geoserver使用的每种输出格式都会根据它管理的信息注入不同的数据模型。几乎每个模板中都会出现三个非常常见的元素:Feature、FeatureType和FeatureCollection。在这里,我们提供了每种类型的数据模型。

数据模型是一种树,其中每个元素都有一个名称和一个类型。除了基本类型外,我们还将使用:

  • 列表:可以使用FreeMarker扫描的项目的平面列表 <#list> 指令;

  • map:一个键/值映射,通常使用点表示法访问,如 ${{myMap.myKey },并且可以嵌套;

  • list map:一种特殊的构造,同时是一个映射和一个值列表。

以下是数据模型(如您所见,存在冗余,特别是在属性方面,我们选择了这种方法来简化模板构建):

特征类型(地图)

  • 名称(字符串):类型名称

  • 属性(listmap):类型属性

    • 名称(字符串):属性名称

    • 命名空间(字符串):属性命名空间URI

    • 前缀(字符串):属性命名空间前缀

    • 类型(String):属性类型,完全限定的Java类名

    • IsGeometry(布尔值):如果属性是几何的,则为true,否则为false

特征(地图)

  • fid(字符串):功能ID(WFS功能ID)

  • 类型名(字符串):类型名

  • 属性(listmap):属性列表(数据和元数据)

    • 名称(字符串):属性名称

    • 命名空间(字符串):属性命名空间URI

    • 前缀(字符串):属性命名空间前缀

    • IsGeometry(布尔值):如果属性是几何的,则为true,否则为false

    • 值:属性值的字符串表示形式

    • isComplex(布尔):如果属性是特性,则为true(请参见 复杂的特征 ),否则为假

    • 类型(String或Type类型):属性类型:如果IsFosiple为false,则完全限定Java类名称;如果IsFosiple为true,则为

    • rawvalue:实际属性值(is iscomplex is true rawvalue is a feature)

  • 类型(映射)

    • 名称(字符串):类型名(与类型名相同)

    • 命名空间(字符串):属性命名空间URI

    • 前缀(字符串):属性命名空间前缀

    • 标题(字符串):在管理控制台中配置的标题

    • 摘要(字符串):类型的摘要

    • 描述(字符串):类型的描述

    • 关键字(列表):类型的关键字

    • metadatalink(list):类型的元数据URL

    • SRS(字符串):层的SRS

    • nativecrs(string):层的坐标参考系为wkt

特色收藏(地图)

  • 功能(功能列表,见上文)

  • 类型(特征类型,见上文)

请求(映射)

包含GetFeatureInfo请求参数和相关值。

环境(地图)

允许访问多个环境变量,尤其是以下定义的环境变量:

  • JVM系统属性

  • 操作系统环境变量

  • web.xml上下文参数

数学(地图)

允许访问数学函数。

实例

request

  • ${request.LAYERS}

  • ${request.ENV.PROPERTY}

environment

  • ${environment.GEOSERVER_DATA_DIR}

  • ${environment.WEB_SITE_URL}

Math

  • ${数学.max(请求数字1,请求数字2)}

Previous: 教程