3.5. 扩展输出选项¶
GeoServer 使您能够使用扩展来扩展数据的输出选项。 大多数扩展都需要额外的设置;除了删除 WEB-INF 进入之内 JAR , 让我们来看看你可能会考虑的几个问题。
3.5.1. GDAL和OGR 输出¶
下面我们简单的介绍一下GDAL 库,你可用过也可能不了解,他有很多让你减少工作量的方法。
GDAL
GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。 它利用抽象数据模型来表达所支持的各种文件格式。 它还有一系列命令行工具来进行数据转换和处理。OGR 是GDAL 项目的一个分支,功能与GDAL 类似,只不过它提供对矢量数据的支持。
功能
GDAL提供对多种栅格数据的支持,包括Arc/Info ASCII Grid(asc),GeoTiff(tiff), Erdas Imagine Images(img),ASCII DEM (dem) 等格式。 GDAL使用抽象数据模型(abstract data model)来解析它所支持的数据格式, 抽象数据模型包括数据集(dataset),坐标系统,仿射地理坐标转换(Affine Geo Transform), 大地控制点(GCPs), 元数据(Metadata),栅格波段(Raster Band), 颜色表(Color Table),子数据集域(Subdatasets Domain),图像结构域(Image_Structure Domain),XML域(XML:Domains)。
GDAL MajorObject类:带有元数据的对象。
- GDAL Ddataset类:通常是从一个栅格文件中提取的相关联的栅格波段集合和这些波段的元数据;GDAL Ddataset也负责所有栅格波段的地理坐标转换(georeferencing
transform)和坐标系定义。
GDAL Driver类:文件格式驱动类,GDAL 会为每一个所支持的文件格式创建一个该类的实体,来管理该文件格式。
GDAL DriverManager类:文件格式驱动管理类,用来管理GDAL Driver类。
基于GDAL 库,用于WFS输出栅格图形。可以使用 ogr2ogr 命令,可以转换为多种输出格式。
OGR
使用OGR ,可以从一种矢量格式转换为另一种矢量格式。
OGR 体系结构
Geometry类:Geometry (包括OGR Geometry等类)封装了OpenGIS的矢量数据模型,并提供了一些几何操作, WKB(Well Knows Binary)和WKT(Well Known Text)格式之间的相互转换,以及空间参考系统(投影)。
Spatial Reference类:OGR SpatialReference封装了投影和基准面的定义。
Feature类:OGR Feature封装了一个完整feature的定义,一个完整的feature包括一个geometry和geometry的一系列属性。
Feature Definition类:OGR FeatureDefn里面封装了feature的属性,类型、名称及其默认的空间参考系统等。 一个OGR FeatureDefn对象通常与一个层(layer)对应。
Layer类:OGR Layer是一个抽象基类,表示数据源类OGR DataSource里面的一层要素(feature)。
Data Source类:OGR DataSource是一个抽象基类,表示含有OGR Layer对象的一个文件或一个数据库。
Drivers类:OGR SFDriver对应于每一个所支持的矢量文件格式。类OGR SFDriver由类OGR SFDriverRegistrar来注册和管理。
我们将在以后的章节中讨论一些例子。
有关GDAL 的详细信息,请查看以下链接:
3.5.2. 文本/HTML¶
从GeoServer 获取有关单击的要素的信息的方法之一是使用点查询WMS, 并获取周围要素的列表。
这个 outputformat 格式可以是任何东西。
这个 INFO_FORMAT
应该是 text/html
。
使用GetFeatureInfo freemarker模板¶
freemarker
FreeMarker 是一种比较简单的网页展示技术,是网页模板和数据模型的结合体。 这种结合模式的好处就是,分离了网页界面设计人员和编程人员的工作,让他们各司其职。
FreeMarker 就是一种用Java编写的模板引擎, 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
1.转到 OpenLayers 演示 topp:states .
2.地图加载后,单击一个状态。有关该状态的图层信息将加载到地图下。 请考虑以下单击的示例 阿拉巴马州 :

