使用地理工具功能预生成模块

警告

本教程中的屏幕截图尚未针对2.0.x用户界面进行更新。但大多数其余的信息都应该是有效的,用户界面大致相同,但使用起来要容易一些。

介绍

本教程演示如何在geoserver中使用geotools功能预生成模块。功能预生成模块用于提高性能、降低内存使用率和IO流量。

备注

矢量泛化为给定目的减少几何体的顶点数。在屏幕上绘制具有500000个顶点的多边形毫无意义。少量的顶点足以绘制多边形的拓扑正确图。

本模块需要具有通用几何图形的功能,根据需要选择最适合的几何图形。

完整的文档可在 GeoTools Pregeneralized Plugin 文档。

本教程将展示两种可能的场景,一步一步地解释如何在geoserver中使用此模块。

入门

首先,找到地理服务器数据目录的位置。启动geoserver时,此信息包含在日志文件中。::

----------------------------------
- GEOSERVER_DATA_DIR: /home/mcr/geoserver-1.7.x/1.7.x/data/release
----------------------------------

在这个目录中,我们必须放置形状文件。已经有一个子目录 data 将被使用。在此子目录中,创建一个目录 streams .

{GEOSERVER_DATA_DIR}/data/streams 创建另一个子目录 0 . (0表示“无广义几何”)。

本教程基于Shape文件,您可以从此处下载 Streams 。将此文件解压缩到 GEOSERVER_DATA_DIR/data/streams/0

寻找 WEB-INF/lib/ 地理服务器安装的目录。必须有一个名为 gt-feature-pregeneralized-{version}-jar . 这个jar文件包含一个通用化形状文件的工具。打开命令行并执行以下操作:

cd <GEOSERVER_DATA_DIR>/data/streams/0
java -jar <GEOSERVER_INSTALLATION>/WEB-INF/lib/gt-feature-pregeneralized-{version}.jar generalize 0/streams.shp . 5,10,20,50

您应该看到以下输出:

Shape file            0/streams.shp
Target directory      .
Distances             5,10,20,50
% |################################|

现在有四个附加目录 5.010.020.050.0 . 查看扩展名为 shp 在这些目录中,增大泛化距离会减小文件大小。

备注

广义几何图形可以存储在特征的附加属性中,也可以复制特征。混合变化也是可能的。因为我们使用的是形状文件,所以必须复制这些功能。

我们有两种可能部署我们的通用形状文件。

  1. 部署隐藏(对用户不可见)

  2. 将每个通用形状文件部署为单独的地理服务器功能

隐藏部署

首先,我们需要一个XML配置文件

<?xml version="1.0" encoding="UTF-8"?>
<GeneralizationInfos version="1.0">
      <GeneralizationInfo dataSourceName="file:data/streams/0/streams.shp"  featureName="GenStreams" baseFeatureName="streams" geomPropertyName="the_geom">
              <Generalization dataSourceName="file:data/streams/5.0/streams.shp"  distance="5" featureName="streams" geomPropertyName="the_geom"/>
              <Generalization dataSourceName="file:data/streams/10.0/streams.shp"  distance="10" featureName="streams" geomPropertyName="the_geom"/>
              <Generalization dataSourceName="file:data/streams/20.0/streams.shp"  distance="20" featureName="streams" geomPropertyName="the_geom"/>
              <Generalization dataSourceName="file:data/streams/50.0/streams.shp"  distance="50" featureName="streams" geomPropertyName="the_geom"/>
      </GeneralizationInfo>
</GeneralizationInfos>

将此文件另存为 geninfo_shapefile.xml 进入之内 {GEOSERVER_DATA_DIR}/data/streams .

备注

这个 数据源名称 XML配置中的属性不解释为名称,它可以是形状文件的URL,也可以是包含用于创建数据存储的属性的属性文件的URL(例如jdbc连接参数)。记住,这是一个隐藏的部署,不需要任何名称。唯一的 官方的 name是属性的值 功能名称GeneralizationInfo 元素。

启动GeoServer并转到 Config‣Data‣DataStores‣New 填写表格

../../_images/createdatastore.png

出版社 Submit .

你看到的下一张表格是

../../_images/editdatastore1.png

备注

RepositoryClassNameGeneralizationInfosProviderClassName 具有适用于GeoTools而不是GeoServer的默认值。改变 GeoToolsGeoServer 在包名中为GeoServer实例化正确的对象。 GeneralizationInfosProviderParam 可能是来自GeoServer目录的URL或数据存储。通过使用 工作spacename:数据存储名 . 如果您有自己的实现 GeneralizationInfosProvider 接口和这个实现从数据库中读取信息。

配置应该如下所示

