span8
span4
你好,
我在形状文件格式的一些数据,当读入FME从双经编码的属性字段类型的变化。见从两个圆弧目录和FME的读者变压器下面的屏幕截图。下面是从日志文件的打印输出。所以,我的最终目标是使用“getAttributeType()”类型的方法来执行一些数据使用的属性类型重命名。那么,有什么我与形文件阅读器或形状文件规范在FME失踪了?如果我把数据导入到一个文件地理它工作得很好,FME将保持字段类型。
属性(编码:FME系统):`Length__fe”具有值'10'
属性(编码:FME系统):`Width__fee”具有值'3
FME构建信息如下:
FME数据库版
FME 2017.1.0.0构建17488 - WIN32。
任何帮助或信息,为什么不FME,这将是非常有帮助!
好的,@takashi启发了我试了一下Python的,看我能不能制定一个解决方法。(这个老家伙没有得到做多编码了)。有一些乐趣。
基于上述隆的Python中,我使用了类似的技术。该FeatureReader总是先踢出模式功能。第一个Python的嗅着通过架构功能,使我们的属性(和它们的类型)的列表,我们要裹胁到存储按他们预期的类型,而不是作为字符串。
高清输入(个体经营,功能):#让那些数字#我们将使用这个在其他PythonCaller要挟实际值#为数字内部存储的那些属性名称的全局变量。#假定源格式是ESRI的shapefile。名称= feature.getAttribute(“属性{}。名称”)类型= feature.getAttribute(“属性{}。native_data_type”)#这个全局列表将包含应#强制转换为内部存储为数字类型属性的名称。在枚举全球g_numerics g_numerics = []对于i,(源名,类型)(邮编(名称,类型)):如果在[ '短', '长', '双' type.startswith( '编号')或类型, 'float']: g_numerics += [ [srcName, type] ] self.pyoutput(feature)
然后数据功能打通第二PythonCaller泵使用该列表,检索应该被强迫每个属性,胁迫,然后将其设置回。
高清输入(个体经营,功能):#强制存储在要素的实际值,以反映其#模式类型。#以前的g_numerics全局列表的成立,有其#元素(名称,类型)对。我们将使用这些#检索,然后投和回存的属性。#这个全局列表包含的属性应该是#被迫内部存储为数字类型的名称。Python的FME API#接受这些类型的呼叫的setAttribute:#PyInt ==> FME_Int32#PyFloat ==> FME_Real64#PyLong ==> FME_Int64在g_numerics为(源名,类型)全球g_numerics:值= feature.getAttribute(源名) if value != None: if type == 'long': longVal = long(value) feature.setAttribute(srcName,longVal) elif type == 'short': shortVal = int(value) feature.setAttribute(srcName,shortVal) else: # Everything else we'll treat as float floatVal = float(value) feature.setAttribute(srcName,floatVal) self.pyoutput(feature
其中“治疗”之前和之后记录的特征的工作区还附接。
感谢您的乐趣转移。
附工作区:typefixer.fmw
如果您需要重命名基于源数据集中定义的数据类型的某些属性,你将不得不参考架构特点,在目前FME。
以下是一个例子,一个共同的前缀添加到每个数字类型的属性名称,根据Shape文件本地数据类型。
注:根据原生格式规范,Shape文件只能有“号(W,P)”式的数字数据的字段。我不知道为什么当前FME(2016年和2017年)的Shapefile读者认为“短”与“长”作为原始数据类型ESRI的shapefile格式。又见这个线程:
#PythonCaller_1:修改属性的名称#如添加一个共同的前缀“N_”每一个数字类型的属性。#和创建一个全局变量存储逗号分隔[了newName,源名] +,#其将被用作@RenameAttributes函数的参数。#假定源格式是ESRI的shapefile。DEF modifySchema(特征):( '属性{}名称')名称= feature.getAttribute类型= feature.getAttribute( '属性{} native_data_type')的重命名= []对于i,(源名,类型)在枚举(拉链(名称,类型)):如果type.startswith( '编号')或式中[ '短', '长']:了newName = 'N_%s' 的%源名feature.setAttribute('属性{%I} .srcName'newName)将重命名+ = [了newName,源名]全球g_renameParam g_renameParam =','。加入(重命名)
#PythonCaller_2高清renameAttributes(功能):如果g_renameParam:feature.performFunction( '@ RenameAttributes(%S)' %g_renameParam)
你好@ j87foster我不知道为什么FME解释“数字”类型(在源数据集定义)进入“fme_system”型(内部数据类型),但我不认为它会导致任何问题。
上FME数据查验(或日志)中所示的内部数据类型往往不匹配在源数据集定义的数据类型,如你观察。然而,这不会引起任何问题,由于内部数据类型可以自动地(隐式地)根据需要进行改变,而平移,例如从数字到字符串,反之亦然。也就是说,属性的内部数据类型可以根据情况而改变。
FME读取和特点分别保留源数据集的架构,以及源模式将被使用,如果你使用动态模式选项来配置目标架构。个人特点没有关于源数据集中定义的数据类型的信息。
你好@ j87foster,
起初,我想到的是,这仅仅是默认为“数字”的“双重”由于精度/规模过大。例如,如果FME定义的双数据类型作为精度:“2”,和宽度“3”,如果Shape文件特征出来具有精度“6”的特征和宽度“10”它可以默认号码类型以 accomodate the shapefile's values.
考虑到这一点,虽然,你会介意分享您的Shape文件,你看到这种行为?如果你觉得不舒服这里分享shape文件,你可以在这里提交的情况下:https://www.亚搏在线safe.com/support/
共享数据可以让我们一探究竟,看看到底是什么发生。
©2019安全亚搏在线软件公司|法律