目录

上一个主题

3.4. Web要素服务

下一个主题

3.6. 总结


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)。

  • GDALMajorObject类:带有元数据的对象。

  • GDALDdataset类:通常是从一个栅格文件中提取的相关联的栅格波段集合和这些波段的元数据;GDALDdataset也负责所有栅格波段的地理坐标转换(georeferencing transform)和坐标系定义。

  • GDALDriver类:文件格式驱动类,GDAL会为每一个所支持的文件格式创建一个该类的实体,来管理该文件格式。

  • GDALDriverManager类:文件格式驱动管理类,用来管理GDALDriver类。

基于GDAL库,用于WFS输出栅格图形。可以使用 ogr2ogr 命令,可以转换为多种输出格式。

OGR

使用OGR,可以从一种矢量格式转换为另一种矢量格式。

OGR体系结构

  • Geometry类:Geometry (包括OGRGeometry等类)封装了OpenGIS的矢量数据模型,并提供了一些几何操作, WKB(Well Knows Binary)和WKT(Well Known Text)格式之间的相互转换,以及空间参考系统(投影)。

  • Spatial Reference类:OGRSpatialReference封装了投影和基准面的定义。

  • Feature类:OGRFeature封装了一个完整feature的定义,一个完整的feature包括一个geometry和geometry的一系列属性。

  • Feature Definition类:OGRFeatureDefn里面封装了feature的属性,类型、名称及其默认的空间参考系统等。 一个OGRFeatureDefn对象通常与一个层(layer)对应。

  • Layer类:OGRLayer是一个抽象基类,表示数据源类OGRDataSource里面的一层要素(feature)。

  • Data Source类:OGRDataSource是一个抽象基类,表示含有OGRLayer对象的一个文件或一个数据库。

  • Drivers类:OGRSFDriver对应于每一个所支持的矢量文件格式。类OGRSFDriver由类OGRSFDriverRegistrar来注册和管理。

我们将在以后的章节中讨论一些例子。

有关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.地图加载后,单击一个状态。有关该状态的图层信息将加载到地图下。 请考虑以下单击的示例 阿拉巴马州

image90

图 3.8 image90

3.现在检查调用的URL。 这个 INFO_FORMAT=text/html 默认情况下, 将功能输出为HTML字符串:

http://localhost:8080/geoserver/topp/wms?REQUEST=GetFeatureInfo&EXCEPTIONS=application/vnd.ogc.se_xml&BBOX=-139.848709,18.549282,-51.852562,55.77842&SERVICE=WMS&INFO_FORMAT=text/html&QUERY_LAYERS=topp:states&FEATURE_COUNT=50&Layers=topp:states&WIDTH=780&HEIGHT=330&format=image/png&styles=&srs=EPSG:4326&version=1.1.1&x=471&y=201

4.在中创建新文件 $GEOSERVER_DATA/workspaces/topp/states_shapefile/states 名称为 content.ftlfooter.ftlheader.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.点击一个州,例如阿拉巴马州。新的状态信息将显示在地图下方。

image91

图 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很长:

http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.1.0&request=GetMap&layers=topp:states&styles=&bbox=-124.73142200000001,24.955967,-66.969849,49.371735&width=780&height=330&srs=EPSG:4326&format=image/png

在浏览器或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

image92

图 3.10 image92

我们确实省了不少时间。我们只需要提供 layers 参数, 因为这是最小值,反射程序的输出将默认为PNG。

然后我们将 srs 改为 Google Mercator EPSG:900913。 反射器帮你提取出重要的信息。

探索pdf反射选项

输出 pdf ,则需要添加格式参数 application/pdf ,如下面的URL所示。 添加 srs 参数, 最常见的是 Google Mercator EPSG:900913 :

http://localhost:8080/geoserver/wms/reflect?layers=topp:states&format=application/pdf&srs=EPSG:900913

再试一试是否支持其他的格式。

突击测验-访问数据

问题1。哪种输出格式允许您在Google Earth界面中使用数据?

  1. TIFF格式,可以在全球范围内包装。

  2. GeoRSS;您可以在Google Earth中将数据显示为精确的位置。

  3. KML,KMZ;您可以以Google Earth的本地格式导出数据。

问题2。你能为WFS提供多个输出格式吗?

  1. 不,使用WFS,您只能在OGC标准(即GML)中发布数据。

  2. 是的,您可以在不同的GML版本中发布数据。

  3. 是的,您可以在GML、shapefile、GeoJSON和CSV中发布数据。