FME的ESRI Geodatabase (MDB)格式介绍(一)

原文发布时间:2010-10-13

作者:毛毛虫

来源:

ESRI Geodatabase (MDB) 是一种FME 格式,它的FME格式关键字是GEODATABASE_MDB。

1、创建类:

FMEGeodatabase writer也可以创建一个新的要素类或写入到一个已经存在的要素类中,新的要素类的名称必须符合Geodatabase的命名规则,例如不能包含破折号“-”(使用ArcCatalog创建一个新类会更容易)。当使用FME创建一个新的要素类时,要素类参数允许用户在FME中定义数据的空间域。如果空间域参数保留创建的要素类空白,目标数据集会使用指定参数。

必须注意,确保输出要素类的参数集匹配源数据。例如,如果你的源数据包括负x坐标,x原点必须包括一个负范围。不适当的空间域设置会导致错误“…{The coordinates or measures are out of bounds}…(坐标或度量超出范围)?X原点的值定义了所有插入到SDEEnterprise Geodatabase的数据较小的边界。没有有一个x坐标的值小于Xorigin的数据可以被插入到数据库。YOrigin,ZOrigin Measured_Origin是相似的。

xy大小精度参考每个坐标单位的小数单位。值10是允许的小数位精度。xy大小会影响数据的精度。在SDEEnterprise Geodatabase中,精度被下面的方程限制:

     maximum extents / 2147483645

扫描二维码关注公众号,回复: 1624020 查看本文章

原因是SDEEnterprise Geodatabase存储32位的带符号整数,因此必须确保(Scale * XExtent)和(Scale * YExtent)不大于最大32位带符号整数的值2,147,483,645

也要注意,在一个转换中当创建一个新的要素类时,当它尝试写入要素类的第一个要素中时,FME创建表和定义空间域。如果最初尝试定义的任何空间域参数不正确的,接下来尝试的加载数据可能失败。删除要素类,允许FME用创建新的表修订参数。

如果Personal Geodatabase writer被使用,可能强迫writer计算整个数据集的扩展,一个网格大小基于源的扩展,那么使用这个信息,当创建新的要素类时。利用这个功能,设置下面的参数为X Origin, Y Origin, Z Origin, XY Scale和Z Scale

 

写入到已存在的要素类

当写入到一个已存在的要素类,空间域参数在已有的Geodatabase表中已经定义。一种确保输出的要素类的定义匹配存在的要素类的定义的方法是使用在Destination Data菜单下的Import Feature Type Definitions源数据不符合这些参数可能不能加载。

例如:假设想加载一个CAD文件到一个Geodatabase,我们知道坐标是UTM 投影。根据位置,将x坐标以数十万计好,y坐标以数百万计好。一个CAD文件可能包含了在坐标0,0的绘制。因为SDE以整数格式存储坐标,使用精度设置允许使用小数,这个要素类可能会有xy域设置为大于0SDE不接受超出范围的数据,当尝试在0,0位置加载要素时,转换会终止。设置Ignore Failed FeaturesYes会运行FME,包含加载这个数据集,不过要素有问题的话也不能加载到数据库。


Writer参数(Writer Parameters)

注意目标数据的参数设置必须确保匹配整个数据集的空间扩展,否则可能会不能写入(如空间域的目标x原点设置不适当)。对于Geodatabase wirter,除非在各个输出要素类中被不同的设置,否则目标数据的参数设置应用到所有要素类。一些空间参数在下面的Creating a New Feature Class部分中更详细的处理。对于Geodatabase writer,下面数据集参数的必须正确的设置,虽然它们没有出现在不同的输出要素类中:

Transaction Type参数告诉FME是否使用transactions  versioning写入。使用transactions允许一个长时间使用的数据,因为某些原因被中断或停止后重新加载到事件中。这也允许使用要素到Write的每个转换参数的有效参数的微调。


FeatureClass写入的疑难解答

如果有错误信息,如,表没有找到,可能有下列问题:

         表已经存在

         表可能在其他数据集或版本中存在

         无效的表名

         在表名或字段中有太多的字符

         字段使用了DBMS保留关键字(例如在SQL Server 中的USEMIN)。

         用户权限不足

         没有足够的授权水平——写入SDE需要ESRI或更高版本的FME

         数据库不可用或网络错误

         无效的空间参考

下面是一个SQL Server上的SDE错误的例子:

这种情况的问题是有一个不合法的字段名称'USE'SQL Server不能创建被请求的SDE writer表。

另一个问题是有时确定已经在Arc Catalog中删除了要素类,但系统表中的残留可能仍在基础数据库中,可能需要从DBMS层检查数据库,而不仅仅是从ArcGIS中。不过这些操作只在只读模式中——不在数据库中对SDE进行任何编辑!

最简单的应变措施是写入到SDE而不是Geodatabase,如果不需要额外的SDE writer,可以设置table exists'No',允许自己定义详细的表的创建。不过也要设置'Drop Existing Table' Yes,这将移除任何存在的数据,否则会影响表的创建。

ArcGIS 9.3的错误代码,可查看:

http://resources.esri.com/help/9.3/ArcGISEngine/ArcObjects/esriDataSourcesGDB/sdeError.htm

http://resources.esri.com/help/9.3/ArcGISEngine/ArcObjects/esriDataSourcesGDB/sdeError.htm

http://resources.esri.com/help/9.3/ArcGISEngine/ArcObjects/esriGeoDatabase/esriNetworkErrors.htm

http://resources.esri.com/help/9.3/ArcGISEngine/ArcObjects/esriArcWeb/arcWebError.htm


Where条件过滤

有两种方法可以从Geodatabase中读入子集:

1)读取所有的数据,使用Grepper或Tester过滤出需要的部分(可能在其他函数的组合中,如SubstringExtractor)。

2)使用GeoDatabase reader 中的Where关键字。这种方法更好,因为不需要读入源中的所有数据。

Workbench中的导航面板中的GeoDatabase reader 下面可以定义Where关键字。


指定的Where从句被传递到Geodatabase中进行处理,这个Where从句跟SQL语句几乎一样(使用基础数据支持的语法),除了不能使用ORDER BY, GROUP BY,潜逃查询和聚合函数(即MAXCOUNT)。这个WHERE从句应用到所有的表,进行要素类的检索。具体查询可以参考Reader keyword DEF。


注记:  
包含注记的字体、大小、角度等的独立要素。当写入注记的这些字段不要直接设置,需要使用

geodb_* 属性来设置这些值,如TextString, Angle, FontSize等。这些属性的更多信息查看Readers and Writers手册。如果注记有子类型,如果要素类已经存在并且子类型已经定义,那么wirter只写注记。使用geodb_anno_class_id指定注记使用的子类型的ID。


Feature-Linked 注记

Geodatabase注记是独立的要素,但是可以通过feature-linked注记连接到其他要素。当注记要素类和其他要素类间有关系时,feature-linked发生。如果在转换前必须的要素类和关系被创建和安装,feature-linked注记可以使用FME写入。属性attribute geodb_linked_feature_id控制哪些注记连接到那些要素上。                                                                                                         

编码域

通过设置用户属性为coded_domain来创建或填充GeoDatabase Coded Domains。


用户创建了一个新的属性,指定类型为coded_domain,点击Edit按钮:


 这样用户就为这个属性指定了一些编码值。
 



猜你喜欢

转载自blog.csdn.net/fmechina/article/details/80698750
今日推荐