Geomesa:如何计算每个凸轮设备的区域最后坐标?

Geomesa: How to calculate last coordinate in area for each cam device?

我正在尝试查找时间间隔区域中区域中所有凸轮的最后坐标:

"1 = 1 AND cam IN ('930e74d9-a607-4345-807a-eea117f97935','2da5186c-73f4-42bd-b1cf-40229673e3cf') 
AND BBOX(geo, 36.29196166992188, 55.36506387240321, 38.92868041992188, 56.114170062223856) 
AND (time >= 2022-02-02T12:00:00+03:00) AND (time <= 2022-02-02T15:00:00+03:00)"

为此我通过枚举找到了查询中的所有摄像头。然后我尝试为每个不同的相机找到 minMax 时间。

  public CameraStat getCamerasStatistics(GeoQuery geoQueries) {

    CameraStat cameraStatistic = new CameraStat();

    for (String s : geoQueries.getQs()) {
      AccumuloGeoMesaStats stats = ((AccumuloDataStore) dataStore).stats();

      s = queryParser.convertToCorrectTime(s);

      Option<EnumerationStat<Object>> enumeration = null;
      try {
        enumeration = stats.getEnumeration(
            SimpleFeatureUtils.TYPE, "cam", ECQL.toFilter(s), true);
      } catch (CQLException e) {
        log.error("Error",e);
      }

      scala.collection.mutable.Map<Object, Object> camerasCount = enumeration.get()
          .enumeration();

      Map<Object, Object> map = JavaConversions.mapAsJavaMap(camerasCount);

      int size = map.size();
      Integer sum = map.values().stream().map(it -> ((Long) it).intValue()).reduce(0,
                                                                                   Integer::sum);
      Set<String> collect = map.keySet().stream().map(it -> (String) it).collect(
          Collectors.toSet());

      cameraStatistic.addCameraCount(size);
      cameraStatistic.addCoordinatesCount(sum);
      cameraStatistic.addCameras(collect);
    }
    return cameraStatistic;
  }

问题是 geomesa 不会持久保存 accumulo 的枚举统计信息。它是为每个查询计算相机枚举的唯一方法吗?

来自 geomesa 代码:org.locationtech.geomesa.index.stats.MetadataBackedStats

  // note: enumeration stats aren't persisted, so we don't override the super method

在 GeoMesa 中目前没有持久化或 pre-calculate 枚举的选项;通常它们太大而无法有效存储。

您可能会探索单独保存它们,或者使用本地缓存,例如 Guava