基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询

摘要:
一、Geomesa-QuickStart(教程工程包)百度网盘下载地址:geomesa-tutorials-master.7z二、解压后,IDEA编译如下百度网盘下载地址:IDEA2018破解版安装三、根据日期范围查询1@Test2publicvoidquery()throwsException{34TDriveDatadata=newTDriveData("taxi_gps",null);5St

一、Geomesa - QuickStart(教程工程包)

百度网盘下载地址:geomesa-tutorials-master.7z

二、解压后,IDEA编译如下

百度网盘下载地址:IDEA2018破解版安装

基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询第1张

三、根据日期范围查询

1 @Test
2     public void query() throwsException {
3     
4         TDriveData data = new TDriveData("taxi_gps",null);
5         String configXML = ResourceUtils.getFile("classpath:templates/hbase-bt.xml").getAbsolutePath();
6         Map<String, String> params = new HashMap<>();
7         params.put("hbase.catalog", "test_osm");
8         params.put("hbase.remote.filtering", "false");
9         params.put("hbase.config.paths", configXML);
10         HBaseDataStore dataStore = new HBaseDataStore(params, data, "");
11 dataStore.query();
12     }
1 public void query() throwsCQLException {
2 
3         //String dateField = "dtg";
4         //String tStart = "2007-02-08T00:00:00+00:00";
5         //String tEnd = "2007-12-31T00:00:00+00:00";
6         String cqlDates = "dtg during 2008-02-02T13:30:48.000Z/2008-02-02T13:30:52.000Z";
7 
8         //String cqlBbox = "BBOX(geom,
9         //121.358980,31.177850,121.358988,31.177855)";
10 
11         Filter filter =ECQL.toFilter(cqlDates);
12         //Filter filter = ECQL.toFilter("taxiId = 1288");
13         Query query = newQuery(data.getTypeName(), filter);
14         System.err.println("Running query " +ECQL.toCQL(query.getFilter()));
15         if (query.getPropertyNames() != null) {
16             System.err.println("Returning attributes " +Arrays.asList(query.getPropertyNames()));
17 }
18         int n = 0;
19 
20         try (FeatureReader<SimpleFeatureType, SimpleFeature> reader =dataStore.getFeatureReader(query,
21 Transaction.AUTO_COMMIT)) {
22             while(reader.hasNext()) {
23                 SimpleFeature feature =reader.next();
24                 if (n++ < 10) {
25                     //use geotools data utilities to get a printable string
26                     System.err.println(String.format("%02d", n) + " " +DataUtilities.encodeFeature(feature));
27                 } else if (n == 10) {
28                     System.out.println("...");
29 }
30 }
31 
32             System.err.println("done");
33         } catch(Exception e) {
34             System.err.println(e.getClass() + "," +e.getMessage());
35 }
36     }

正常情况下,是显示不出来结果的,但是官网的例子却可以,如下:

基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询第2张

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

基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询第3张

注意这句话: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 calledhbase.dynamic.jars.dir. This is set to${hbase.rootdir}/libby 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包就在这个二进制压缩包中

基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询第4张

jar包如下:

百度网盘下载地址:geomesa-hbase-distributed-runtime_2.11-2.0.2.jar

下载后,利用hadoop的fs命令,将其存放至${hbase.rootdir}/lib下,比如我的集群中HBase的rootdir路径如下:

基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询第5张

首先利用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

效果如下:

基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询第6张

最后重启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服务查询轨迹数据无法根据空间和时间范围进行结果查询》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS获取手机型号,Swift获取手机型号(类似iphone 7这种,检测机型具体型号)js 压缩图片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

精通shell编程--最后的总结

不得不说shell语法是丑陋的,操作是简单高效的,最后一次学习总结shell shell总结 字符串删除与替换等常见操作 ## 字符串长度 a=1234 echo "${#a}" expr length "${a}" ## 字符串 索引 expr index ${a} 23 # 拆分 2 3 一个个查找找到第一个匹配的就返回 ## 字符串 匹配 有问...

PHP的加密方法汇总

PHP的加密主要有4种方法,除此之外还有一种是URL的加密和解密。希望可以对你们开发有用。 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了。  笔记链接:http://pan.baidu.com/s/1qYdQdKK 密码:pvj2  ...

Java数据库连接--JDBC基础知识(操作数据库:增删改查)

一、JDBC简介   JDBC是连接java应用程序和数据库之间的桥梁。   什么是JDBC?   Java语言访问数据库的一种规范,是一套API。   JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库...

c# 调取墨迹调用墨迹天气接口保存到数据库

一、墨迹接口调用 private String host =ConfigurationManager.AppSettings["WeatherHost"];//接口直接写到webconfig中 private const String pathWeather = "/whapi/json/alicityweather/br...

SpringBoot+ElementUI实现通用文件下载请求(全流程图文详细教程)

场景 在某些场景下需要前端浏览器从服务器端下载文件,比如需要下载导入Excel的模板。 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 既然是实现通用下载接口,就要实现在后端配置一个下载文件的路径,在前端进行下载请求时传递要下载的文件...

c++11の关联容器

一、关联容器 C++的容器类型可以分为顺序容器和关联容器两大类。对于关联容器,主要有map和set,对于这两种,根据不同的维度,衍生出了8种容器 map                                      //值对 set                                         //仅有值 multimap ...