自由标记模板¶
介绍¶
本教程将向您介绍一个更深入的视图,了解什么是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)}