com.supermap.analyst.networkanalyst
类 MapMatching
- java.lang.Object
-
- com.supermap.data.InternalHandle
-
- com.supermap.data.InternalHandleDisposable
-
- com.supermap.analyst.networkanalyst.MapMatching
-
- 所有已实现的接口:
- IDisposable
public class MapMatching extends com.supermap.data.InternalHandleDisposable
基于HMM(隐式马尔科夫链)的地图匹配。该方法是将轨迹点进行地图匹配。将轨迹点按照标识字段进行划分,按时间字段进行排序和分割轨迹,找到每条轨迹最可能的经过路线。目的是基于轨迹点还原真实路径。
-
-
构造器概要
构造器 构造器和说明 MapMatching()
构造一个新的地图匹配对象。
-
方法概要
所有方法 实例方法 具体方法 限定符和类型 方法和说明 DatasetVector
batchMatch(DatasetVector sourceDataset, String idField, String timeField, double splitTimeMilliseconds, Datasource outputDatasource, String outputDatasetName, String resultTrackIndexField)
对数据集进行地图匹配,结果保存为点数据。MapMatchingResult
batchMatch(List<TrackPoint> coordinates)
地图匹配结果。void
dispose()
double
getMaxLimitedSpeed()
返回最大限制速度。double
getMeasurementError()
返回轨迹点误差值。PathAnalystSetting
getPathAnalystSetting()
返回最佳路径分析参数。MapMatchingLikelyResult[]
match(TrackPoint coordinate, boolean isNewTrack)
实时地图匹配结果。MapMatching
setMaxLimitedSpeed(double value)
设置最大限制速度。MapMatching
setMeasurementError(double value)
设置轨迹点误差值。boolean
setPathAnalystSetting(PathAnalystSetting setting)
设置最佳路径分析参数。
-
-
-
方法详细资料
-
setPathAnalystSetting
public boolean setPathAnalystSetting(PathAnalystSetting setting)
设置最佳路径分析参数。- 参数:
setting
- 最佳路径分析参数设置。
-
getPathAnalystSetting
public PathAnalystSetting getPathAnalystSetting()
返回最佳路径分析参数。- 返回:
- 最佳路径分析参数。
-
setMeasurementError
public MapMatching setMeasurementError(double value)
设置轨迹点误差值。比如 GPS误差值,单位为米。如果轨迹点到最近道路的距离超出误差值,则认为轨迹点非法。所以,设定一个合理的误差值对地图匹配的结果有直接影响,如果得到的轨迹点精度高,设置 一个较小的值可以有效提升性能,例如,15米。默认值为 30米。- 参数:
value
- 轨迹点误差值。
-
getMeasurementError
public double getMeasurementError()
返回轨迹点误差值。- 返回:
- 轨迹点误差值。
-
getMaxLimitedSpeed
public double getMaxLimitedSpeed()
返回最大限制速度。- 返回:
- 最大限制速度。
-
setMaxLimitedSpeed
public MapMatching setMaxLimitedSpeed(double value)
设置最大限制速度。单位为km/h。对相邻两个点计算出来的速度值大于指定的限制速度时,则认为这两个点不可达,即没有有效的道路相通。默认值为 150 km/h。- 参数:
value
- 最大限制速度。
-
dispose
public void dispose()
-
batchMatch
public MapMatchingResult batchMatch(List<TrackPoint> coordinates)
地图匹配结果。- 参数:
coordinates
- 待匹配轨迹点。- 示范代码:
public void testBatch(Datasource datasource) { //打开工作空间或者数据源,得到网络数据集 DatasetVector edgeDataset = (DatasetVector) datasource.getDatasets().get("SH_Small"); DatasetVector DatasetPoint = (DatasetVector) datasource.getDatasets().get("shanghai"); //设置SCC文件路径 String filePath = "/MapMatch_SH_Small.ssc"; //设置路径规划环境 SSCPathAnalystSetting SSCSetting = new SSCPathAnalystSetting(); SSCSetting.setNetworkDataset(edgeDataset); SSCSetting.setSSCFilePath(filePath); SSCSetting.setTolerance(0.1); // GPS预处理参数设置 MapMatching mapmatch = new MapMatching(); mapmatch.setPathAnalystSetting(SSCSetting); mapmatch.setMaxLimitedSpeed(150); mapmatch.setMeasurementError(100); //从数据集中获取轨迹点 java.util.List
coordinates = this.getTrackPointFromDataset(DatasetPoint, "Time"); //进行地图匹配 MapMatchingResult res = mapmatch.batchMatch(coordinates); // 释放分析对象 SSCSetting.dispose(); mapmatch.dispose(); } //从数据集中获取轨迹点 private java.util.List getTrackPointFromDataset(DatasetVector dataset, String s) { java.util.List points = new ArrayList (); // 点集合 if (dataset.getType() == DatasetType.POINT) { int count = dataset.getRecordCount(); Recordset recordset = dataset.getRecordset(false, CursorType.STATIC); recordset.moveFirst(); for (int i = 0; i < count; i++) { TrackPoint point = new TrackPoint(); Point2D pt = recordset.getGeometry().getInnerPoint(); point.setPoint(pt); point.setTime((Date) recordset.getFieldValue(s)); points.add(point); recordset.moveNext(); } recordset.dispose(); return points; } return null; }
-
batchMatch
public DatasetVector batchMatch(DatasetVector sourceDataset, String idField, String timeField, double splitTimeMilliseconds, Datasource outputDatasource, String outputDatasetName, String resultTrackIndexField)
对数据集进行地图匹配,结果保存为点数据。- 参数:
sourceDataset
- 原始轨迹点数据集。idField
- 轨迹的 ID 字段,相同 ID 值相同的轨迹点属于一条轨迹,比如手机号、车牌号等。没有指定 ID 字段时,数据集中所有点将归类为一条轨迹。timeField
- 轨迹点的时间字段,必须为时间或时间戳类型字段。splitTimeMilliseconds
- 分割轨迹的时间间隔,如果时间相邻的两个点的时间间隔大于指定的分割轨迹的时间间隔,则会从两个点间分割轨迹。outputDatasource
- 保存结果数据集的数据源。outputDatasetName
- 结果数据集名称。resultTrackIndexField
- 保存轨迹索引的字段,轨迹分割后,一条轨迹可能分割为多条子轨迹,resultTrackIndexField 将会保存子轨迹的索引值,值从1开始。 因为结果数据集会保存源轨迹点数据集的所有字段,所以必须确保 resultTrackIndexField 字段值在源轨迹点数据集中是没有被占用。- 返回:
- 结果轨迹点数据集,正确匹配到道路上的轨迹点。
- 示范代码:
public void testbatchMatch(Datasource datasource) { // 0、打开工作空间或者数据源,得到网络数据集 DatasetVector edgeDataset = (DatasetVector) datasource.getDatasets().get("SD_linyi"); DatasetVector DatasetPoint = (DatasetVector) datasource.getDatasets().get("linyi"); //设置SCC文件路径 String filePath = "/MapMatch_SD_linyi.ssc"; //设置路径规划环境 SSCPathAnalystSetting SSCSetting = new SSCPathAnalystSetting(); SSCSetting.setNetworkDataset(edgeDataset); SSCSetting.setSSCFilePath(filePath); SSCSetting.setTolerance(0.1); // GPS预处理参数设置 MapMatching mapmatch = new MapMatching(); mapmatch.setPathAnalystSetting(SSCSetting); mapmatch.setMaxLimitedSpeed(150); mapmatch.setMeasurementError(30); //进行地图匹配 DatasetVector newDataset = mapmatch.batchMatch(DatasetPoint, "NewField", "Time", 3600000, datasource, "del_resultSD", "TrackIndex"); // 释放分析对象 SSCSetting.dispose(); mapmatch.dispose(); }
-
match
public MapMatchingLikelyResult[] match(TrackPoint coordinate, boolean isNewTrack)
实时地图匹配结果。注意:需要至少两个轨迹点才能进行实时地图匹配分析。
- 参数:
coordinate
- 待匹配轨迹点。isNewTrack
- 是否开启新的轨迹。- 示范代码:
//从数据集中获取轨迹点 private java.util.List
getTrackPointFromDataset(DatasetVector dataset, String s) { java.util.List points = new ArrayList (); // 点集合 if (dataset.getType() == DatasetType.POINT) { int count = dataset.getRecordCount(); Recordset recordset = dataset.getRecordset(false, CursorType.STATIC); recordset.moveFirst(); for (int i = 0; i < count; i++) { TrackPoint point = new TrackPoint(); Point2D pt = recordset.getGeometry().getInnerPoint(); point.setPoint(pt); point.setTime((Date) recordset.getFieldValue(s)); points.add(point); recordset.moveNext(); } recordset.dispose(); return points; } return null; } public void testMatch() { // 0、打开工作空间或者数据源,得到网络数据集 Datasource datasource = datasources.open(getDatasourceConnectionInfo()); DatasetVector edgeDataset = (DatasetVector) datasource.getDatasets().get("TJ_Small"); DatasetVector DatasetPoint = (DatasetVector) datasource.getDatasets().get("tianjin"); //设置SCC文件路径 String filePath = "/MapMatch_TJ_Small.ssc"; //设置路径规划环境 SSCPathAnalystSetting SSCSetting = new SSCPathAnalystSetting(); SSCSetting.setNetworkDataset(edgeDataset); SSCSetting.setSSCFilePath(filePath); SSCSetting.setTolerance(0.1); // GPS预处理参数设置 MapMatching mapmatch = new MapMatching(); mapmatch.setPathAnalystSetting(SSCSetting); mapmatch.setMaxLimitedSpeed(150); mapmatch.setMeasurementError(30); //从数据集中获取轨迹点 java.util.List coordinates = this.getTrackPointFromDataset(DatasetPoint, "Time"); //进行实时地址匹配 for (int i = 0; i < DatasetPoint.getRecordCount(); i++) { MapMatchingLikelyResult[] res = mapmatch.match(coordinates.get(i), false); } // 释放分析对象 SSCSetting.dispose(); mapmatch.dispose(); }
-
-
Copyright © 2021–2024 SuperMap. All rights reserved.