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。
我正在尝试查找时间间隔区域中区域中所有凸轮的最后坐标:
"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。