类 NetworkBuilder
- java.lang.Object
-
- com.supermap.analyst.networkanalyst.NetworkBuilder
-
public class NetworkBuilder extends Object
网络建模类。该类是网络分析的建模工具,目前提供根据单个线数据集或多个线和点数据集构建网络数据集,根据设施网络分析的对象创建设施网络流向和创建设施网络等级,以及创建转向表等功能。
- 构建网络数据集
- 通过单个线数据集构建(参见
buildNetwork
方法); - 通过多个线数据集和点数据集构建(参见
buildNetwork
方法); - 通过单个线数据集和点数据集及已有的拓扑信息字段构建(参见
buildNetwork
方法)。 - 弧段 ID 字段(SMEDGEID):用于唯一标识弧段;
- 弧段的起始结点 ID 字段(SMFNODE)和终止结点 ID 字段(SMTNODE):用以描述资源流动的方向性;
- 正向阻力字段(SMRESISTANCEA)和反向阻力字段(SMRESISTANCEB):用以描述资源流动的通畅性,初始值均为 1;
- 拓扑错误类型字段(SMTOPOERROR):记录检查出的拓扑错误的类型。0 表示无错误,1 表示该弧段的起始结点是悬结点,2 表示该弧段的终止结点是悬结点,3 表示该弧段的起始和终止结点均为悬结点。
- 结点 ID 字段(SMEDGEID):用于唯一标识结点。
- 为网络数据集创建流向和等级
- 创建转向表
网络数据集是进行网络分析的数据基础。网络数据集由两个子数据集(一个线数据集和一个点数据集)构成,分别存储了网络模型的弧段和结点,并且描述了弧段与弧段、弧段与结点、结点与结点间的空间拓扑关系。
本类提供了三个重载方法用于构建网络数据集:
通过前两种方式生成的网络数据集的属性表中包含了以下必要字段:
弧段属性表:
结点属性表:
除构建时系统自动生成的字段外,还可以指定原线和点数据集的一些非系统字段作为保留字段。
注意:通过第三种方式构建的网络数据集中,虽然也包含以上系统字段,但字段值是无效的。构建时所指定的源数据集中已有的拓扑信息字段,会保留到结果网络数据集中,作为网络数据集的拓扑信息字段。
设施网络模型的特点是具有方向,即介质(水流、电流等)会根据网络本身的规则在网络中流动。因此,在进行设施网络分析前必须为网络数据集创建流向。具体介绍请参见
buildFacilityNetworkDirections
方法。如果用于设施分析的网络数据集存在等级,那么就需要在建立流向的基础上,使用
buildFacilityNetworkHierarchies
方法再为网络数据集建立等级。转向表用于描述完成转弯(即从一个弧段经过中间结点抵达另一个邻接弧段)所需的花费,用于相关的交通网络分析中。
createTurnTable
方法可根据网络数据集来创建转向表。
-
-
方法概要
所有方法 静态方法 具体方法 已过时的方法 限定符和类型 方法和说明 static void
addSteppedListener(SteppedListener l)
添加一个进度条事件(SteppedEvent
)的监听器。static boolean
appendToNetwork(DatasetVector networkDataset, DatasetVector[] datasets)
已过时。此方法已废弃,请使用支持进度监听的新方法NetworkBuilder.appendToNetwork(DatasetVector, DatasetVector[], SteppedListener...)
替换。static boolean
appendToNetwork(DatasetVector networkDataset, DatasetVector[] datasets, SteppedListener... listeners)
向已有的网络数据集追加数据,可以追加点、线或网络。static boolean
buildFacilityNetworkDirections(FacilityAnalystSetting facilityAnalystSetting, int[] sourceIDs, int[] sinkIDs, String weightName, String nodeTypeField)
根据指定网络数据集中源与汇的位置,为网络数据集创建流向。static boolean
buildFacilityNetworkDirections(FacilityAnalystSetting facilityAnalystSetting, int[] sourceIDs, int[] sinkIDs, String weightName, String nodeTypeField, SteppedListener... listeners)
创建设施网络流向,写入流向字段值, 流向字段即facilityAnalystSetting的DirectionField设置的属性static boolean
buildFacilityNetworkHierarchies(FacilityAnalystSetting facilityAnalystSetting, int[] sourceIDs, int[] sinkIDs, String weightName, String hierarchyField, boolean isLoopValid)
为具有流向的网络数据集创建等级,并在指定的等级字段中写入网络数据集的等级信息。static DatasetVector
buildNetwork(DatasetVector[] lineDatasets, DatasetVector[] pointDatasets, Datasource outputDatasource, String networkDatasetName, NetworkSplitMode networkSplitMode, double tolerance)
已过时。此方法已废弃,请使用支持进度监听的新方法NetworkBuilder.buildNetwork(DatasetVector[], DatasetVector[], String[], String[], Datasource, String, NetworkSplitMode, double, SteppedListener...)
替换。 通过线数据集数组和点数据集数组构建网络数据集。static DatasetVector
buildNetwork(DatasetVector[] lineDatasets, DatasetVector[] pointDatasets, String[] lineFieldNames, String[] pointFieldNames, Datasource outputDatasource, String networkDatasetName, NetworkSplitMode networkSplitMode, double tolerance)
static DatasetVector
buildNetwork(DatasetVector[] lineDatasets, DatasetVector[] pointDatasets, String[] lineFieldNames, String[] pointFieldNames, Datasource outputDatasource, String networkDatasetName, NetworkSplitMode networkSplitMode, double tolerance, SteppedListener... listeners)
通过线数据集数组和点数据集数组(可选)构建网络数据集,可以设置保存的非系统字段及打断模式。static DatasetVector
buildNetwork(DatasetVector line, DatasetVector point, String edgeIDField, String fromNodeField, String toNodeField, String nodeIDField, Datasource outputDatasource, String networkDatasetName)
static DatasetVector
buildNetwork(DatasetVector line, DatasetVector point, String edgeIDField, String fromNodeField, String toNodeField, String nodeIDField, Datasource outputDatasource, String networkDatasetName, SteppedListener... listeners)
根据点、线数据及其已有的表达弧段结点拓扑关系的字段,构建网络数据集。static DatasetVector
buildNetwork(DatasetVector lineDataset, Datasource outputDatasource, String networkDatasetName)
已过时。此方法已废弃,请使用支持进度监听的新方法NetworkBuilder.buildNetwork(DatasetVector[], DatasetVector[], String[], String[], Datasource, String, NetworkSplitMode, double, SteppedListener...)
替换。 通过指定的线数据集、数据源和数据集名称来构建网络模型数据集。static DatasetVector
buildNetwork(DatasetVector lineDataset, String[] lineFieldNames, Datasource outputDatasource, String networkDatasetName)
已过时。此方法已废弃,请使用支持进度监听的新方法NetworkBuilder.buildNetwork(DatasetVector, String[], Datasource, String, SteppedListener...)
替换。static DatasetVector
buildNetwork(DatasetVector lineDataset, String[] lineFieldNames, Datasource outputDatasource, String networkDatasetName, SteppedListener... listeners)
通过线数据集构建网络数据集,可以设置保存的非系统字段。static NetworkCheckResult
check(NetworkCheckParameter parameter, SteppedListener... listeners)
对交通/设施网络数据集和转向表进行数据检查,返回交通/设施网络分析数据检查结果对象。static DatasetVector
createTurnTable(DatasetVector networkDataset, QueryParameter queryParameter, Datasource outputDatasource, String outputDatasetName)
创建转向表数据集。static boolean
fixRingEdgeErrors(DatasetVector networkDataset, Collection<Integer> errorIDs)
自动修复环形数据。static boolean
fixRingEdgeErrors(DatasetVector networkDataset, Collection<Integer> errorIDs, String edgeIDField, String fromNodeIDField, String toNodeIDField, String nodeIDField)
自动修复环形数据。static void
removeSteppedListener(SteppedListener l)
移除一个进度条事件(SteppedEvent
)的监听器。
-
-
-
方法详细资料
-
buildNetwork
@Deprecated public static DatasetVector buildNetwork(DatasetVector lineDataset, Datasource outputDatasource, String networkDatasetName)
已过时。 此方法已废弃,请使用支持进度监听的新方法NetworkBuilder.buildNetwork(DatasetVector[], DatasetVector[], String[], String[], Datasource, String, NetworkSplitMode, double, SteppedListener...)
替换。 通过指定的线数据集、数据源和数据集名称来构建网络模型数据集。- 参数:
lineDataset
- 指定的线数据集。outputDatasource
- 输出数据源。networkDatasetName
- 输出的网络模型数据集的名称。- 返回:
- 新构建的网络模型数据集,矢量数据集类型。
- 示范代码:
- 以下代码示范了如何通过指定的线数据集、数据源和数据集名称来构建网络模型数据集。
public void BuildNetwork1(DatasetVector lineDataset, Datasource outputDatasource) { //返回一个合法的名称作为网络模型数据集的名称 String networkName = outputDatasource.getDatasets().getAvailableDatasetName("BusNet"); //构建网络模型数据集 DatasetVector datasetNet = NetworkBuilder.buildNetwork(lineDataset, outputDatasource, networkName); }
-
buildNetwork
@Deprecated public static DatasetVector buildNetwork(DatasetVector[] lineDatasets, DatasetVector[] pointDatasets, Datasource outputDatasource, String networkDatasetName, NetworkSplitMode networkSplitMode, double tolerance)
已过时。 此方法已废弃,请使用支持进度监听的新方法NetworkBuilder.buildNetwork(DatasetVector[], DatasetVector[], String[], String[], Datasource, String, NetworkSplitMode, double, SteppedListener...)
替换。 通过线数据集数组和点数据集数组构建网络数据集。- 参数:
lineDatasets
- 指定的线数据集数组。pointDatasets
- 指定的点数据集数组。outputDatasource
- 指定的输出数据源。networkDatasetName
- 指定输出的网络数据集的名称。networkSplitMode
- 指定的打断模式。详细信息请参见NetworkSplitMode
类。tolerance
- 指定容限值用于确定点数据集中的点是否可以处理为网络上的结点。- 返回:
- 新构建的网络数据集,矢量数据集类型。
- 示范代码:
- 以下代码示范了如何利用多个线数据集和点数据集构建网络数据集。
public void BuildNetwork(DatasetVector[] lineDatasets,DatasetVector[] pointDatasets,Datasource outputDatasource) { //返回一个合法的名称作为网络模型数据集的名称 String networkName = outputDatasource.getDatasets().getAvailableDatasetName("buildNetwork"); //构建网络模型数据集 DatasetVector datasetNet = NetworkBuilder.buildNetwork(lineDatasets, pointDatasets, outputDatasource, networkName, NetworkSplitMode.NONE, 0.5); }
-
buildNetwork
public static DatasetVector buildNetwork(DatasetVector line, DatasetVector point, String edgeIDField, String fromNodeField, String toNodeField, String nodeIDField, Datasource outputDatasource, String networkDatasetName, SteppedListener... listeners)
根据点、线数据及其已有的表达弧段结点拓扑关系的字段,构建网络数据集。当已有的线、点数据集中的线、点对象分别对应着待构建网络的弧段和结点,并具有描述二者空间拓扑关系的信息,即线数据集含有弧段 ID、弧段起始结点 ID 和终止结点 ID 字段,点数据集含有点对象的结点 ID 字段时,可以采用本方法构建三维网络数据集。
使用此方式构建网络数据集成功后,结果对象数与源数据的对象数一致,即线数据中一个线对象作为一个弧段写入,点数据中一个点对象作为一个结点写入,并且保留点、线数据集的所有非系统字段到结果数据集中。
例如,对于用于建立管网而采集的管线、管点数据,管线和管点均使用唯一固定编码来标识。管网的特点之一是管点只位于管线的两端,因此管点对应了待构建管网的所有结点,管线对应了待构建管网的所有弧段,不需要在管线与管线相交处打断。在管线数据中,记录了管线对象两端的管点信息,即起始管点编码和终止管点编码,也就是说管线和管点数据中已经蕴含了二者空间拓扑关系的信息,因此适合使用此方法构建网络数据集。
注意,使用此方式构建的网络数据集的弧段 ID、弧段起始结点 ID、弧段终止结点 ID 和结点 ID 字段即为调用此方法时指定的字段,而不再是 SmEdgeID、SmFNode、SmTNode、SmNodeID 等系统字段(设定的字段类型为文本型除外)。
- 参数:
line
- 指定的用于构建网络数据集的线数据集。point
- 指定的用于构建网络数据集的点数据集。edgeIDField
- 指定的线数据集中表示弧段 ID 的字段。如果指定为 null 或空字符串,或指定的字段不存在,则自动使用 SMID 作为弧段 ID。支持 16 位整型、32 位整型和文本字段。当指定字段为文本类型时,弧段ID还是以系统字段SmEdgeID为准,最好是通过 getFieldNameBySign 获取。fromNodeField
- 指定的线数据集中表示弧段的起始结点 ID 的字段。支持 16 位整型、32 位整型和文本字段。当指定字段为文本类型时,弧段的起始结点 ID还是以系统字段SmFNode为准,最好是通过 getFieldNameBySign 获取。toNodeField
- 指定的线数据集中表示弧段的终止结点 ID 的字段。支持 16 位整型、32 位整型和文本字段。当指定字段为文本类型时,弧段的终止结点 ID还是以系统字段SmTNode为准,最好是通过 getFieldNameBySign 获取。nodeIDField
- 指定的点数据集中表示结点 ID 的字段。支持 16 位整型、32 位整型和文本字段。当指定字段为文本类型时,结点 ID还是以系统字段SmNodeID为准,最好是通过 getFieldNameBySign 获取。outputDatasource
- 指定的用于存储结果数据集的数据源。networkDatasetName
- 指定的结果网络数据集的名称。listeners
- 用于接收进度条事件的监听器。- 返回:
- 构建的网络数据集。
-
buildNetwork
@Deprecated public static DatasetVector buildNetwork(DatasetVector line, DatasetVector point, String edgeIDField, String fromNodeField, String toNodeField, String nodeIDField, Datasource outputDatasource, String networkDatasetName)
已过时。 此方法已废弃,请使用支持进度监听的新方法NetworkBuilder.buildNetwork(DatasetVector, DatasetVector, String, String, String, String, Datasource, String, SteppedListener...)
替换。根据点、线数据及其已有的表达弧段结点拓扑关系的字段,构建网络数据集。当已有的线、点数据集中的线、点对象分别对应着待构建网络的弧段和结点,并具有描述二者空间拓扑关系的信息,即线数据集含有弧段 ID、弧段起始结点 ID 和终止结点 ID 字段,点数据集含有点对象的结点 ID 字段时,可以采用本方法构建三维网络数据集。
使用此方式构建网络数据集成功后,结果对象数与源数据的对象数一致,即线数据中一个线对象作为一个弧段写入,点数据中一个点对象作为一个结点写入,并且保留点、线数据集的所有非系统字段到结果数据集中。
例如,对于用于建立管网而采集的管线、管点数据,管线和管点均使用唯一固定编码来标识。管网的特点之一是管点只位于管线的两端,因此管点对应了待构建管网的所有结点,管线对应了待构建管网的所有弧段,不需要在管线与管线相交处打断。在管线数据中,记录了管线对象两端的管点信息,即起始管点编码和终止管点编码,也就是说管线和管点数据中已经蕴含了二者空间拓扑关系的信息,因此适合使用此方法构建网络数据集。
注意,使用此方式构建的网络数据集的弧段 ID、弧段起始结点 ID、弧段终止结点 ID 和结点 ID 字段即为调用此方法时指定的字段,而不再是 SmEdgeID、SmFNode、SmTNode、SmNodeID 等系统字段(设定的字段类型为文本型除外)。
- 参数:
line
- 指定的用于构建网络数据集的线数据集。point
- 指定的用于构建网络数据集的点数据集。edgeIDField
- 指定的线数据集中表示弧段 ID 的字段。如果指定为 null 或空字符串,或指定的字段不存在,则自动使用 SMID 作为弧段 ID。支持 16 位整型、32 位整型和文本字段。当指定字段为文本类型时,弧段ID还是以系统字段SmEdgeID为准,最好是通过 getFieldNameBySign 获取。fromNodeField
- 指定的线数据集中表示弧段的起始结点 ID 的字段。支持 16 位整型、32 位整型和文本字段。当指定字段为文本类型时,弧段的起始结点 ID还是以系统字段SmFNode为准,最好是通过 getFieldNameBySign 获取。toNodeField
- 指定的线数据集中表示弧段的终止结点 ID 的字段。支持 16 位整型、32 位整型和文本字段。当指定字段为文本类型时,弧段的终止结点 ID还是以系统字段SmTNode为准,最好是通过 getFieldNameBySign 获取。nodeIDField
- 指定的点数据集中表示结点 ID 的字段。支持 16 位整型、32 位整型和文本字段。当指定字段为文本类型时,结点 ID还是以系统字段SmNodeID为准,最好是通过 getFieldNameBySign 获取。outputDatasource
- 指定的用于存储结果数据集的数据源。networkDatasetName
- 指定的结果网络数据集的名称。- 返回:
- 构建的网络数据集。
-
buildFacilityNetworkDirections
public static boolean buildFacilityNetworkDirections(FacilityAnalystSetting facilityAnalystSetting, int[] sourceIDs, int[] sinkIDs, String weightName, String nodeTypeField, SteppedListener... listeners)
创建设施网络流向,写入流向字段值, 流向字段即facilityAnalystSetting的DirectionField设置的属性- 参数:
facilityAnalystSetting
- FacilityAnalystSetting 设施网络分析环境设置对象sourceIDs
- int[] 源ID数组sinkIDs
- int[] 交汇ID数组weightName
- String 权值字段信息名称nodeTypeField
- String 节点类型字段名称,节点类型分为源节点、交汇节点、普通节点,该字段是网络节点数据集中的字段,如果不存在则创建该字段- 返回:
- boolean
-
buildFacilityNetworkDirections
public static boolean buildFacilityNetworkDirections(FacilityAnalystSetting facilityAnalystSetting, int[] sourceIDs, int[] sinkIDs, String weightName, String nodeTypeField)
根据指定网络数据集中源与汇的位置,为网络数据集创建流向。创建流向以后的网络数据集才可以进行各种设施网络分析。设施网络是具有方向的网络,因此,在创建网络数据集之后,必须为其创建流向,才能够用于进行各种设施网络路径分析、连通性分析、上下游追踪等。
流向是指网络中资源流动的方向。网络中的流向由源和汇决定:资源总是从源点流出,流向汇点。该方法通过给定的源和汇,以及设施网络分析参数设置为三维网络数据集创建流向。创建流向成功后,会在网络数据集中写入两方面的信息:流向和结点类型。
- 流向
- 结点类型
流向信息将写入网络数据集的子线数据集的流向字段中,该字段由
FacilityAnalystSetting
类的setDirectionField
方法设置,如果不存在则创建该字段。流向字段的值共有四个:0,1,2,3,其含义如下图所示。以线段 AB 为例:
0 代表流向与数字化方向相同。线段 AB 的数字化方向为 A-->B,且 A 为源点,因此 AB 的流向为从 A 流到 B,即与其数字化方向相同。
1 代表流向与数字化方向相反。线段 AB 的数字化方向为 A-->B,且 A 为汇点,因此 AB 的流向为从 B 流向 A,即与其数字化方向相反。
2 代表不确定流向。A 和 B 均为源点,则资源既可以从 A 流向 B,又可以从 B 流向 A,这就构成了一个不确定流向。
3 代表不连通边,也称未初始化方向。线段 AB 与源点、汇点所在的结点不连通,则称为不连通边。
注:
数字化方向是对象绘制时的方向,即对象的节点序列的方向。
建立流向后,系统还会将结点类型信息写入指定的网络数据集的子点数据集的结点类型字段中。结点类型分为源点、汇点和普通结点。下表列出了结点类型字段的值及其含义:
- 参数:
facilityAnalystSetting
- 指定的设施网络分析环境设置对象。注意:在构建设施网络流向时,支持设置参数 facilityAnalystSetting 的障碍弧段(BarrierEdges)和障碍结点(BarrierNodes)属性。sourceIDs
- 源对应的网络结点 ID 数组。源与汇都是用来建立网络数据集的流向的。网络数据集的流向与源和汇的位置决定。sinkIDs
- 交汇 ID 数组。汇对应的网络结点 ID 数组。源与汇都是用来建立网络数据集的流向的。网络数据集的流向与源和汇的位置决定。weightName
- 给定的权值字段信息对象的名称,即 WeightFieldInfo.getName() 方法的返回值。nodeTypeField
- 结点类型字段名称,结点类型分为源结点、交汇结点、普通结点。该字段是网络结点数据集中的字段,如果不存在则创建该字段。- 返回:
- 如果创建成功返回 true,否则 false。
- 示范代码:
- 以下代码示范了如何基于网络数据集构建能够用于设施网络分析的网络数据集,即为网络数据集建立流向和等级。下面函数中操作的网络数据集为安装目录\SampleData\City\下的 Changchun.udb 数据源中的名为 RoadNet 的网络数据集。
public void BuildNetworkForFacilityAnalyst(DatasetVector networkDataset) { //设置用于建立流向和等级的设施网络分析环境 FacilityAnalystSetting facilityAnalystSetting = new FacilityAnalystSetting(); facilityAnalystSetting.setNetworkDataset ( networkDataset); facilityAnalystSetting.setDirectionField ("Direction"); facilityAnalystSetting.setEdgeIDField ("SmID"); facilityAnalystSetting.setNodeIDField ("SmNodeID"); facilityAnalystSetting.setFNodeIDField ("SmFNode"); facilityAnalystSetting.setTNodeIDField ("SmTNode"); facilityAnalystSetting.setTolerance (0.0015); WeightFieldInfo weightFieldInfo = new WeightFieldInfo(); weightFieldInfo.setName ("Length"); weightFieldInfo.setFTWeightField ("SmLength"); weightFieldInfo.setTFWeightField ("SmLength"); WeightFieldInfos weightFieldInfos = new WeightFieldInfos(); weightFieldInfos.add(weightFieldInfo); facilityAnalystSetting.setWeightFieldInfos(weightFieldInfos); //指定用来建立网络流向的源所对应的网络结点 int[] sourceIDs = new int[] {3534}; //调用方法为网络数据集建立流向 boolean isDirectionSuccessful = NetworkBuilder.buildFacilityNetworkDirections(facilityAnalystSetting, sourceIDs, null, "Length", "NodeType"); //在建立流向的基础上为网络数据集建立等级 boolean isHierarchiesSuccessful = NetworkBuilder.buildFacilityNetworkHierarchies(facilityAnalystSetting,sourceIDs, null,"Length","Grade",false); }
-
buildFacilityNetworkHierarchies
public static boolean buildFacilityNetworkHierarchies(FacilityAnalystSetting facilityAnalystSetting, int[] sourceIDs, int[] sinkIDs, String weightName, String hierarchyField, boolean isLoopValid)
为具有流向的网络数据集创建等级,并在指定的等级字段中写入网络数据集的等级信息。为网络数据集建立等级,首先,该网络数据集必须已经建立了流向,即建立等级的方法所操作的网络数据集必须具有流向信息,也就是说等级建立方法中的
FacilityAnalystSetting
类型的参数对象中的网络数据集必须指定为已经建立了流向的网络数据集。等级字段中以整数的形式记录等级,数值从 1 开始,等级越高数值越小,如河流建立等级后,一级河流的等级记录为 1,二级河流的等级记录为 2,以此类推。注意,值为 0 表示未能确定等级,通常是由于该弧段为不连通弧段导致。
- 参数:
facilityAnalystSetting
- 设施网络分析环境设置对象。注意:在构建设施网络等级时,支持设置参数 facilityAnalystSetting 的障碍弧段(BarrierEdges)和障碍结点(BarrierNodes)属性。sourceIDs
- 源 ID 数组。sinkIDs
- 交汇 ID 数组。weightName
- 给定的权值字段信息对象的名称,即WeightFieldInfo.getName()
方法的返回值。hierarchyField
- 给定的等级字段名称。isLoopValid
- 指定环路是否有效。当该参数为 true 时,环路有效;而当参数为 false 时,环路无效。- 返回:
- 如果创建成功返回 true,否则 false。
-
createTurnTable
public static DatasetVector createTurnTable(DatasetVector networkDataset, QueryParameter queryParameter, Datasource outputDatasource, String outputDatasetName)
创建转向表数据集。在交通网络分析中,可以使用转向表存储完成转弯需要的花费。转弯是指从一个弧段经过中间结点抵达另外一个邻接弧段的过程。转弯耗费即完成转弯所需要的花费。
转向表是一个纯属性表数据集,每一条记录代表一个转弯,一般有起始弧段字段(FromEdgeID)、终止弧段字段(ToEdgeID)、结点标识字段(NodeID)和转弯耗费字段(TurnCost)四个字段,这些字段与弧段、结点中的字段相关联,表中的每条记录表示一种通过路口的方式以及所需要的耗费。转弯耗费通常是有方向性的,转弯的负耗费值一般为禁止转弯(不通行)。
例如,在对道路进行网络分析的时候,我们经常会遇到十字路口、三岔口等情况,可以通过转向耗费为转弯方式赋予权值,为如何转向提供一定的参考。如某些道路车多或道路状况差,或转向该路段的红灯等待时间较长,花费就应较高一些,而某些道路不通行禁止转入等,可将花费设置为负值。如下图所示,左面为一个十字路口的示意图,右面的表格为该十字路口所对应的转向表,转向表中记录了402结点所在的十字口处车辆的所有转向方式(共16种)和转弯所需的耗费等信息。
注意,使用该方法为网络数据集创建的转向表,其转弯花费(TurnCost 字段)均为 0。用户可根据应用的实际情况对转向表的权值进行修改。对于禁止通行的转弯需要设置权值为负数。
- 参数:
networkDataset
- 指定的网络数据集。queryParameter
- 指定的查询参数。outputDatasource
- 指定的输出数据源。outputDatasetName
- 输出数据集的名称。- 返回:
- 转向表数据集。
-
buildNetwork
public static DatasetVector buildNetwork(DatasetVector lineDataset, String[] lineFieldNames, Datasource outputDatasource, String networkDatasetName, SteppedListener... listeners)
通过线数据集构建网络数据集,可以设置保存的非系统字段。通过此方法构建网络数据集时,会在线与线相交处打断。
- 参数:
lineDataset
- 指定的用于构建网络数据集的线数据集。lineFieldNames
- 指定的结果网络数据集中需要保存的线数据集非系统字段名称的数组。outputDatasource
- 指定的用于存储结果数据集的数据源。networkDatasetName
- 指定的结果网络数据集的名称。listeners
- 用于接收进度条事件的监听器。- 返回:
- 构建的网络数据集。
-
buildNetwork
@Deprecated public static DatasetVector buildNetwork(DatasetVector lineDataset, String[] lineFieldNames, Datasource outputDatasource, String networkDatasetName)
已过时。 此方法已废弃,请使用支持进度监听的新方法NetworkBuilder.buildNetwork(DatasetVector, String[], Datasource, String, SteppedListener...)
替换。通过线数据集构建网络数据集,可以设置保存的非系统字段。通过此方法构建网络数据集时,会在线与线相交处打断。
- 参数:
lineDataset
- 指定的用于构建网络数据集的线数据集。lineFieldNames
- 指定的结果网络数据集中需要保存的线数据集非系统字段名称的数组。outputDatasource
- 指定的用于存储结果数据集的数据源。networkDatasetName
- 指定的结果网络数据集的名称。- 返回:
- 构建的网络数据集。
-
buildNetwork
public static DatasetVector buildNetwork(DatasetVector[] lineDatasets, DatasetVector[] pointDatasets, String[] lineFieldNames, String[] pointFieldNames, Datasource outputDatasource, String networkDatasetName, NetworkSplitMode networkSplitMode, double tolerance, SteppedListener... listeners)
通过线数据集数组和点数据集数组(可选)构建网络数据集,可以设置保存的非系统字段及打断模式。注意:
- 线数据集数组必须至少包含一个元素,而点数据集数组是可选的,如果将 pointDatasets 指定为一个空数组,此时,将通过多个线数据集来构建网络数据集。显然,此时无论采用哪种打断方式,都只会在线线相交处打断。
- 参与构建的点数据集的点对象不是全部都会添加到网络数据集中,只有在线上的点对象是有效的参与点(点线距离在指定的容限范围内);
- 指定了点数据集的保留字段后,只有点数据集的有效参与点的这些字段的值将赋给对应的网络结点,其他结点的相应字段信息为0或空。
- 参数:
lineDatasets
- 指定的用于构建网络数据集的线数据集数组。pointDatasets
- 指定的用于构建网络数据集的点数据集数组。可选。lineFieldNames
- 指定的结果网络数据集中需要保存的线数据集数组中的非系统字段名称的数组。pointFieldNames
- 指定的结果网络数据集中需要保存的点数据集数组中的非系统字段名称的数组。outputDatasource
- 指定的用于存储结果数据集的数据源。networkDatasetName
- 指定的结果网络数据集的名称。networkSplitMode
- 指定的打断模式。tolerance
- 指定的用于判定点是否为网络数据集上的节点的容限值(也可理解为打断容限)。当打断模式为拓扑处理方式(即NetworkSplitMode.TOPOLOGY_PROCESSING
)时,该值即为进行拓扑处理操作所使用的容限值。单位与用于构建网络数据集的点、线数据集的单位相同。listeners
- 用于接收进度条事件的监听器。- 返回:
- 构建的网络数据集。
- 抛出:
NullPointerException
- 如果 lineDatasets 为 null 或长度为 0NullPointerException
- 如果 tolerance 小于 0
-
buildNetwork
@Deprecated public static DatasetVector buildNetwork(DatasetVector[] lineDatasets, DatasetVector[] pointDatasets, String[] lineFieldNames, String[] pointFieldNames, Datasource outputDatasource, String networkDatasetName, NetworkSplitMode networkSplitMode, double tolerance)
已过时。 此方法已废弃,请使用支持进度监听的新方法NetworkBuilder.buildNetwork(DatasetVector[], DatasetVector[], String[], String[], Datasource, String, NetworkSplitMode, double, SteppedListener...)
替换。通过线数据集数组和点数据集数组(可选)构建网络数据集,可以设置保存的非系统字段及打断模式。注意:
- 线数据集数组必须至少包含一个元素,而点数据集数组是可选的,如果将 pointDatasets 指定为一个空数组,此时,将通过多个线数据集来构建网络数据集。显然,此时无论采用哪种打断方式,都只会在线线相交处打断。
- 参与构建的点数据集的点对象不是全部都会添加到网络数据集中,只有在线上的点对象是有效的参与点(点线距离在指定的容限范围内);
- 指定了点数据集的保留字段后,只有点数据集的有效参与点的这些字段的值将赋给对应的网络结点,其他结点的相应字段信息为0或空。
- 参数:
lineDatasets
- 指定的用于构建网络数据集的线数据集数组。pointDatasets
- 指定的用于构建网络数据集的点数据集数组。可选。lineFieldNames
- 指定的结果网络数据集中需要保存的线数据集数组中的非系统字段名称的数组。pointFieldNames
- 指定的结果网络数据集中需要保存的点数据集数组中的非系统字段名称的数组。outputDatasource
- 指定的用于存储结果数据集的数据源。networkDatasetName
- 指定的结果网络数据集的名称。networkSplitMode
- 指定的打断模式。tolerance
- 指定的用于判定点是否为网络数据集上的节点的容限值(也可理解为打断容限)。当打断模式为拓扑处理方式(即NetworkSplitMode.TOPOLOGY_PROCESSING
)时,该值即为进行拓扑处理操作所使用的容限值。单位与用于构建网络数据集的点、线数据集的单位相同。- 返回:
- 构建的网络数据集。
- 抛出:
NullPointerException
- 如果 lineDatasets 为 null 或长度为 0NullPointerException
- 如果 tolerance 小于 0
-
appendToNetwork
public static boolean appendToNetwork(DatasetVector networkDataset, DatasetVector[] datasets, SteppedListener... listeners)
向已有的网络数据集追加数据,可以追加点、线或网络。网络数据集一般由线数据(以及点数据)构建而成。一旦构建网络的数据发生变化,原有网络就会过时,如果不及时更新网络,就可能影响分析结果的正确性。通过将新增数据追加到原有网络的方式,可以不必重新构建网络而得到较新的网络。如下图所示,某区域新建了若干道路(红色线),将这些道路抽象为线数据,追加到扩建之前所构建的网络上,从而更新了路网。
此方法支持向已有网络追加点、线以及网络数据集,并且可以同时追加多个相同或不同类型的数据集,例如,同时追加一份点数据和两份线数据。注意,如果追加的数据具有多种类型,系统将按照先追加网络,再追加线,最后追加点的顺序来依次追加。下面分别介绍向网络中追加点、线和网络的方式和规则。
- 向已有网络追加点
- 待追加的点必须在已有网络的弧段上。追加后,在弧段上该点位置处增加新的结点,该弧段将自动在新增结点处断开为两条弧段,如下图中的点 a、点 d。如果待追加的点不在网络上,即不在弧段上,也不与结点重叠,将被忽略,不会追加到网络上,因为孤立结点在网络中并无地学意义。下图中的点 b 就属于这种情况。
- 如果待追加的点与已有网络的结点重叠,则将待追加点与重叠结点合并,如下图中的点 c。
- 向已有网络追加线
- 待追加的线不能存在与已有网络弧段重叠或部分重叠,否则会导致追加后的网络存在错误。
- 向已有网络追加另一网络
点被追加到已有网络后,将成为网络中新的结点。向已有网络追加点时,需要注意以下要点:
线被追加到已有网络后,将成为网络中新的弧段,并且在线的端点、与其他线(或弧段)的交点处打断并增加新的结点。向已有网络追加点时,需要注意以下要点:
将一个网络追加到已有网络后,二者将成为一个网络,如下图所示。注意,与追加线相同,向已有网络中追加网络时,需要确保这两个网络不存在弧段的重叠或部分重叠,否则会导致追加后的网络存在错误。
待追加网络与被追加网络叠加出现弧段相交的情形时,在相交处会添加新的结点,从而建立新的拓扑关系。
网络的连通性不影响网络的追加。如下例中,将待追加网络追加到原始网络后,结果是一个包含两个子网的网络数据集,并且两子网不连通。
注意:
- 该方法将直接修改被追加的网络数据集,不会生成新的网络数据集。
- 待追加的点、线或网络数据集必须与被追加的网络数据集具有相同的坐标系。
- 待追加的点、线或 网络数据集中,如果存在与网络数据集相同(名称和类型都必须相同)的属性字段,那么这些属性值会自动保留到追加后的网络数据集中;如果不存在相同的字段,则不保留。其中,点数据集、网络数据集的结点数据集的属性,保留到被追加网络的结点属性表中;线数据集的属性,保留到被追加网络的弧段属性表中。
- 参数:
networkDataset
- 指定的被追加的网络数据集。datasets
- 指定的待追加的数据,可以是点、线或网络数据集。listeners
- 用于接收进度条事件的监听器。- 返回:
- 一个布尔值,指示是否追加成功。如果成功,返回 true,否则返回 false。
- 从以下版本开始:
- SuperMap iObjects Java 7.0.0
-
appendToNetwork
@Deprecated public static boolean appendToNetwork(DatasetVector networkDataset, DatasetVector[] datasets)
已过时。 此方法已废弃,请使用支持进度监听的新方法NetworkBuilder.appendToNetwork(DatasetVector, DatasetVector[], SteppedListener...)
替换。向已有的网络数据集追加数据,可以追加点、线或网络。网络数据集一般由线数据(以及点数据)构建而成。一旦构建网络的数据发生变化,原有网络就会过时,如果不及时更新网络,就可能影响分析结果的正确性。通过将新增数据追加到原有网络的方式,可以不必重新构建网络而得到较新的网络。如下图所示,某区域新建了若干道路(红色线),将这些道路抽象为线数据,追加到扩建之前所构建的网络上,从而更新了路网。
此方法支持向已有网络追加点、线以及网络数据集,并且可以同时追加多个相同或不同类型的数据集,例如,同时追加一份点数据和两份线数据。注意,如果追加的数据具有多种类型,系统将按照先追加网络,再追加线,最后追加点的顺序来依次追加。下面分别介绍向网络中追加点、线和网络的方式和规则。
- 向已有网络追加点
- 待追加的点必须在已有网络的弧段上。追加后,在弧段上该点位置处增加新的结点,该弧段将自动在新增结点处断开为两条弧段,如下图中的点 a、点 d。如果待追加的点不在网络上,即不在弧段上,也不与结点重叠,将被忽略,不会追加到网络上,因为孤立结点在网络中并无地学意义。下图中的点 b 就属于这种情况。
- 如果待追加的点与已有网络的结点重叠,则将待追加点与重叠结点合并,如下图中的点 c。
- 向已有网络追加线
- 待追加的线不能存在与已有网络弧段重叠或部分重叠,否则会导致追加后的网络存在错误。
- 向已有网络追加另一网络
点被追加到已有网络后,将成为网络中新的结点。向已有网络追加点时,需要注意以下要点:
线被追加到已有网络后,将成为网络中新的弧段,并且在线的端点、与其他线(或弧段)的交点处打断并增加新的结点。向已有网络追加点时,需要注意以下要点:
将一个网络追加到已有网络后,二者将成为一个网络,如下图所示。注意,与追加线相同,向已有网络中追加网络时,需要确保这两个网络不存在弧段的重叠或部分重叠,否则会导致追加后的网络存在错误。
待追加网络与被追加网络叠加出现弧段相交的情形时,在相交处会添加新的结点,从而建立新的拓扑关系。
网络的连通性不影响网络的追加。如下例中,将待追加网络追加到原始网络后,结果是一个包含两个子网的网络数据集,并且两子网不连通。
注意:
- 该方法将直接修改被追加的网络数据集,不会生成新的网络数据集。
- 待追加的点、线或网络数据集必须与被追加的网络数据集具有相同的坐标系。
- 待追加的点、线或 网络数据集中,如果存在与网络数据集相同(名称和类型都必须相同)的属性字段,那么这些属性值会自动保留到追加后的网络数据集中;如果不存在相同的字段,则不保留。其中,点数据集、网络数据集的结点数据集的属性,保留到被追加网络的结点属性表中;线数据集的属性,保留到被追加网络的弧段属性表中。
- 参数:
networkDataset
- 指定的被追加的网络数据集。datasets
- 指定的待追加的数据,可以是点、线或网络数据集。- 返回:
- 一个布尔值,指示是否追加成功。如果成功,返回 true,否则返回 false。
- 从以下版本开始:
- SuperMap iObjects Java 7.0.0
-
fixRingEdgeErrors
public static boolean fixRingEdgeErrors(DatasetVector networkDataset, Collection<Integer> errorIDs)
自动修复环形数据。环形数据即弧段首尾ID相等,该方法自动将环形数据进行修复,修复方式将线自动打断为两根弧段。但如果用户网络分析需要使用转向表,则有可能需要修改对应的转向表。
- 参数:
networkDataset
- 指定的网络数据集。errorIDs
- 错误结点ID。- 返回:
- 一个布尔值,表示是否修复成功。如果成功,返回 true,否则返回 false。
-
fixRingEdgeErrors
public static boolean fixRingEdgeErrors(DatasetVector networkDataset, Collection<Integer> errorIDs, String edgeIDField, String fromNodeIDField, String toNodeIDField, String nodeIDField)
自动修复环形数据。环形数据即弧段首尾ID相等,该方法自动将环形数据进行修复,修复方式将线自动打断为两根弧段。但如果用户网络分析需要使用转向表,则有可能需要修改对应的转向表。
- 参数:
networkDataset
- 指定的网络数据集。errorIDs
- 错误结点ID。edgeIDField
- 弧段 ID 字段。fromNodeIDField
- 起始结点 ID 字段。toNodeIDField
- 终止结点 ID 字段。nodeIDField
- 结点 ID 字段。- 返回:
- 一个布尔值,表示是否修复成功。如果成功,返回 true,否则返回 false。
-
check
public static NetworkCheckResult check(NetworkCheckParameter parameter, SteppedListener... listeners)
对交通/设施网络数据集和转向表进行数据检查,返回交通/设施网络分析数据检查结果对象。该方法用于对交通/设施网络数据集和转向表进行检查,给出错误信息,便于用户针对错误信息对数据进行修改,以避免由于数据错误导致交通网络分析错误。
注意,该方法需要在设置网络分析环境(
setAnalystSetting
方法)之后调用,但不需要加载网络模型(load
方法)。如果在网络分析环境(
TransportationAnalystSetting
)中没有指定转向表,则不会检查转向表。该方法返回一个网络分析数据检查结果(NetworkCheckResult)对象,通过该对象的
getArcErrorInfos
方法和getNodeErrorInfos
方法可以返回网络数据集的弧段错误信息和结点错误信息;通过getTurnErrorInfos
方法可以返回转向表的错误信息。错误信息分别存储在三个映射(HashMap)中,键代表错误弧段或结点的 SMID,值代表错误类型。错误类型以数字表示,代表的具体错误含义如下表所示。- 对网络数据集进行检查的结果错误类型如下表所示:
- 对转向表进行检查的结果错误类型如下表所示:
- 参数:
parameter
- 网络数据集检查参数。listeners
- 进度信息。- 返回:
- 交通/设施网络分析数据检查结果。
-
addSteppedListener
public static void addSteppedListener(SteppedListener l)
添加一个进度条事件(SteppedEvent
)的监听器。- 参数:
l
- 一个用于接收进度条事件的监听器。
-
removeSteppedListener
public static void removeSteppedListener(SteppedListener l)
移除一个进度条事件(SteppedEvent
)的监听器。- 参数:
l
- 一个用于接收进度条事件的监听器。
-
-
Copyright © 2021–2024 SuperMap. All rights reserved.