../../_images/editdatastore2.png

出版社 Submit ,然后将打开特征类型的窗体。

改变 风格lineSRS26713 然后按下 Generate 按钮标签 边界框 .

../../_images/editfeaturestore1.png

之后,按 SubmitApplySave .

按“检查结果” 我的地理服务器Demo地图预览 . 在这个列表中必须有一个条目 TOP:发电流 . 按下它你就会看到

../../_images/streams.png

现在开始放大和缩小并查看geoserver的日志文件。如果部署正确,您应该看到如下内容:

May 20, 2009 4:53:05 PM org.geotools.data.gen.PreGeneralizedFeatureSource logDistanceInfo
INFO: Using generalizsation: file:data/streams/20.0/streams.shp streams the_geom 20.0
May 20, 2009 4:53:41 PM org.geotools.data.gen.PreGeneralizedFeatureSource logDistanceInfo
INFO: Using generalizsation: file:data/streams/5.0/streams.shp streams the_geom 5.0
May 20, 2009 4:54:08 PM org.geotools.data.gen.PreGeneralizedFeatureSource logDistanceInfo
INFO: Using generalizsation: file:data/streams/5.0/streams.shp streams the_geom 5.0
May 20, 2009 4:54:09 PM org.geotools.data.gen.PreGeneralizedFeatureSource logDistanceInfo
INFO: Using generalizsation: file:data/streams/20.0/streams.shp streams the_geom 20.0

公共部署

首先,我们必须配置所有形状文件

../../_images/streams_0_ds.png

这个 要素数据集ID 其他形状文件是

  1. Streams_5

  2. Streams_10

  3. Streams_20

  4. Streams_50

../../_images/streams_0_ds2.png

这个 URL 其他形状文件所需的

  1. file:data/streams/5.0/streams.shp

  2. file:data/streams/10.0/streams.shp

  3. file:data/streams/20.0/streams.shp

  4. file:data/streams/50.0/streams.shp

../../_images/streams_0_ds4.png

每个功能都需要 别名 ,给你 streams_0 . 对于其他形状文件使用

  1. streams_5

  2. streams_10

  3. streams_20

  4. streams_50

按检查结果 My GeoServerDemoMap Preview . 你应该看看你的附加层。

不,我们需要另一个XML配置文件

<?xml version="1.0" encoding="UTF-8"?>
<GeneralizationInfos version="1.0">
      <GeneralizationInfo dataSourceNameSpace="topp" dataSourceName="Streams_0"  featureName="GenStreams2" baseFeatureName="streams" geomPropertyName="the_geom">
              <Generalization dataSourceNameSpace="topp" dataSourceName="Streams_5"  distance="5" featureName="streams" geomPropertyName="the_geom"/>
              <Generalization dataSourceNameSpace="topp" dataSourceName="Streams_10"  distance="10" featureName="streams" geomPropertyName="the_geom"/>
              <Generalization dataSourceNameSpace="topp" dataSourceName="Streams_20"  distance="20" featureName="streams" geomPropertyName="the_geom"/>
              <Generalization dataSourceNameSpace="topp" dataSourceName="Streams_50"  distance="50" featureName="streams" geomPropertyName="the_geom"/>
      </GeneralizationInfo>
</GeneralizationInfos>

将此文件另存为 geninfo_shapefile2.xml 进入之内 {GEOSERVER_DATA_DIR}/data/streams .

创建预生成的数据存储

../../_images/createdatastore2.png

现在我们使用 CatalogRepository 类查找所需的数据存储

../../_images/editdatastore3.png

最后一步

../../_images/editfeaturestore2.png

Map Preview 你应该找到 TOP:发电流2 以及所有其他的概括。以我们在隐藏部署中讨论的相同方式进行测试,您应该在GeoServer日志中看到如下内容:

May 20, 2009 6:11:06 PM org.geotools.data.gen.PreGeneralizedFeatureSource logDistanceInfo
INFO: Using generalizsation: Streams_20 streams the_geom 20.0
May 20, 2009 6:11:08 PM org.geotools.data.gen.PreGeneralizedFeatureSource logDistanceInfo
INFO: Using generalizsation: Streams_10 streams the_geom 10.0
May 20, 2009 6:11:12 PM org.geotools.data.gen.PreGeneralizedFeatureSource logDistanceInfo
INFO: Using generalizsation: Streams_10 streams the_geom 10.0

结论

这只是一个使用形状文件的非常简单的示例。插件架构允许您从任何地方获取数据和概括。使用的数据集非常小,因此您不会感到响应时间有很大的差异。拥有大的几何体(在许多顶点的意义上)和用一些不同的层创建地图将显示出差异。