• 学习《Building Applications with FME Objects》 之三 操作要素(Features)


    FMEOFeature是要素对象,是FME Object应用程序中的基本数据单元,一般来说,要素就是一套属性和一个关联了坐标系统的几何图形,应用程序读取数据集时是一个一个读取要素数据,当应用程序写数据集时是一个一个写入要素数据,要素可以被所有的标准FME函数和处理器操作,下面是要素的逻辑数据模型:

    image

    上面的图是逻辑模型,在FME Objects没有对这些类提供一对一的API,所有的数据访问通过FMEOFeature对象。

    下面的部分描述逻辑类、属性和他们之间的关系,注意Class::Attribute是引用类的属性。

    输入的要素类型存储在Feature::FeatureType属性。

    要素属性按下列类型分组:

    • 格式属性
    • 用户属性
    • FME属性

    一个要素可以没有或有多个格式属性,一个FormatAttribute为一个特定的格式属性,例如:autocad_block_name 和 sde30_justification。

    一个要素可以没有或有多个用户属性,用户属性为自定义属性,例如:parcel_identifier,owner_name,data_surveyed等。

    FME属性名字前缀fme_。用FME属性覆盖格式属性,例如:fme_color和fme_fill_color要素属性可以表示要素强度(详细请查看FME Foundation手册的FME Architecture章节)。

    更重要的属性Feature::fme_type和Geometry::fme_geometry。Geometry类表示要素位置信息,要素几何图形可以是点、线或免。要素包含多个集合图形则称为aggregate(聚合)几何图形。要素也可以没有几何图形。

    fme_type和fme_geometry的重要区别:

    fme_geometry表示的是实际坐标构成的几何图形类型。

    fme_type指定如何去展示几何图形。

    例如,1个点几何图形类型可以被表现为多种FME类型:point,arc,ellipse,txt。

    规定fme_type和fme_geometry是对应关系如下:

    image

    你希望创建的应用程序格式中立,那你必须仅仅使用FME属性处理要素,如果你避免使用特殊格式的属性,则很容易工作在你的应用程序。

    每个几何图形都仅仅关联一个坐标系统,关于更多的信息参考Working with Coordinate Systems第55页。

    下面是FMEOFeature方法和属性图示:

    image

    下面将学习一下内容:

    • 操作要素属性
    • 解释要素几何图形
    • 使用要素模式(schema for a feature)

    关于要素和坐标系统之间的关系,请参考本教程第第7章Working with Coordinate Systems 。

    本教程第9章Advanced Feature Processing包含了要素处理方法,如:performFuntion和processFeatures和如何对要素应用factory pipelines。

    注意:所有的范例代码仅工作在二维几何图形,如果你需要处理三维几何图形,需要扩展范例代码。

    操作要素属性

    下表的属性和方法可以操作格式属性、用户属性、FME属性:

    属性或方法 描述
    allAttributeNames 该方法返回要素的所有属性,包括格式属性、用户属性、FME属性
    attribute 该属性用来获取或设置字符串属性
    attributeExists 该方法判断一个属性是否存在,存在返回FME_TRUE,不存在返回FME_FALSE
    booleanAttribute 该属性用来获取或设置布尔属性
    int16Attribute 该属性用来获取或设置2字节整数属性
    int32Attribute 该属性用来获取或设置4字节整数属性
    real32Attribute 该属性用来获取或设置4字节整数属性
    real64Attribute 该属性用来获取或设置8字节整数属性
    cloneAttributes 该方法复制源要素的要素类型和所有属性到目标要素。目标要素不存在源要素类型和属性。
    注意:该方法不复制源要素的几何图形到目标要素,如果需要复制几何图形可以使用clone方法。
    clone 该方法复制源要素的要素类型、所有属性和几何图形到目标要素。目标要素不存在源要素类型和属性。

    GetFeatureAttributes过程用getAllAttributeNames方法获得输入要素的所有属性,并将结果放入两个Collection 中,其中一个放置属性名另一个方式属性值。

    Sub GetFeatureAttributes(ByVal fmeFeature As FMEOFeature, _
                             ByVal colNameList As Collection, _
                             ByVal colValueList As Collection)
        Dim fmeAttributeNames As FMEOStringArray
        Dim sName As String
        Dim sValue As String
        Dim lEntries As Integer
        Dim i As Integer
        Dim d As Double
        Dim b As Boolean
        Set fmeAttributeNames = m_fmeSession.createStringArray
        Call fmeFeature.allAttributeNames(fmeAttributeNames)
        lEntries = fmeAttributeNames.entries
        For i = 0 To lEntries - 1
            sName = fmeAttributeNames.element(i)
            sValue = fmeFeature.attribute(sName)
            Call colNameList.Add(sName)
            Call colValueList.Add(sValue)
        Next i
    End Sub

     

    使用attribute设置属性,用attributeExists方法查询属性是否存在,如果存在就写入changed_value,如果不存在就创建新属性并写入new_value。

     

    If fmeFeature.attributeExists("my_attribute") Then
    fmeFeature.attribute("my_attribute") = "changed_value"
    Else
    fmeFeature.attribute("my_attribute") = "new_value"
    EndIf

    任何要素属性可以用FMEOFeature对象的attribute属性获取,因为FME对象将自动执行类型变换,自动的类型变换应该小心使用,避免undefined结果。下表位类型有效转换,表中未空的单元表示undefined结果。

    image

     

    cloneAttributes方法可以用来复制源要素属性到目标要素,代码如下:

    Dim fmeTargetFeature as FMEOFeature
    Set fmeTargetFeature = m_fmeSession.createFeature
    fmeSourceFeature.cloneAttributes(fmeTargetFeature)

     

    提示:目标要素中任何同名的属性将被源要素属性覆盖。

    参考资料:

    《Building Applications with FME Objects》February 2005

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

  • 相关阅读:
    nginx 配置https 负载均衡
    MyCAT+MySQL搭建高可用企业级数据库集群视频课程
    Java数字签名算法--RSA
    bootstrap在iframe框架中实现由子页面在顶级页面打开模态框(modal)
    bootstrap-treeview 自定义实现双击事件
    Java多线程之内存可见性
    Java实现责任链模式
    JVM(HotSpot) 7种垃圾收集器的特点及使用场景
    jQuery的noConflict以及插件扩展
    JavaScript事件漫谈
  • 原文地址:https://www.cnblogs.com/booolee/p/1547462.html
Copyright © 2020-2023  润新知