学习《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属性:
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
上面的图是逻辑模型,在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 | 该方法复制源要素的要素类型、所有属性和几何图形到目标要素。目标要素不存在源要素类型和属性。 |
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
相关文章推荐
- 学习《Building Applications with FME Objects》 之三 操作要素(Features)2
- 学习《Building Applications with FME Objects》 之六 转换要素
- 学习《Building Applications with FME Objects》 之九 高级要素处理
- 学习《Building Applications with FME Objects》 之四 从数据集读取要素
- 学习《Building Applications with FME Objects》 之八 空间索引
- 学习《Building Applications with FME Objects》 之十 使用集合
- 学习《Building Applications with FME Objects》 之二 使用Sessions(会话)
- 学习《Building Applications with FME Objects》 之五 向数据集写要素
- 学习《Building Applications with FME Objects》 之一 关于FME Objects
- 学习《Building Applications with FME Objects》 url
- 学习《Building Applications with FME Objects》 之七 坐标系统
- Building Applications with Force.com and VisualForce(六):Designing Applications for Multiple users: Accommodating Multiple Users in your App
- 深度学习笔记6:Learning color features with Sparse Autoencoders
- Building Applications with Berkeley DB Java Edition @ JDJ
- Building Applications with Force.com and VisualForce (DEV401) (二) : Application Essentials:Designing Application on the Force.com Platform
- [深度学习论文笔记][Video Classification] Learning Spatiotemporal Features with 3D Convolutional Networks
- Building Applications with Force.com and VisualForce(Dev401)(十五):Data Management: Data management Overview
- Building J2EE Applications with the Rational Unified Process
- Building Applications with Force.com and VisualForce(Dev401)(十八):Visualforce Pages: Introduction to Visualforce
- building machine learning system with Python 学习笔记--从零开始机器学习(1)搭建环境