public class MapMatching
extends com.supermap.data.InternalHandleDisposable
该方法是将轨迹点进行地图匹配。将轨迹点按照标识字段进行划分,按时间字段进行排序和分割轨迹,找到每条轨迹最可能的经过路线。目的是基于轨迹点还原真实路径。
构造器和说明 |
---|
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)
设置最佳路径分析参数。
|
public boolean setPathAnalystSetting(PathAnalystSetting setting)
setting
- 最佳路径分析参数设置。public PathAnalystSetting getPathAnalystSetting()
public MapMatching setMeasurementError(double value)
value
- 轨迹点误差值。public double getMeasurementError()
public double getMaxLimitedSpeed()
public MapMatching setMaxLimitedSpeed(double value)
value
- 最大限制速度。public void dispose()
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.Listcoordinates = 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; }
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(); }
public MapMatchingLikelyResult[] match(TrackPoint coordinate, boolean isNewTrack)
注意:需要至少两个轨迹点才能进行实时地图匹配分析。
coordinate
- 待匹配轨迹点。isNewTrack
- 是否开启新的轨迹。//从数据集中获取轨迹点 private java.util.ListgetTrackPointFromDataset(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.