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

版权声明:本文为博主原创文章,欢迎转载,SuperMap技术问答社区 http://ask.supermap.com https://blog.csdn.net/supermapsupport/article/details/82112844

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

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

  • 数据准备:

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

      这里写图片描述

    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,注”道路等级”为必填字段,且为整型,且值不为空

      这里写图片描述

    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. 纠偏前原始点位置

      这里写图片描述

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

      这里写图片描述

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

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

猜你喜欢

转载自blog.csdn.net/supermapsupport/article/details/82112844