您的位置:首页 > 移动开发 > Objective-C

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

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





上面的图是逻辑模型,在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是对应关系如下:





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

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

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





下面将学习一下内容:

操作要素属性 解释要素几何图形 使用要素模式(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结果。





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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