FMEDesktopKML培训手册FMEDesktop2012KML基础如果你刚接触KML数据,这里有一些基础知识可供学习。什么是KMLKML全称为KeyholeMarkupLanguage,是一种基于XML的格式(或语言),用于存储谷歌地球和谷歌地图使用的数据。“Keyhole”这个名字源自KML格式和谷歌地球产品最初的开发人员。KMZ是KML格式数据集的一种变换形式。KMZ只是简单的将KML数据集通过ZIP程序进行压缩并重命名为新的文件后缀。KMZ最常用来作为存储一组栅格影像;KMZ(ZIP)文件夹中存储了所有的栅格文件(JPEG或GeoTIFF),还有一个链接它们的KML文件。KML数据集是什么样的呢?KML数据集看起来与XML或HTML文档类似。事实上,谷歌地球需要KML数据就像IE浏览器需要HTML文档一样:仅仅只是一个可以让用户对数据集可视化的浏览器。谷歌地图也是一个KML浏览器,在写这篇文章时,它仅仅支持KML的子集。还有其他一些KML查看器,但这里我们坚持使用GoogleEarth。与HTML一样,KML具有影响特定要素显示的标签。由于KML存储的数据具有空间特性,标签是与空间数据有关的符号;例如,线条样式,点符号和面填充颜色。完成数据清理后(移除各种样式标签后),一个简单的KML数据如下:KML与FME了解FME所支持格式的结构与FME的关系非常重要,以及FME如何把这些结构定义为一个模式。要素类和数据集KML是文件型数据集,即每个KML文件就是一个FME数据集。每个文件中包含“FloderID”的节点即FME的要素类。例如,如果FME数据集名称为planning,要素类名称为ROADS,那么输出的KML文件,文件名为planning.kml,包含一个节点:Folderid=kml_ft_ROADSKML与坐标系KML存储基于WGS84基准面的经纬度坐标。这是KML唯一支持的坐标系统。FME中对应的坐标系为LL84和EPSG:4326进入KML写模块的数据必须具有坐标系标签,不管是从源数据中获得或者使用CoordinateSystemSetter转换器获得。然后FME自动将数据转换到LL84坐标系。如果数据没有指定坐标系,FME又不能确定源数据的坐标系时,该转换将被终止。读取KML数据FME对KML的支持包括读取以及将它们转换为GIS数据格式。FME不仅能读取KML数据集所有的空间组成,还能读取文档属性(documentproperties)、文件夹(folders)和时间戳属性。练习1:读取KML数据按照下面的步骤打开并查看KML数据集。1、打开FMEUniversalViewer。在Windows开始菜单中选择开始所有程序FMEDesktop2012FMEUniversalViewer。2、从菜单栏中选择FileOpenDataset,打开数据集选择对话框。如下进行设置:ReaderFormat:GoogleEarthKMLReaderDataset:C:\FMEData\Data\Properties\Properties.kml3、单击OK,确认选择并打开数据集,:数据在FMEUniversalViewer中被打开,可以查询这些数据。4、单击激活选择要素工具(在工具栏中的那个小的“i”字母图标)。点击窗口中任一地块进行查询。FMEUniversalViewer信息窗口中显示查询要素的信息:注意窗口的显示:①数据类型/文件夹(LandParcels)②数据的坐标系统(LL84)③KML的比例和类型信息④属性,如街道名称和类型使用工具栏的这部分的其他工具可以测量距离,平移,放大。练习2:使用FMEWorkbench转换KML按照下面的步骤来建立一个KML格式的数据转换为其他格式的工作空间。这个示例中,选择输出格式为MapInfoTAB。1、打开FMEWorkbench。在“Start”标签,选择Generateworkspace选项。2、新的工作空间对话框打开后,如下进行设置:读模块Format:GoogleEarthKMLDataset:C:\FMEData\Data\Properties\Properties.kml写模块Format:MapInfoTAB(MFAL)Dataset:C:\FMEData\Output\TutorialOutput先不点击OK。注:对于MapInfoTAB格式,写模块数据集需要选择一个文件夹,而不是一个文件或文件名。3、单击读模块的参数(Parameters)按钮。将打开一个新的对话框,在这个对话框中包括控制KML数据读取的所有参数。注意:这里有控制读取栅格、网络链接遍历和KML模型转换(存储在关联COLLADA文件中的3D对象)的参数。点击OK来确认选择并关闭对话框。4、选择要素类对话框。按清除所有(ClearAll)的按钮取消所有的类型。选择LandParcels要素类进行转换。单击“OK”。5、工作空间创建完成。单击每个要素类对象的扩展图标,展示被转换的属性。工作空间看起来如下所示:6、运行转换。单击绿色播放按钮开始转换。转换将运行。它可能需要一、两分钟来完成。对话框或日志中可能会警告“UnexpectedInput”,但不是真的预期外的输入,因为我们在步骤4中没有选择其他几个要素类,因此这是可以忽略的警告。7、检查输出,右键写模块要素类,选择Inspect。FMEUniversalViewer将被启动,显示如下对话框:单击“OK”,新创建的MapInfo数据集将被打开,可以检查转换的正确性。写出KML数据FME支持用户转换其他空间数据集为KML格式,并广泛应用于当今社会。写出简单的KML数据集,不考虑复杂节点类或要素样式,像选择KML作为输出格式并运行转换一样简单。如果源数据中有样式(符号),FME在写出KML时将尽可能保持在原有类型(符号)。KML写出的要求大多数时候,如果KML格式有其他特性,FME会自动地考虑到。①KML要求所有的要素是三维的;在必要的情况下FME会把所有二维要素按照Z值为零的原则进行设置。②所有的节点必须有一个唯一的ID。默认情况下FME使用格式属性kml_id,但如果这个属性没有进行设置,FME将自动的创建一个id以适应这个准则。③KML要求所有的要素LL84坐标系统。在FME可以识别源数据坐标系的情况下,FME将自动的把数据的坐标系转换到LL84。如果FME不能识别源数据坐标信息,数据集参数也没有进行设置,转换将报错而停止。KMLorKMZ?FME的KML写模块能够写出KML或KMZ数据集。数据集创建的类型取决于你选择输出的数据集名称的文件扩展名,例如,输出文件名mydata.kml,FME将创建一个未压缩的数据集,如果输出文件名为mydata.kmz,将创建压缩形式的文件。练习3:使用FMEWorkbench转换数据为KML按照下面的步骤来建立GIS数据到KML格式的转换。在这个例子中,源数据格式是MapInfoTAB。1、打开FMEWorkbench。在“Start”标签栏,选择Generateworkspace。2、新的工作空间对话框打开后,如下进行设置:读模块Format:MapInfoTAB(MFAL)Dataset:C:\FMEData\Data\Parks\city_parks.tab写模块Format:GoogleEarthKMLDataset:C:\FMEData\Output\TutorialOutput\Parks.kml这里,KML写模块没有可用的参数,所以点击OK。3、运行转换。单击绿色播放按钮,开始转换。转换将运行,几秒后完成。4、检查输出。找到输出文件夹,在写模块要素类右键单击。选择OpenContainingFolder这个选项。5、系统浏览器将打开输出数据集,显示数据所在的正确位置。右键单击文件parks.kml选择OpenwithGoogleEarth。注意,公园保持与源数据相同的颜色(你可以在FMEUniversalViewer打开MapInfo源数据查看),查询要素将返回一个属性值列表。KML数据变换FME中大多KML特定的转换与要素符号和样式有关。数据集内KML格式支持标签定义的要素类型和符号。FME这些标签可以在各类写模块参数和KML特定的转换器中设置使用。练习4:使用FMEWorkbench设置KML样式按照下面步骤进行转换,并在转换过程中对数据进行样式设置。1、打开FMEWorkbench。打开或重新创建前面练习中的工作空间。2、添加KMLStyler转换器。在读模块和写模块要素类连接线之间单击,键入字符的KML,会出现一系列KML相关的转换器。从列表中选择KMLStyler,KMLStyler转换器将添加到读模块和写模块之间。3、点击KMLStyler黄色参数按钮,打开转换器的参数对话框。设置公园的填充颜色,单击FillColor右边的按钮:在颜色选择器对话框,选择绿色,单击OK。4、返回KMLStyler参数对话框,单击Color右边的按钮,设置面边界的颜色为黑色或与填充颜色相同的绿色,设置填充不透明度(FillOpacity)值为0.7。单击OK。5、运行转换,并检查输出结果。6、在谷歌地球,选择FileRevert菜单项(或在“Places”窗口中右键对象,选择Revert)重新加载数据。公园要素现在都是半透明绿色和相同的边框颜色。注意:在谷歌地球中,要素被赋予了默认名称,如:kml_10。7、要使用公园名作为要素名称,点击KMLStyler和写模块要素类连接线,然后添加KMLPropertySetter转换器。8、打开KMLPropertySetter参数对话框,如下进行设置:Name:单击按钮,选择SetToAttributeValuenameSummary:在Interopolis的公园9、运行转换,返回谷歌地球:FileRevert按钮,重新加载数据。查询要素将显示要素的名字,对话框中将显示要素的名称和描述。练习5:添加一个点数据集点要素是有位置而没有大小的兴趣点,如山峰或历史的标记。在KML中点要素分配一个图标作为地图符号。FME包含一套专门用于KML格式转换和预览的内置图标。KMLStyler转换器是用来设定点要素的参数,包括图标类型、颜色、大小和透明度。1、在FMEWorkbench中打开或继续前面的工作空间。2、单击ReadersAddReader。打开添加读模块对话框,填写如下内容:读模块Format:MapInfoMIF/MIDDataset:C:\FMEData\Data\BirdSociety\BirdNestPoints.mif单击“OK”按钮来添加新的读模块。3、选择先前添加的KMLStyler和KMLPropertySetter转换器。右键单击并选择复制(Duplicate)选项。把BirdNestPoints要素类连接到新转换器。4、右键单击BirdNestPoints读模块要素类,并选择复制(OnWriter)。删除自动创建的连接,并连接KMLPropertySetter转换器到新的写模块要素类。5、点击KmlStyler的黄色按钮,打开参数对话框。为鸟巢点要素类设置一个图标,单击name区域右边的按钮,在图标选择器”对话框,选择C2图标,单击OK。设置图标的比例为0.4再次单击OK,关闭KMLStyler参数对话框。注:name字段中可以输入一个图像的URL,而不是选择一个FME图标。例如试试设置比例为1.0。6、设置这些鸟巢要素的属性。单击KMLPropertySetter的红色参数按钮,打开参数对话框。填写一下内容:Name:设置为属性NEST_IDSummary:在Interopolis城市的鸟巢7、运行转换。返回谷歌地球,重新加载数据。8、谷歌打开数据在大西洋海洋中心。这肯定是鸟巢的坐标系统的问题。在导航窗口,找到BirdNestPoints读模块的坐标系参数,