学习《Building Applications with FME Objects》 之六 转换要素

本文介绍了使用FME API进行数据格式转换的方法。通过展示如何设置reader和writer,并利用FMEODialog的xlatePrompt方法获取用户输入的参数,实现了从一种格式到另一种格式的数据转换。此外,还详细说明了要素读取与写入的过程。

这个API可以非常容易的在格式之间做转换,首先打开reader和writer(具体操作前两篇已经有介绍),可以简单的使用FMEODialog的xlatePrompt方法显示窗口,同时允许用户输入reader和writer的参数:

image

注意:FMEODialog对象仅能用于WINDOWS平台

 

下面的代码演示了该方法返回的参数并传递给reader和writer:

 

Public Sub TranslationPrompt(sSourceDir As String, _
                                sDestDir As String)
    Dim sDestDataset As String
    Dim sDestFormat As String
    Dim sSrcDataset As String
    Dim sSrcFormat As String
    Dim bCompleted As Boolean
    Dim bEnd As Boolean
    Dim fmeFeature As FMEOFeature
    Dim fmeDialog As FMEODialog
    Dim fmeSrcDirectives As FMEOStringArray
    Dim fmeDestDirectives As FMEOStringArray
    Dim fmeKeywords As FMEOStringArray
    Set fmeKeywords = m_fmeSession.createStringArray
    Set fmeDialog = m_fmeSession.createDialog
    Set fmeSrcDirectives = m_fmeSession.createStringArray
    Set fmeDestDirectives = m_fmeSession.createStringArray
    bCompleted = fmeDialog.xlatePrompt("MIF", sSourceDir, _
                 "MIF", sDestDir, _
                 sSrcFormat, sSrcDataset, fmeSrcDirectives, _
                 sDestFormat, sDestDataset, fmeDestDirectives)
    If bCompleted = True Then
        Set m_fmeReader = m_fmeSession.createReader( _
                                    sSrcFormat, _
                                    True, fmeSrcDirectives)
        Call m_fmeReader.open(sSrcDataset, fmeKeywords)
        Set m_fmeWriter = m_fmeSession.createWriter( _
                                            sDestFormat, _
                                            fmeDestDirectives)
        Call m_fmeWriter.open(sDestDataset, fmeKeywords)
End Sub

xlatePrompt方法支持的参数:

image

 

如何源和目标的参数中都提供了TITLE值,那么优先采用目标参数中设定的TITLE值。

 

一旦reader和writer被打开,就可以简单的做要素转换,从reader写到writer,代码如下:

bEnd = False
Do While bEnd = False
    bEnd = m_fmeReader.readSchema(fmeFeature)
    If bEnd = False Then
        Call m_fmeWriter.addSchema(fmeFeature)
    End If
Loop
bEnd = False
Do While bEnd = False
    bEnd = m_fmeReader.read(fmeFeature)
    If bEnd = False Then
        Call m_fmeWriter.write(fmeFeature)
    End If
Loop

 

提示:FMEOWriter的addSchema和write方法会清空传递给它的要素,如果你还打算在写入后继续使用该要素,那么在写入前先对该要素进行clone(克隆)。

 

一旦所有的要素被转换完毕,就需要关闭reader和writer,如下:

Call m_fmeReader.Close

Call m_fmeWriter.Close

 

 

 

 

参考资料:

《Building Applications with FME Objects》February 2005

转载请注明文章来源 http://www.cnblogs.com/booolee

转载于:https://www.cnblogs.com/booolee/archive/2009/08/19/1549760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值