用java组件纠偏出租车gps采集点

用Java组件对出租车GPS采集点进行纠偏

随着技术发展,如今对出租车的运营管理也非常精准,运营公司后台通过实时接收出租车的位置信息,对出租车进行运营调度及安全管理。在位置信息数据的处理方面就离不开gis数据基础处理功能与空间分析功能。本文对位置数据的前期预处理做一个详细的讲解。

  • 数据准备:

    1. 原始上海出租车位置信息数据Taxi_105作为示例,依次为出租车id,采集时间,经度,纬度,速度,方向角,是否载客,如图一

      用java组件纠偏出租车gps采集点_第1张图片

    2. 点数据集模板,用于存储点对象

      这里写图片描述

    3. 上海区域的网络数据集BuildNetwork,用于纠偏gps点坐标。

  • Java组件包:

    基础包com.supermap.data.jar,导航模块包com.supermap.analyst.navigation.jar

  • 处理步骤:

    1. 按行读取位置信息数据

      InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);// 考虑到编码格式
      BufferedReader bufferedReader = new BufferedReader(read);
      String lineTxt = null;
      while ((lineTxt = bufferedReader.readLine()) != null)
      {
      	makeRecord(lineTxt);
      }
      
    2. gps坐标信息转为点对象记录,由于gps采集坐标系是wgs84,与路网数据的坐标系是一致的,故不需做投影转换,gps时间戳字段必须转换为时间整型才可进行路网纠偏。

      	private void makeRecord(String lineTxt) throws ParseException
      	{
      		String[] strArray = lineTxt.split(",");
      		// 筛选速度不正常的记录
      		if (Double.valueOf(strArray[4].trim()).doubleValue() > 0.0 && Double.valueOf(strArray[4].trim()).doubleValue() < 100.0)
      		{
      			Map values = new HashMap();
      			long time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(strArray[1]).getTime();
      			values.put("TaxiID", strArray[0].trim());
      			values.put("TimeInfo", time / 1000);
      			values.put("Speed", strArray[4].trim());
      			values.put("Direction", strArray[5].trim());
      			values.put("HasPassenger", strArray[6].trim());
      			GeoPoint point = new GeoPoint(Double.valueOf(strArray[2].trim()).doubleValue(), Double.valueOf(strArray[3].trim()).doubleValue());
      			boolean add = mRecordset.addNew(point, values);
      			point.dispose();
      			values.clear();
      			System.out.println("添加:" + add);
      		}
      	}
      
    3. 用网络数据BuildNetwork构建导航模型文件ssc,注"道路等级"为必填字段,且为整型,且值不为空

      用java组件纠偏出租车gps采集点_第2张图片

    4. 加载导航模型及分析环境:

      		String filePathBJ = "data/NavigationModelAll.ssc";
      		PathAnalyst analyst = new PathAnalyst();// 3.加载文件模型
      		SSCDataEnvironment environment = new SSCDataEnvironment();
      		boolean bConnect = environment.connectData(filePathBJ, netWork);
      		// 4.设置ssc分析环境
      		boolean bEnviron = analyst.setSSCEnvironment(environment);
      
    5. 设置gps点预处理参数:

      		MapMatchParameter parameter = new MapMatchParameter();// GPS预处理参数设置
      		parameter.setDatasetVector(gpsPoint);
      		parameter.setTime("TimeInfo");// 时间戳,必设字段
      		// 5.GPS预处理,只能是单个数据集纠偏,如一个出租车的数据
      		DatasetVector[] point = analyst.prepareData(parameter, "prepareGPSPoint");
      
    6. 预处理数据转gps对象:

      		Map<Integer, Feature> allFeatures = datasetVector.getAllFeatures();
      		GPSData[] gpsDatas = new GPSData[allFeatures.size()];
      		int i = 0;
      		for (Feature f : allFeatures.values())
      		{
      			GPSData gpsData = new GPSData();
      			gpsData.setPoint(f.getGeometry().getInnerPoint());
      			gpsData.setTimeValue((int) f.getInt64(timeinfo));
      			gpsDatas[i] = gpsData;
      			i++;
      		}
      
    7. gps纠偏,找出最优点

      		Point2Ds result_t = analyst.traceRectify(data, 3);// 轨迹纠偏
      
  • 结果展示:

    1. 纠偏前原始点位置

      用java组件纠偏出租车gps采集点_第3张图片

    2. 纠偏后gps点落在路网上

      用java组件纠偏出租车gps采集点_第4张图片

  • 纠偏后的gps坐标点可以正常叠加到地图上,也可以用其做轨迹构建或用于实时路况的计算等等分析。

  • 完成工程下载链接RectifyGPSPoint.rar

你可能感兴趣的:(组件GIS)