span8
span4
我使用FME从SDE特性类中提取多边形,并将它们存储到MS SQL非空间数据库中。数据库由外部软件使用。
在一个表中有关于连接到I处理的多边形的一些文件的信息。有一个表(“多边形”)只存储文件id和多边形id,另一个表(“顶点”)存储多边形的顶点(东、北坐标)。对于每个文件,可以存储多个多边形,对于每个多边形,当然也可以存储多个顶点。
当我处理多边形时,属性是这样的:
请注意,有两个多边形属于文件id 121051。
我现在要做的是用给定的文件id在“多边形”表中创建条目;多边形id由DBMS自动(递增)分配。我使用FeatureWriter来实现这一点。结果是这样的:
在下一步中,我需要将顶点和多边形id存储到表“vertices”中。首先我使用坐标提取器和列表挖掘器从多边形中提取顶点,这是我的结果:
黄色的行属于一个多边形,红色的行属于另一个多边形,但是黄色和红色的行都描述了属于某个文件(使用文件id 121051)的多边形。
当我将顶点存储到表“vertices”时,我需要知道它们的多边形id,因为这是到文件的连接(通过表“polygons”)。更精确地说,我不需要知道“他们的”多边形id,但我需要知道存储在表“多边形”中的一个多边形id和相应的文件id,并且我必须确保我对属于某个多边形的所有顶点使用相同的多边形id。例如,我可以说红线中的顶点属于多边形id 116459而黄线中的多边形属于多边形id 116460,反之亦然。不管我用哪个多边形的id,只要这个多边形的id属于正确的文件…
这就是我被困住的地方!根据我对文件id的了解,我首先考虑使用SQLExecutor和sql语句“从file_id =@Value(myFileId)的多边形中选择polygon_id”。然而,这只适用于有一个多边形存储到该文件。如果存储的多边形不止一个,SQL-Executor会返回每个顶点的所有多边形id,因此我的顶点是多边形数的两倍或三倍,所以结果是这样的(提取,排序):
任何提示感激:-)谢谢提前!
我刚刚找到了解决问题的方法:我使用SQLExecutor,使用SQL语句“SELECT polygon_id, myFileID FROM polygons WHERE file_id =@Value(myFileID)”和“result attributes only”选项。根据结果,我构建了一个按myFileID分组的列表。在另一个步骤中,我使用计数器转换器和文件id作为计数器名称来计算每个文件有多少个多边形。我将这个数字存储到每个顶点的新属性“count”。然后我将顶点与前面使用featuremerger和fileid上的join创建的列表合并。在最后一步中,我将polygon id的属性值设置为“@value(_list{@value(_count)}.myfileid)”。
©2019安全亚搏在线软件公司法律