span8
span4
在之前的例子,我们学习了如何使用特性类型fanout创建文件夹。在本例中,我们将重点讨论如何通过使用KML id和KML父属性来创建文件夹。这种方法最适合于您希望直接控制文件夹命名和父-子关系,并使之尽可能深入。换句话说,此方法用于创建自定义文件夹层次结构。
不确定什么文件夹?没问题!KML文件夹定义了谷歌Earth Places窗格中的嵌套树结构。查看文章根据功能类型Fanout创建KML文件夹一个完整的定义。
与特性类型fanout方法类似,这些创建文件夹的方法用于KML而不是KMZ(即压缩的KML文件)。
我们可以通过KML id创建KML文件夹,分为两部分:创建文件夹结构,然后创建文件夹元素,并使用kml_parent属性将所有功能与其相应的文件夹关联起来。
对于本例,我们将使用温哥华快速运输站的CSV文件。我们不希望在谷歌Earth的KML Places图例中有一个很大的站点列表,而是希望将其组织到一个文件夹层次结构中。我们可以通过火车线路把车站分开,然后把加拿大线的市区站点分开,如下图所示:
使用三层文件夹设置文件夹的KML ID方法。这是我们将在示例中使用的文件结构。父级是火车路线。它有三个孩子:Connection、Expo和CanadaLine。加拿大线有自己的子文件夹,下城。
要创建空文件夹结构,我们将首先使用a创造者来创建一个空几何对象。删除创建实例属性“_creation_instance”。您可以保留所有其他参数的默认值。
我们将使用一个AttributeCreatortransformer来创建每个文件夹。换句话说,如果我想要五个文件夹,我将使用五个attributecreator。每个AttributeCreator将连接到创建者。参考上面文件结构的图像,我们首先创建父文件夹。用以下属性和值填写变压器参数:
新属性 | 属性值 |
kml_id | TrainRoute |
kml_name | 火车路线 |
kml_document | 运输 |
这是我们的父文件夹,我们将它命名为Train Route (kml_name)。注意,kml_id没有任何空格。这样做是为了减少以后需要将数据关联到此文件夹时出错的机会。我们将通过将数据与我们想要的文件夹的kml_id关联来将数据放入这些文件夹中。我们需要意识到空间和大小写敏感因为我们的数据不会进入正确的文件夹,如果我们有错误的ID!
最后要指出的是kml_document。通常,从数据集读取时,kml_document默认设置为fme_basename(源数据文件名)。但是,在使用创建者时,我们需要设置kml_document。这里非常重要的一点是,如果我们想要将所有后续的AttributeCreators都设置为相同的kml_document名称,以便将其写入相同的KML文件中。kml_document的名称也必须与您正在写入的文件的名称相同。使用与文件名不同的文档名称标记的文件夹和数据将不会写入该文件。
在AttributeCreator参数中,kml_document被命名为“transportation”。
稍后我们将连接一个写入器,并将KML文件命名为“transportation”。
高级用户注意事项:这意味着通过控制kml_document的名称,可以使用相同的工作空间写出不同的KML文件。例如,如果我想要一个名为potatoes的分支KML文件,我可以在AttributeCreator中将kml_document命名为“potatoes”,然后得到一个名为potatoes的空文件夹。除了我在工作空间中所写的内容之外,还有kml。只要确保您的数据也被写入所需的文件夹和kml_document名称即可。
我们现在使用另外三个attributecreator创建下一层的文件夹。我们要创建文件夹:Connection、Expo和Canada Line。好吧,你说对了!对于你们当中熟悉温哥华的人来说,这里没有所谓的连线。这只是我为这个数据集中连接两条铁路线的滨水车站划分的一个类别。
让我们将一个新的AttributeCreator连接到创建者。填写第一个变压器像下面的文件夹,连接:
新属性 | 属性值 |
kml_parent | TrainRoute |
kml_id | 连接 |
kml_name | 连接 |
kml_document | 运输 |
注意,这里有一个新属性kml_parent。创建层次结构的正是这种分配父文件夹的方法。重复这个AttributeCreator两次(选择transformer并按Ctrl-D),并对每个进行以下更改:
AttributeCreator重复1:
AttributeCreator重复2:
对于这些文件夹,kml_parent将保持不变,因为所有这些文件夹位于同一级别。kml_document也将保持不变,以便我们将整个文件夹层次结构写入同一个KML文件。将新的AttributeCreators连接到创建者。
复制最后一个AttributeCreator并将其附加到创建者。这是我们的子文件夹到加拿大文件夹行。对变压器参数进行如下更改:
属性kml_document将不会更改。
文件夹的参数,' Downtown '。此文件夹是文件夹CanadaLine的子文件夹。
为格式谷歌KML添加一个写入器。设置数据集路径,并将“功能类型定义”设置为自动。按OK,在下一个对话框中,命名“功能类型名称”,文件夹。必须将此功能类型命名为文件夹,以便谷歌Earth识别您的文件夹结构。单击OK。现在运行您的工作空间,并检查谷歌Earth中的输出,以查看您是否创建了所需的文件夹结构。
显示在谷歌Earth Places图例中的输出文件夹结构。
完成的部分是一个创建空文件夹结构的工作区。
现在我们已经有了文件夹结构,可以向这些文件夹添加数据了。
在与第一部分相同的工作空间中,读取CSV文件rapid_train_posts . CSV。在按下OK键之前,将坐标系统设置为UTM84-10N。接下来,进入参数并将属性定义设置为手动。将x设置为类型x_coordinate,将y设置为y_coordinate。
接下来,我们将使用aTestFilter通过火车线路过滤我们的数据,然后是最后一个文件夹,加拿大线路上的市区车站。我们希望以与设置文件夹相同的方式筛选数据,以便将数据与正确的文件夹关联起来。填写参数如下表:
测试条件 | 输出端口 | |
如果 | 行=连接 | 连接 |
其他的 | 行=世博会 | 世博会 |
其他的如果 | 车站包含温哥华或 | |
站包含YALETOWN | 市中心 | |
其他的 |
|
CanadaLine |
除了我们已经归类为连接的滨水车站外,在加拿大线上只有另外两个车站我们认为是市中心的一部分:亚雷顿-朗德豪斯车站和温哥华市中心车站。利用这些信息,我们过滤出市中心的车站,条件是车站名称中包含我们正在寻找的车站的部分(关键词:温哥华和亚勒敦)。
7.设置每个列车线路的站点的父文件夹
向TestFilter的连接输出端口添加一个新的AttributeCreator。在此步骤中,我们将KML父文件夹设置为数据,并为工作站提供一个ID名称,该名称将在缺省情况下以谷歌KML显示。
我们将把kml_parent设置为相应的文件夹(连接端口有kml_parent: Connection, Expo有kml_parent: Expo, Downtown有kml_parent: Downtown, CanadaLine有kml_parent: CanadaLine)。我们使用文件夹的kml_id作为kml_parent。请记住,我们没有在kml_id中使用任何空格。下面是连接到TestFilter的连接输出端口的AttributeCreator的参数。
新属性 | 属性值 |
kml_parent | 连接 |
kml_id | 站 |
对于这里的kml_id,我们在所有四个AttributeCreators中将其设置为属性' STATION '。此属性包含火车站名称。对连接到Expo和CanadaLine的AttributeCreators执行相同的操作,使用它们各自的kml_parent id。
连接到TestFilter的AttributeCreators带有显示其各自参数的注释。
现在,在我们的工作区中,所有的文件夹都有了数据。在这个步骤中,我们通过设置图标和图标颜色来设置站点的样式。添加四个KMLStylers并将其附加到步骤7中的每个AttributeCreator。
自由地有一些有趣的设置图标和图标的颜色。我选择使用图标名称:gme / gx_rail红色代表“连接”,黄色代表“世博”,蓝绿色代表“加拿大”,橙色代表“市中心”的两个车站。
如果我们现在运行工作区,我们会发现所有的工作站都是用大写字母写的。为了使它看起来更好,我们将所有的kmlstyler连接到一个单一的KMLPropertySetter变压器。在transformer参数中,在区段导航树中打开“Name”的文本编辑器。双击FullTitleCase在字符串函数和站在FME特性属性中。我们的字符串应该像下面这样:
@FullTitleCase (@ value(站))
这个字符串函数将把我们的站名转换为标题格。
最后,要写出我们的KML,右键并插入一个写入器特性类型,并将其附加到KMLPropertySetter的输出端口。命名特征类型,placemark对象。运行工作空间。
在谷歌Earth中显示的KML结果。火车站按文件夹颜色编码,并显示所代表的车站名称。
结果文件夹显示在谷歌地球的位置面板。
恭喜你!您已经成功地学习了如何使用kml_id和kml_parent属性创建自定义文件夹。这里的关键是首先使用创建者创建文件夹结构,然后将数据放入这些文件夹。与fanout方法相比,这个方法可以让您直接控制创建任意多的子文件夹。下面是一些使用KML ID方法时需要记住的提示和技巧:
注意:有关使用KML ID方法创建文件夹的更自动化和更符合python风格的方法,请参见PythonCaller变压器的文章。
这里使用的数据来源于由温哥华的城市不列颠哥伦比亚省。它包含在开放政府许可下的信息-温哥华。
©2019安全亚搏在线软件公司法律