动态分段 |
精确的度量值,才能够保证事件被正确定位,因此精确的路由数据对动态分段是至关重要的。如果路由数据的刻度值可能不准确,或者需要更新路由数据的刻度值,我们可以通过使用可靠的参考点数据对路由数据的刻度值进行校准。尤其是在用这些刻度值连接大量的事件数据时,校准路由数据集更是必不可少的一项工作。
在介绍校准路由的实现过程前,首先来了解校准容限。当参考点到路由的最短距离小于给定的校准容限值时,我们就说该参考点在校准容限范围内。如图 7‑1中的参考点c2,它到路由的最短距离小于校准容限,则c2在校准容限范围内,同理可知c3不在校准容限范围内。
校准路由是读取参考点的刻度值信息来调整路由刻度值的过程:
1. 首先通过路由标识字段值将参考点与路由对应起来(参考点数据和路由数据各有一个路由标识字段,与路由数据路由ID相同的参考点,视为与路由对应的参考点);
2. 然后,当对应参考点落在路由上并与某一节点重合时,该节点的M值使用该参考点的M值;
3. 路由上未与对应参考点重叠的节点的M,使用位于校准容限范围内的参考点的M值插值获得。并且,这些位于校准容限内的参考点,在对应路由上的垂足位置生成新的节点,并将对应参考点的M值赋予该节点。如图 7‑1中的参考点c1、c2,其到路由的最短距离小于校准容限,因此会在路由上对应位置添加对应节点;
4. 位于校准容限范围之外的参考点将不参与校准。图 7‑1中的参考点c3在校准容限范围外,因此它不会参与校准,也不会在路由上生成新的节点。
|
图 7‑1 校准路由 |
SuperMap提供了两种校准模式:按距离校准和按刻度值校准。CalibrateMode枚举类型定义了这两种模式。使用按距离校准的方式可以得到单调的校准结果,即校准后路由的M值是递增或递减的;而按刻度值方式对路由进行校准的特点是,能够保持原始路由数据刻度值的变化规律(如不均匀的增加或减少),因此当被校准的路由的长度与刻度值的比值不同时,这种方法非常适用于对路由的刻度值进行微调。
按距离校准(CalibrateMode.ByDistance)
按距离校准是基于两点间的沿路由的距离来计算M值的。请结合图 7‑2和下面的文字来了解该模式如何对路由进行校准。
|
图 7‑2 按距离校准 |
校准前路由各节点的坐标和参考点坐标如表 7.1所示:
表 7.1 按照距离校准模式校准前的各点信息
校准前路由节点的坐标 |
校准前参考点的坐标 |
a1(0,5,0) |
c1(5,7.5,100) |
a2(10,10,20) |
c2(20,5,200) |
a3(30,0,55) |
c3(40,5,300) |
a4(50,10,65) |
c4(55,10,400) |
a5(60,10,80) |
|
校准步骤如下:
1. 对于节点a1,使用c1和c2来校准。首先计算c1与c2之间的距离d1,然后计算出校准率R1=d1/(200-100)。注意这里提到的距离都是指沿线距离。
2. 然后计算a1和c1间的距离d2,,那么有d2/(100-Ma1)=R1,则a1校准后的M值为100 - d2/R1;
3. 同理,使用c1和c2来校准a2。先计算c1与a2间的距离d3,然后计算校准率R2=d1/(200-100),那么有d3/(Ma2-100)=R1,则a2校准后的M值为:100+d3/R1;
4. 依次类推,使用c2和c3来校准a3,使用c3和c4来校准a4和a5。注意,校准率总是采样离被校准点最近的两个参考点来计算。
5. 校准后路由各节点的M值如图 7‑2下方所示。
按刻度值校准(CalibrateMode.ByMeasure)
按刻度值校准利用参考点对应路由上位置的刻度值来进行校准。当被校准的路由的长度与刻度值的比值不一致时,这种方法非常适用于对路由的刻度值进行微调。请结合图 7‑3和下面的文字来了解该模式如何对路由进行校准。
|
图 7‑3 按刻度值校准 |
校准前路由节点和参考点的坐标,及参考点在路由上对应的点的原M值如表 7.2所示:
表 7.2 按照刻度值校准模式校准前的各点的信息
校准前路由节点的坐标 |
校准前参考点的坐标 |
参考点对应点的M值 |
a1(0,5,0) |
c1(5,7.5,100) |
10 |
a2(10,10,20) |
c2(20,5,200) |
37.5 |
a3(30,0,55) |
c3(40,5,300) |
60 |
a4(50,10,65) |
c4(55,10,400) |
72.5 |
a5(60,10,80) |
|
|
校准步骤如下:
1. 使用参考点c1和c2来校准节点a1。首先计算M值校准率R1=(37.5-10)/(200-100),其中(37.5-10)称为c1和c2所在点在原来线上的线标差;
2. a1和c1之间准确的线标差为(10-0),那么有(10-0)/(100-Ma1)=R1,则a1点校准后的M值为100 - (10-0)/R1;
3. 同理,使用c1和c2来校准a2。首先计算校准率R2=(37.5-10)/(200-100),a2与c1之间准确的线标差为(20-10),那么有(20-10)/(Ma2-100)=R2,则a2点校准后的M值为100+(20-10)/R2;
4. 以此类推,依次校准其余节点:使用c1和c2校准a2,使用c2和c3校准a3,使用c3和c4校准a4和a5。注意,校准率总是取离被校准最近的两个参考点来计算;
5. 校准后路由各节点的M值如图 7‑3下方所示。
i注意 |
在了解了两种校准模式之后,不难推断,用于校准路由的参考点至少为2个,并且校准时,都采用离待校准节点最近的两个参考点来校准。 |
LinearReferencing类的CalibrateRoutes方法用于对路由数据集进行校准。
语法:
public static DatasetVector CalibrateRoutes( DatasetVector referenceLineM,
String routeIDField, DatasetVector calibratePointDataset, String calibrateRouteID,
String measureField, CalibrateOptions options, Datasource outputDatasource,
String outputDatasetName)
参数说明:
referenceLineM:指定的需要被校准的路由数据集。
routeIDField:指定的路由数据集中的路由标识字段。对于路由标识字段,支持的字段类型请参见表 6.2。如果设置的类型不被支持,会导致生成路由数据集失败。
calibratePointDataset:指定的用于校准路由的参考点数据集,该数据集中有表示刻度的字段。
calibrateRouteID:指定的参考点数据集中的路由标识字段。对于路由标识字段,支持的字段类型请参见表 6.2。如果设置的类型不被支持,会导致生成路由数据集失败。
measureField:指定的参考点数据集中用于表示刻度值的字段。支持的字段类型请参见表 6.2。如果设置的类型不被支持,会导致生成路由数据集失败。
options:指定的校准选项。
outputDatasource:指定的结果路由数据集所在的数据源。
outputDatasetName:指定的结果路由数据集的名称。
返回值说明:
校准之后的路由数据集。
调用CalibrateRoutes方法对路由数据集进行校准时,需要指定路由数据集及其路由标识字段,参考点数据集及其路由标识字段和刻度值字段,校准选项,以及结果数据集名称和目标数据源。校准选项(校正过程中涉及的一些参数)是通过CalibrateOptions实例对象来设置的,如表 7.3所示:
表 7.3 CalibrateOptions类的属性列表
类型 |
名称 |
描述 |
CalibrateMode |
RouteCalibrationMode |
获取或设置校准模式。默认为按距离校准模式(CalibrateMode.ByDistance)。 |
Double |
Tolerance |
获取或设置校准容限。当参考点到对应路由的垂距大于指定的校准容限时,该参考点将不参与校准路由。默认为1.0e-10。单位由ToleranceUnit决定。 |
Unit |
ToleranceUnit |
获取或设置校准容限的单位。用户可以自定义校准容限的单位,可以与数据集单位不一致,在使用校准容限时系统会自动将其与数据集单位进行换算。默认为米(Unit.Meter)。 |
Boolean |
RetainingAllRoutes |
获取或设置结果路由数据集中是否保留没有参考点经过的路由对象。没有参考点经过该路由,意味着该路由没有被校准。默认为true,即保留没有参考点经过的路由。 |
Boolean |
IgnoringGaps |
获取或设置是否忽略子对象之间的间隔。如果为true表示忽略子对象间隔,false表示不忽略。默认为true。 |
String |
ErrorInfoField |
获取或设置错误信息字段。路由校准完成后,该字段将自动添加到参考点数据集的属性表中,用于存储校准错误信息。 |
子对象之间的间隔(IgnoringGaps)
是否忽略子对象的间隔会影响刻度值的连续性,详细介绍请参见第4章基本概念。这里要强调的是,位于两个子对象之间且在校准容限范围之外的参考点是无效的,不能参与校准。
错误信息(ErrorInfoField)
校准过程中可能会校准不成功,系统会在校准完成后自动在结果路由数据集中根据用户指定的错误信息字段名称添加错误信息字段,包含如表 7.4所示的5种错误信息。字段值为空表示没有错误。
表 7.4 校准错误信息
序号 |
错误信息 |
说明 |
1 |
不是几何对象 |
获取该参考点的几何对象失败。 |
2 |
点没有对应的RouteID |
在被校准的路由数据中没有与该参考点路由ID相同的路由对象。 |
3 |
点没有在容限范围内 |
该参考点不在任何路由对象的容限范围内。 |
4 |
重复点 |
该参考点与其他参考点具有相同的空间位置。 |