“指定字段类型为‘-999’”的答案 https://knowledge.亚搏在线safe.com/questions/28152/a-field-type-of-999-was-specified.html “指定字段类型为‘-999’”的最新答案 答案由bzwemmer https://knowledge.亚搏在线safe.com/answers/28220/view.html

我感觉我们已经很接近了,非常感谢。然而;保持它的动态,我有以下代码来获得属性和他们的类型:

attrs = []
圣= feature.getAllAttributeNames ()
圣:“打印”,圣
在san的a:
= feature.getAttributeType(一个)
attrs.append (a)
tsat .append(at) ft = feature.getAttribute('fme_feature_type') cs = feature.getCoordSys() ge = feature.getAttribute('fme_geometry')

我用这些来设置模式:

创建模式特性。
模式= fmeobjects.FMEFeature ()
对于范围(0,len(attrs), 2)中的i:
# name:属性名,值:数据类型名
模式。setAttribute(attrs[i], attrs[i+1])
模式。setAttribute('fme_geometry{0}', ge)
schema.setFeatureType(英尺)
schema.setCoordSys (cs)

这将给我一个所有属性的列表,我将遍历这些属性以获得它们的属性类型。属性类型由数字表示:

ATTRS: ['SHAPE_Length', 9, 'DTB_ID', 6, 'geodb_oid', 6, 'geodb_type'

这个列表比较长,但这只是一个想法。当添加模式到作者:

向编写器添加模式特性。
ObjWriter.addSchema(模式)

这给出了误差:

在元文件GEODATABASE_FILE.fmf'中没有找到'11'的几何映射项。
2016年5月3日星期二14:55:26 GMT bzwemmer
答案由bzwemmer https://knowledge.亚搏在线safe.com/answers/28202/view.html

@takashi谢谢,但是我们有一个工作流,用户可以在撰写本亚搏在线文之前修改模式。这意味着来自源数据的模式可能与我们试图编写的模式不同。如果我在这个python脚本之前包含一个检查器,那么数据检查器将显示带有修改列和特性类名称的表。因此,我假定可以从特性本身派生出模式。

2016年5月3日星期二08:11:14格林尼治时间 bzwemmer
答案由隆 https://knowledge.亚搏在线safe.com/answers/28201/view.html

@bzwemmer,你将不得不阅读模式来自源数据集的特性,并在写入之前将其添加到写入器数据特性。这是一个最小的例子。

Dynamic Schema [GEODATABASE_FILE] Writer # Destination模式派生自源Esri Shapefile数据集。每个模式定义名都等于阅读器特性类型名。作者覆盖现有的GDB数据集。除了“OVERWRITE_GEODB”之外,所有的写器指令和参数都保留为默认值。省略了错误处理。导入fmeobjects类FeatureProcessor(object): def init__(self): gdb = 'C:/FME/tmp/test。gdb' # TODO:将它更改为实际的目标数据集。指令=[]#全部默认。参数= ['OVERWRITE_GEODB','YES'] #除'OVERWRITE_GEODB'外的所有默认值。自我。writer = fmeobjects.FMEUniversalWriter('GEODATABASE_FILE', directives) self.writer.open(gdb, parameters) source = [] ################################################################ # TODO: Append all source Shapefile paths to the 'source' list.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #的src来源:读者= fmeobjects。FMEUniversalReader('ESRISHAPE', False) reader.open(src) self.writer.addSchema(reader.readSchema()) # Add SCHEMA feature.def input(): feature. setfeaturetype (feature. getattribute ('fme_feature_type')) . Write . Write (feature) #写数据特性。def关闭(自我):self.writer.close ()
2016年5月3日星期二08:05:32 GMT