图 3.8 image90¶
3.现在检查调用的URL。 这个 INFO_FORMAT=text/html 默认情况下, 将功能输出为HTML字符串:
4.在中创建新文件 $GEOSERVER_DATA/workspaces/topp/states_shapefile/states 名称为 content.ftl , footer.ftl 和 header.ftl .
ftl (FreeMarker Template Language)是Freemarker模板的文件后缀名。
5.将以下文本放在 header.ftl 文件:
<?xml version='1.0' encoding='utf-8'?>
<states>
6.在 content.ftl 文件,放置文本:
<#list features as feature>
<state>
<STATE_ABBR>${feature.STATE_ABBR.value}</STATE_ABBR>
<STATE_NAME>${feature.STATE_NAME.value}</STATE_NAME>
<SUB_REGION>${feature.SUB_REGION.value}</SUB_REGION>
</state>
</#list>
7.对于 footer.flt 文件,文本将更简单:
</states>
8.转到“服务器状态”, 配置和目录 ,然后点击 重新加载 按钮:
9.点击一个州,例如阿拉巴马州。新的状态信息将显示在地图下方。

图 3.9 image91¶
通过创建三个新文件,我们更改了 topp:states
功能的默认模板
并将它们添加到 workspaces/topp/state_shapefiles/states
中。
然后,我们通过使用“server”状态下的“重新加载”功能重新加载GeoServer 配置,
或选择重新启动GeoServer 。 因为GeoServer 正在将输出设置为 text/html
,
您需要将返回的字符串视为文本,然后在JavaScript中使用它之前解析为XML。
要获得更多资源, 请查看 http://docs.geoserver.org/latest/en/user/tutorials/GetFeatureInfo/index.html 。
改变另一层¶
找到另一层并创建新模板。探索使用文档格式化此数据的方法。
3.5.3. ImageMap¶
每个人都记得常用图像地图的样子。 使用图像地图来描述地图上的poi似乎是个不错的主意。
只需将一个JAR放入 $GEOSERVER_HOME/WEBINF/lib
是ImageMap。
使用此输出选项的唯一挑战是PointSymboler仅表示为圆,并且在大多数情况下,
您将拥有用于非圆特性的图标。图像地图并不总是匹配的。
有关详细信息, 请查看 http://docs.geoserver.org/latest/en/user/extensions/imagemap.html .
3.5.4. 使用WMS反射¶
反射 :反射是一种计算机处理方式。有程序可以访问、检测和修改它本身状态或行为的这种能力。能提供封装程序集、类型的对象。
这是在GeoServer 中预览选项而不编写长URL的好方法。 反射器将输出PNG(默认)、JPEG、PNG8和GIF。 另外,在不想使用 GeoWebCache 的情况下,这非常有用。
URL传递许多参数来指定所需的输出。其中大部分不会改变。 Reflector对缺少的参数使用默认值。 您需要提供的唯一参数是 layers 默认情况下为参数。 有关这些值的详细信息,请参阅GeoServer 文档。没必要在这里重新整理它们。
有关详细信息, 请查看 http://docs.geoserver.org/stable/en/user/tutorials/wmsreflector.html .
使用WMS反射器¶
1.在此示例中,我们使用 topp:states
层预览。
在浏览器中输入以下网址,或从“图层预览”页面上的“所有格式”下拉列表中选择JPEG输出选项。
图层预览URL很长:
在浏览器或HTML编辑器中键入内容可能非常麻烦且容易出错。wms reflector 通过为未指定的选项使用良好的默认值,很好地解决了这个问题。 使用 reflector 可以将上述请求缩短。
2.现在打开一个新窗口或浏览器选项卡,并使用反射器获得相同的结果。 只需在地址栏中键入以下URL,然后按进入 :
http://localhost:8080/geoserver/wms/reflect?layers=topp:states3
现在添加一个本地EPSG:4326到Google Mercator的新投影。
EPSG:900913。您将看到图像宽度变化:
http://localhost:8080/geoserver/wms/reflect?layers=topp:states&srs=EPSG:900913

图 3.10 image92¶
我们确实省了不少时间。我们只需要提供 layers
参数,
因为这是最小值,反射程序的输出将默认为PNG。
然后我们将 srs
改为 Google Mercator EPSG:900913。
反射器帮你提取出重要的信息。
探索pdf反射选项¶
输出 pdf ,则需要添加格式参数 application/pdf ,如下面的URL所示。 添加 srs 参数, 最常见的是 Google Mercator EPSG:900913 :
再试一试是否支持其他的格式。
突击测验-访问数据¶
问题1。哪种输出格式允许您在Google Earth界面中使用数据?
TIFF格式,可以在全球范围内包装。
GeoRSS;您可以在Google Earth中将数据显示为精确的位置。
KML,KMZ;您可以以Google Earth的本地格式导出数据。
问题2。你能为WFS提供多个输出格式吗?
不,使用WFS,您只能在OGC 标准(即GML)中发布数据。
是的,您可以在不同的GML版本中发布数据。
是的,您可以在GML、shapefile、 GeoJSON 和CSV中发布数据。