public class TopologyProcessingOptions extends Object
注意:
如果未通过 setVertexTolerance
、setOvershootsTolerance
和 setUndershootsTolerance
方法设置节点容限、短悬线容限和长悬线容限,或设置为0,系统将使用数据集的容限(getTolerance
)中相应的容限值进行处理。
构造器和说明 |
---|
TopologyProcessingOptions()
构造一个新的
TopologyProcessingOptions 对象。 |
TopologyProcessingOptions(TopologyProcessingOptions topologyProcessingOptions)
根据给定的
TopologyProcessingOptions 对象构造一个与其完全相同的新对象。 |
限定符和类型 | 方法和说明 |
---|---|
boolean |
areAdjacentEndpointsMerged()
返回是否进行邻近端点合并。
|
boolean |
areDuplicatedLinesCleaned()
返回是否去除重复线。
|
boolean |
areLinesIntersected()
返回是否进行弧段求交。
|
boolean |
areOvershootsCleaned()
返回是否去除短悬线。
|
boolean |
arePseudoNodesCleaned()
返回是否去除假结点。
|
boolean |
areRedundantVerticesCleaned()
返回是否去除冗余点。
|
boolean |
areUndershootsExtended()
返回是否进行长悬线延伸。
|
String |
getArcFilterString()
返回弧段求交的过滤线表达式。
|
ArcAndVertexFilterMode |
getFilterMode()
返回弧段求交的过滤模式。
|
double |
getOvershootsTolerance()
返回短悬线容限,该容限用于在去除短悬线时判断悬线是否是短悬线。
|
double |
getUndershootsTolerance()
返回长悬线容限,该容限用于在长悬线延伸时判断悬线是否延伸。
|
Recordset |
getVertexFilterRecordset()
返回弧段求交的过滤点记录集,即此记录集中的点位置线段不进行求交打断。
|
double |
getVertexTolerance()
返回节点容限。
|
void |
setAdjacentEndpointsMerged(boolean value)
设置是否进行邻近端点合并。
|
void |
setArcFilterString(String value)
设置弧段求交的过滤线表达式。
|
void |
setDuplicatedLinesCleaned(boolean value)
设置是否去除重复线。
|
void |
setFilterMode(ArcAndVertexFilterMode value)
设置弧段求交的过滤模式。
|
void |
setLinesIntersected(boolean value)
设置是否进行弧段求交。
|
void |
setOvershootsCleaned(boolean value)
设置是否去除短悬线。
|
void |
setOvershootsTolerance(double value)
设置短悬线容限,该容限用于在去除短悬线时判断悬线是否是短悬线。
|
void |
setPseudoNodesCleaned(boolean value)
设置是否去除假结点。
|
void |
setRedundantVerticesCleaned(boolean value)
设置是否去除冗余点。
|
void |
setUndershootsExtended(boolean value)
设置是否进行长悬线延伸。
|
void |
setUndershootsTolerance(double value)
设置长悬线容限,该容限用于在长悬线延伸时判断悬线是否延伸。
|
void |
setVertexFilterRecordset(Recordset value)
设置弧段求交的过滤点记录集,即此记录集中的点位置线段不进行求交打断。
|
void |
setVertexTolerance(double value)
设置节点容限。
|
public TopologyProcessingOptions()
TopologyProcessingOptions
对象。public TopologyProcessingOptions(TopologyProcessingOptions topologyProcessingOptions)
TopologyProcessingOptions
对象构造一个与其完全相同的新对象。topologyProcessingOptions
- 指定的 TopologyProcessingOptions 对象。public double getOvershootsTolerance()
“悬线”的定义:如果一个线对象的端点没有与其它任意一个线对象的端点相连,则这个端点称之为悬点。具有悬点的线对象称之为悬线。
public void setOvershootsTolerance(double value)
“悬线”的定义:如果一个线对象的端点没有与其它任意一个线对象的端点相连,则这个端点称之为悬点。具有悬点的线对象称之为悬线。
注意:该容限的有效范围为大于等于0,设置为小于0时会抛出异常。如果用户不设置,或将该值设置为0,系统会使用数据集的容限(getTolerance
)中的短悬线容限来处理。
value
- 短悬线容限。public double getUndershootsTolerance()
public void setUndershootsTolerance(double value)
注意:该容限的有效范围为大于等于0,设置为小于0时会抛出异常。如果用户不设置,或将该值设置为0,系统会使用数据集的容限(getTolerance
)中的长悬线容限来处理。
value
- 长悬线容限。public boolean arePseudoNodesCleaned()
public void setPseudoNodesCleaned(boolean value)
结点又称为弧段连接点,至少连接三条弧段的才可称为一个结点。如果弧段连接点只连接了一条弧段(岛屿的情况)或连接了两条弧段(即它是两条弧段的公共端点),则该结点被称为假结点。如下图所示,结点2只连接了两条弧段,为假结点,去除假结点后的结果如下图(右)所示。
值得注意的是,并不是所有的假结点都需要被去除,比如岛屿或为了标识在不同部分具有不同属性的一个线对象(一条公路一段是柏油路面,另一段是石灰路面,它在构建拓扑关系时,需要将假结点保留下来)。
value
- 一个布尔值指定是否去除假结点,true 表示去除,false 表示不去除。public boolean areOvershootsCleaned()
public void setOvershootsCleaned(boolean value)
去除短悬线指如果一条悬线的长度小于悬线容限,则在进行去除短悬线操作时就会把这条悬线删除。通过 setOvershootsTolerance
方法可以指定短悬线容限,如不指定则使用数据集的短悬线容限。
注:
悬线:如果一个线对象的端点没有与其它任意一个线对象的端点相连,则这个端点称之为悬点。具有悬点的线对象称之为悬线。
value
- 一个布尔值指定是否去除短悬线,true 表示去除,false 表示不去除。public boolean areRedundantVerticesCleaned()
public void setRedundantVerticesCleaned(boolean value)
任意弧段上两节点之间的距离小于节点容限时,其中一个即被认为是一个冗余点,在进行拓扑处理时可以去除,下图为去除冗余点前后。
用于判断冗余点的节点容限,可通过 setVertexTolerance
方法设置,如果不设置或设置为0,将使用数据集的容限(getTolerance
)中的节点容限。
冗余点与假结点的异同
setPseudoNodesCleaned
)都是去除多余的点。value
- 一个布尔值指定是否去除冗余点,true 表示去除,false 表示不去除。public boolean areUndershootsExtended()
public void setUndershootsExtended(boolean value)
如果一条悬线按其行进方向延伸了指定的长度(悬线容限)之后与某弧段有交点,则拓扑处理后会将该悬线自动延伸到某弧段上,称为长悬线延伸。通过 setUndershootsTolerance
方法可以指定长悬线容限,如不指定则使用数据集的长悬线容限。
关于悬线的定义,请参见 setOvershootsCleaned
方法的介绍。
value
- 一个布尔值指定是否进行长悬线延伸,true 表示延伸,false 表示不延伸。public boolean areDuplicatedLinesCleaned()
若处理对象是三维线数据集,则去掉重复线时具有随机性,即保留下来的三维线的z值可能来自任何一条重复线。
public void setDuplicatedLinesCleaned(boolean value)
重复线:两条弧段若其所有节点两两重合,则可认为是重复线。重复线的判断不考虑方向。
去除重复线的目的是为避免建立拓扑多边形时产生面积为零的多边形对象,因此,重复的线对象只应保留其中一个,多余的应删除。
通常,出现重复线多是由于弧段求交造成的。如下图中弧段求交之后,将产生8条弧段,分别为 AB、BC、CD、DE、FB、BC、CD、DE,其中弧段 BC 和 CD 都是重复线,通过拓扑处理去除重复线之后,结果只有5条弧段 AB、BC、CD、DE、FB。如果用户选择弧段求交,建议同时选择去除重复线(实际是先进行去除重复线)。
value
- 一个布尔值指定是否去除重复线,true 表示去除,false 表示不去除。public boolean areLinesIntersected()
public void setLinesIntersected(boolean value)
线数据建立拓扑关系之前,首先要进行弧段求交计算,根据交点分解成若干线对象,如下图所示。一般而言,在二维坐标系统中凡是与其他线有交点的线对象都需要从交点处打断,如十字路口。且此方法是后续错误处理方法的基础。
在实际应用中,相交线段完全打断的处理方式在很多时候并不能很好地满足研究需求。例如,一条高架铁路横跨一条公路,在二维坐标上来看是两个相交的线对象,但事实上并没有相交,如果打断将可能影响进一步的分析。在交通领域还有很多类似的实际场景,如河流水系与交通线路的相交,城市中错综复杂的立交桥等,对于某些相交点是否打断,需要根据实际应用来灵活处理,而不能因为在二维平面上相交就一律打断。
如下图(左)所示,线对象 B 与 A、C 分别在1、2处相交,已知线对象 B 在位置1处与 A 是空间不相交的,不能打断。
这种情况可以通过设置过滤线表达式(setArcFilterString
)和过滤点记录集(setVertexFilterRecordset
)来确定哪些线对象以及哪些相交位置处不打断。
这两个参数单独或组合使用构成了弧段求交的四种过滤模式,还有一种是不进行过滤。过滤模式通过 setFilterMode
方法设置。对于上面的例子,使用不同的过滤模式,弧段求交的结果也不相同。关于过滤模式的详细介绍请参阅 ArcAndVertexFilterMode
类。
注意:进行弧段求交处理时,可通过 setVertexTolerance
方法设置节点容限(如不设置,将使用数据集的节点容限),用于判断过滤点是否有效。若过滤点到线对象的距离在设置的容限范围内,则线对象在过滤点到其的垂足位置上不被打断。
value
- 一个布尔值指定是否进行弧段求交,true 表示进行弧段求交,false 表示不求交。public boolean areAdjacentEndpointsMerged()
public void setAdjacentEndpointsMerged(boolean value)
如果多条弧段端点的距离小于节点容限,那么这些点就会被合并成为一个结点,该结点位置是原有点的几何平均(即 X、Y 分别为所有原有点 X、Y 的平均值)。
用于判断邻近端点的节点容限,可通过 setVertexTolerance
设置,如果不设置或设置为0,将使用数据集的容限(getTolerance
)中的节点容限。
需要注意的是,如果有两个邻近端点,那么合并的结果就会是一个假结点,还需要进行去除假结点的操作。
value
- 一个布尔值指定是否进行邻近端点合并,true 表示合并,false 表示不合并。public double getVertexTolerance()
public void setVertexTolerance(double value)
getTolerance
)中的节点容限来处理。value
- 节点容限。public Recordset getVertexFilterRecordset()
public void setVertexFilterRecordset(Recordset value)
如果过滤点在线对象上或到线对象的距离在容限范围内,在过滤点到线对象的垂足位置上线对象不被打断。详细介绍请参见 setLinesIntersected
方法。
注意:过滤点记录集是否有效,与 setFilterMode
方法设置的弧段求交过滤模式有关。可参见 ArcAndVertexFilterMode
类。
value
- 弧段求交的过滤点记录集。public String getArcFilterString()
public void setArcFilterString(String value)
在进行弧段求交时,通过该属性可以指定一个字段表达式,符合该表达式的线对象将不被打断。详细介绍请参见 setLinesIntersected
方法。
注意:该表达式是否有效,与 setFilterMode
方法设置的弧段求交过滤模式有关。可参见 ArcAndVertexFilterMode
类。
value
- 弧段求交的过滤线表达式。public ArcAndVertexFilterMode getFilterMode()
ArcAndVertexFilterMode.NONE
,即在所有相交处打断。public void setFilterMode(ArcAndVertexFilterMode value)
关于弧段求交及过滤模式的介绍,请参见 setLinesIntersected
方法。
value
- 弧段求交的过滤模式。Copyright © 2021–2024 SuperMap. All rights reserved.