基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询
一、Geomesa - QuickStart(教程工程包)
百度网盘下载地址:geomesa-tutorials-master.7z
二、解压后,IDEA编译如下
百度网盘下载地址:IDEA2018破解版安装

三、根据日期范围查询
@Test
public void query() throws Exception { TDriveData data = new TDriveData("taxi_gps",null);
String configXML = ResourceUtils.getFile("classpath:templates/hbase-bt.xml").getAbsolutePath();
Map<String, String> params = new HashMap<>();
params.put("hbase.catalog", "test_osm");
params.put("hbase.remote.filtering", "false");
params.put("hbase.config.paths", configXML);
HBaseDataStore dataStore = new HBaseDataStore(params, data, "");
dataStore.query();
}
public void query() throws CQLException {
// String dateField = "dtg";
// String tStart = "2007-02-08T00:00:00+00:00";
// String tEnd = "2007-12-31T00:00:00+00:00";
String cqlDates = "dtg during 2008-02-02T13:30:48.000Z/2008-02-02T13:30:52.000Z";
// String cqlBbox = "BBOX(geom,
// 121.358980,31.177850,121.358988,31.177855)";
Filter filter = ECQL.toFilter(cqlDates);
// Filter filter = ECQL.toFilter("taxiId = 1288");
Query query = new Query(data.getTypeName(), filter);
System.err.println("Running query " + ECQL.toCQL(query.getFilter()));
if (query.getPropertyNames() != null) {
System.err.println("Returning attributes " + Arrays.asList(query.getPropertyNames()));
}
int n = 0;
try (FeatureReader<SimpleFeatureType, SimpleFeature> reader = dataStore.getFeatureReader(query,
Transaction.AUTO_COMMIT)) {
while (reader.hasNext()) {
SimpleFeature feature = reader.next();
if (n++ < 10) {
// use geotools data utilities to get a printable string
System.err.println(String.format("%02d", n) + " " + DataUtilities.encodeFeature(feature));
} else if (n == 10) {
System.out.println("...");
}
}
System.err.println("done");
} catch (Exception e) {
System.err.println(e.getClass() + "," + e.getMessage());
}
}
正常情况下,是显示不出来结果的,但是官网的例子却可以,如下:

如果自己写的Java客户端代码,利用Geomesa服务提供的filter根据空间范围BBox和时间范围进行During查不到结果的话,别慌好吧,请看官网是怎么说的:

注意这句话:GeoMesa uses an HBase custom filter to improve processing of CQL queries
翻译一下大概是:GeoMesa使用HBase自定义过滤器来改进对CQL查询的处理
但是后面还有一句关键的话:In order to use the custom filter, you must deploy the distributed runtime jar to the HBase to the directory specified by the HBase configuration variable called hbase.dynamic.jars.dir. This is set to ${hbase.rootdir}/lib by default.
翻译一下大概是:为了使用自定义过滤器,必须将分布式运行时jar部署到HBase中,并将其部署到HBase配置变量HBase .dynamic.jars.dir指定的目录中。如果不指定的话,这个目录默认就是${hbase.rootdir}/lib
因为我们用的是Geomesa服务提供的过滤器进行的查询,而Geomesa用的又是HBase自定义的过滤器加以改进的,也就是上面说的意思大概是,如果不把这个分布式运行时jar包配置到${hbase.rootdir}/lib目录下,等于说,我们用的还是HBase的那一套过滤器,也就是不是加强版的查询,Ok,那这个包在哪呢,我们可以通过下面的连接进行完整项目的下载:
百度网盘下载地址:geomesa-hbase_2.11-2.0.2-bin.tar.gz
Geomesa官方主页:http://www.geomesa.org/
Geomesa项目源码GitHub开源地址:https://github.com/locationtech/geomesa/releases
Geomesa-HBase分布式运行时jar包就在这个二进制压缩包中

jar包如下:
百度网盘下载地址:geomesa-hbase-distributed-runtime_2.11-2.0.2.jar
下载后,利用hadoop的fs命令,将其存放至${hbase.rootdir}/lib下,比如我的集群中HBase的rootdir路径如下:

首先利用hadoop的fs命令在hbase_db目录下面创建一个lib目录
hadoop fs -mkdir /opt/hbase/hbase_db/lib
然后将Geomesa-HBase分布式运行时Jar包上传至hdfs文件系统中的hbase数据存放路径下面的lib目录下
hadoop fs -put geomesa-hbase_2.11-2.0.2-bin.tar.gz /opt/hbase/hbase_db/lib
效果如下:

