利用FME实现宗地生成界址点界址线

时间:2024-03-21 07:57:36

原文发布时间:2012-05-22

作者:littlebo

最近学习FME,使用FME完成了一个对界址点重排序的案例,写出来与大家分享探讨一下:

其实根据宗地生成界址点,界址线只需一个转换器Chopper即可完成,把最大节点数设为1,转为点;最大节点数设为2,转为线。

但是往往客户还会有其他的需求,比如:


1、 界址点按照街坊统一编号,从1开始累加编号,界址点编号在同一街坊不重复

2、 界址点从每宗地的左上角开始,顺时针顺序编号

3、 界址点按照本街坊,从左往右,从上往下顺序依次编号

例如下图:

        利用FME实现宗地生成界址点界址线

那么我先说说我的思路:

第一步

顺序提取每个宗地坐标点:

这个过程是将宗地转为点,并顺序提取每个宗地界址点并编号(原始Point_id),注意,此编号的起点并不是左上角,有可能是右上角,右下角。

        利用FME实现宗地生成界址点界址线

这里用到Orientor:将多边形节点转为顺时针;

还有一个循环:顺序提取坐标点并赋给属性ys_point_id

第二步

界址点重排序:

寻找左上角界址点,并赋point_id为1,然后以此界址点为起点,为界址点重新顺序编号point_id;

这个过程重要点有两个地方,

1、      寻找左上角界址点:通过获取每个点坐标,选择X最小的为起点(当然这也有可能是左下角)

2、      界址点重新编号:首先找到左上角点,通过此点的ys_point_id-1计算出Δid,然后根据此Δid计算其他每个界址点的新序号point_id=ys_point_id-Δid,当然这里需要进行判断,如果point_id>0那么此id为新序号,如果point_id<=0,那么point_id+point_sum为新序号。(point_sum为宗地界址点总数,在第一步计算出)

        利用FME实现宗地生成界址点界址线

当然在此过程用到Sorter:重新排序;

   DuplicateRemover:删除重复点。

最后输出将会得到重新排序后的界址点。

如果还需要生成界址线,并且带有起始点号;终止点号的属性,实现思路就是将这些重排序的点与线重叠,将点编号传递给线,从而得到界址线的起始点号、终止点号。

注意:

数据中可能会出现环、聚合体等复杂结构,所以在做这些处理之前需要考虑对环和聚合体的预处理;

环的处理将用到DonutHoleExtractor转换器;

聚合体的处理用到Deaggregator转换器,这些具体问题就需要具体分析了。

以上纯属个人理解,如有不对请多指教。