优化大数据量的KML数据集

时间:2024-05-22 22:53:54

原文发布时间:2014-05-23 

作者:毛毛虫

Google Earth的帮助文件中,有对优化大数据集处理的简单说明:

https://support.google.com/earth/answer/175007?hl=en


在该帮助里,对大型数据文件做了图块化向量数据(Regionating vector data(仅限专业版)的处理。

建议用于大型数据文件;向量数据图块化可限制较高海拔位置显示的定点数量,自动提升数据的质量。当放大画面时,将会看到更多的点。

FME帮助中,有部分关于KML中大数据量数据处理的说明,如下部分:

FME Readers and Writers (formats supported by FME 2014) > Google Earth KML Reader/Writer > Writer Overview and Workbench Parameters > Writer Pipelines

该部分中的内容如下:

1)矢量(Vector (Placemark)

矢量通道处理矢量几何要素(通常是地标)。默认的通道,fmeregionator.fmi进行分区。

默认regionator管道要求用Python

Google Earth很难打开和显示包含一个大数据量KML数据集的KML文件。图块化(Regionation)提供了一个划分矢量数据为很多分区的机制。每个分区包含在一个单独的kml文件中;Region NetworkLink元素是加载每个矢量数据集的指示。图块化的基本意思是用户应该首先表现最重要的要素,当用户放大到低海拔区,显示不太重要的要素。分区的通道使用相对权重来确定哪些要素应该首先显示。

下面的格式属性用于分区通道的配置:

KML 格式属性

说明

kml_region_weight

指定要素相对权重的一个浮点值

kml_region_group

会被分区在一起的要素分组的名称,默认的所有的要素一个分区

kml_features_per_region

每个分区中的要素数目。默认的是16

kml_minimum_lod

每个分区的最小的LOD,默认的是256

2)相对权重(Relative Weights

在图块化处理中,所有的输入要素根据它们的权重排序。最高权重的要素首先显示。明白要素权重只决定相对显示顺序,它不能保证项目在一定的高度上显示。

要素的权重可以使用kml_region_weight格式属性指定。如果没有指定权重,下面的试探法会被用来创建每个要素的权重:

Feature Geometry

Weight Calculation

Point

常量1.0

Line

@Length()*1000

Area (和其他所有的类型)

@Area(1000)

3)细节级别(Level Of Detail

每个区域定义为一个象限。Google Earth通过比较所需的显示区域的像素数与特定最小细节级别决定每个分区是否需要显示在Google Earth上。默认的,图块化通道需要最小的LoD256,这可以通过kml_minimum_lod格式属性重新设置。注意最大的LoD总是设置为-1是非常重要的,这意味着一旦达到最小LoD,区域一直会打开。

 

4)每个象限的要素

每个区域包含一定数目的要素。当区域被**时,所有区域内的要素会被现实。默认的,每个区域至少包含16个要素,不过可以使用kml_features_per_region格式属性修改。

5)区域分组

默认的,所有写入到写模块的矢量要素会被分为一个区。通过使用kml_region_group格式属性,要素被指定到各自的区块。图块化通道假设输入的要素根据它们各自的区组排序。当通道遇到一个要素的分组名与当前分组名称不同的时,当前的分组完成,开始新组的图块化。

 

下面的例子是使用Regions (tiling)KML Network Links进行大数据量的KML优化,在Google Earth中显示的案例。

详情见:

http://fmepedia.safe.com/articles/How_To/Optimizing-Large-Datasets-for-KML-and-Google-Earth

这个例子中将整个数据集分成一片片小的数据集,这样更新数据的时候只更新部分区域而不是加载所有数据。本案例使用的方法可以使在Google Earth中放大时只更新请求数据的小片区域。本例中利用一个工作空间创建KML网络连接(KML Network link)文件和切片的KML数据集。

工作空间的的第一部分使用CityGrid要素创建切片边界。对于每个CityGrid切片,用一个区域创建一个KML Network link,所以当用户放大到切片范围, Google EarthKML数据文件中请求只这一区域的数据。并创建了一个包含整个区域的预览图层(Overview)。

工作空间的第二部分读取源数据,使用CityGrid创建切片,任何切片或网格的模式都可以使用。使用的每个CityGrid把数据切为指定的区域。

整个案例中关键是使用StringConcatenator转换器创建KML Network link,使用KMLRegionSetter转换器设置显示区域,最后对每个分区输出时,使用动态数据集输出的方式,按分区明分别输出不同的kmz文件。

生成的kml文件如下:

优化大数据量的KML数据集

 其中KML_Network_Link.kml是一个包含了所有预览和分区链接的kml文件,代码如下:

优化大数据量的KML数据集