最后重启HBase,按时间范围查询如下:
Running query dtg DURING 2008-02-02T13:30:48+00:00/2008-02-02T13:30:52+00:00 13:11:13.971 [main-SendThread(192.168.142.144:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Reading reply
01 1288=1288|2008-02-02T13:30:49.000Z|POINT (116.31412 39.89455)
02 1288=1288|2008-02-02T13:30:50.000Z|POINT (116.31412 39.89455)
03 1277=1277|2008-02-02T13:30:49.000Z|POINT (116.31412 39.89454)
done
按空间(索引)范围查询如下:
Running query BBOX(geom, 116.31412,39.89411,117.31412,40.89455)
01 1288=1288|2008-02-02T13:30:49.000Z|POINT (116.31412 39.89454)
02 1288=1288|2008-02-02T13:30:50.000Z|POINT (116.31412 39.89455)
03 1277=1277|2008-02-02T13:30:49.000Z|POINT (116.31412 39.89454)
04 1277=1277|2008-02-03T07:26:45.000Z|POINT (116.31469 39.89492)
05 1277=1277|2008-02-06T18:35:12.000Z|POINT (116.31493 39.895)
06 1277=1277|2008-02-08T13:12:39.000Z|POINT (116.31468 39.89568)
07 1277=1277|2008-02-08T17:36:39.000Z|POINT (116.31777 39.89572)
08 1277=1277|2008-02-06T18:38:46.000Z|POINT (116.32276 39.89555)
09 1277=1277|2008-02-08T12:15:59.000Z|POINT (116.31645 39.89698)
10 1277=1277|2008-02-04T12:34:38.000Z|POINT (116.31511 39.8988)
done
基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询的更多相关文章
- 如何用SQL语句查询Excel数据?
如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOp ...
- FreeSql (二十一)查询返回数据
FreeSql 采用 ExpressionTree 优化读取速读,如果懂技术的你一定知道 .NETCore 技术下除了原生代码,最快就是 Emit 和 ExpressionTree. 项目在初期使用的 ...
- 基于NIO的同步非阻塞编程完整案例,客户端发送请求,服务端获取数据并返回给客户端数据,客户端获取返回数据
这块还是挺复杂的,挺难理解,但是多练几遍,多看看研究研究其实也就那样,就是一个Selector轮询的过程,这里想要双向通信,客户端和服务端都需要一个Selector,并一直轮询, 直接贴代码: Ser ...
- 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发.部署.运维管理.持续开发持续集成的流程 ...
- 基于InfluxDB+Grafana打造大数据监控利器--转
这是一个大数据爆发的时代.面对信息的激流.多元化数据的涌现,我们在获取.存储.传输.理解.分析.应用.维护大数据时,无疑需要一种便捷的信息交流通道,以便快速.有效.准确地理解和驾驭这个过程.本文将通过 ...
- 大数据freestyle: 共享单车轨迹数据助力城市合理规划自行车道
编者按:近年来,异军突起的共享单车极大地解决了人们共同面临的“最后一公里”难题,然而,共享单车发展迅猛,自行车道建设却始终没有能够跟上脚步.幸运的是摩拜单车大量的轨迹数据为我们提供了一种新的思路:利用 ...
- 基于MaxCompute的媒体大数据开放平台建设
摘要:随着自媒体的发展,传统媒体面临着巨大的压力和挑战,新华智云运用大数据和人工智能技术,致力于为媒体行业赋能.通过媒体大数据开放平台,将媒体行业全网数据汇总起来,借助平台数据处理能力和算法能力,将有 ...
- (二)基于shard-jdbc中间件,实现数据分库分表
基于shard-jdbc中间件,实现数据分库分表 Sharding-JDBC简介 Sharding配置示意图 1.水平分割 1.1 水平分库 1.2 水平分表 2.Shard-jdbc中间件 2.1 ...
- 基于云服务MRS构建DolphinScheduler2调度系统
摘要:本文介绍如何搭建DolphinScheduler并运行MRS作业. 本文分享自华为云社区<基于云服务MRS构建DolphinScheduler2调度系统>,作者: 啊喔YeYe . ...
随机推荐
- 【Leetcode】【Easy】Merge Two Sorted Lists .
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- June 23rd 2017 Week 25th Friday
Life doesn't get easier, you just get stronger. 生活从未变得轻松,是你在一点一点变得坚强. So in the same way we can get ...
- mvc 从客户端 中检测到有潜在危险的 Request 值
往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误: 从客户端(Content="<EM ><STRONG ><U >这是测试这...&qu ...
- 理解JavaScript中的去抖函数
何为去抖函数?在学习JavaScript去抖函数之前我们需要先弄明白这个概念.很多人都会把去抖跟节流两个概念弄混,但是这两个概念其实是很好理解的. 去抖函数(Debounce Function),是一 ...
- BZOJ1924:[SDOI2010]所驼门王的宝藏(强连通分量,拓扑排序)
Description Input 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室 ...
- BZOJ2440:[中山市选2011]完全平方数(莫比乌斯函数)
Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱. 这天是 ...
- MaBatis(5)输入/输出映射
本次全部学习内容:MyBatisLearning 输入映射: 通过parameType指定输入参数的类型,类型可以是简单类型,hashmap,pojo等 传递pojo的包装对象 需求: 即 ...
- 2019.1.1 在重写的方法上面添加@Override注解方法报错解决办法
报错代码 The method transfer(Integer, Integer, Double) of type AccountServiceImpl must override a superc ...
- Entity Framework——执行sql语句
EF版本:6.0.0 EF对大量数据或多表连接一次操作耗时较大,或要求响应时间尽可能小,因此采用EF框架执行SQL语句的方案 1DbContext.Database 这个类包含了大量的操作方法,见截图 ...
- 学习“CC攻击”
什么是CC攻击? 网上有一个定义:攻击者借助代理服务器生成指向受害主机的合法请求,实现拒绝服务攻击的攻击方式称为CC(Challenge Collapsar)攻击.[据说CC的原意为Chanlleng ...