基於Geomesa服務查詢軌跡資料無法根據空間和時間範圍進行查詢的問題解決辦法
一、Geomesa (教程包)
百度網盤下載地址: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-distributed-runtime_2.11-2.0.2.jar /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
相關文章
- 根據時間範圍呼叫gitLab介面查詢Gitlab
- oracle 剩餘表空間查詢慢,解決辦法Oracle
- Oracle日期時間範圍查詢Oracle
- vue+element-ui根據時間查詢VueUI
- 關於聯合索引,範圍查詢,時間列索引的幾個問題索引
- PostGIS特殊函式 ☞ 根據BOX3D查詢某一空間範圍內的物件函式3D物件
- mongodb異機做時間點恢復(基於時間範圍查詢匯出oplog)MongoDB
- Laravel MongoDB 時間區間查詢的問題LaravelMongoDB
- 關於oracle的空間查詢Oracle
- 關於Oracle資料庫的時間查詢Oracle資料庫
- Java根據前端返回的欄位名進行查詢資料Java前端
- es針對nested型別資料無法進行過濾查詢的問題記錄型別
- 臨時表空間和回滾表空間使用率查詢
- Dbutils的QueryRunner無法通過中文查詢問題
- 根據某個查詢條件的前50條資料來決定UPDATE語句的更新範圍
- Java根據前端返回的欄位名進行查詢資料的方法Java前端
- MySQL關於根據日期查詢資料的sql語句MySql
- 總結Oracle根據時間查詢的一些常見情況Oracle
- pid,sid相互查詢,根據PID查詢sqlSQL
- Mysql利用Like支援根據匹配度進行查詢MySql
- mysql查詢最近時間的一組資料MySql
- dcat-admin 統計修改時間選擇器 日期範圍查詢
- MySQL查詢時間段MySql
- JPA時間段查詢
- 一個改進後的根據STATSPACK來查詢哪段時間內的事務量最大的指令碼指令碼
- 達夢資料庫表空間等空間大小查詢方法總結資料庫
- redis~有序集合處理ip範圍的查詢問題Redis
- 根據查詢條件批量修改表資料
- 臨時表空間被佔滿的原因查詢
- 查詢表空間使用情況
- 表空間使用量查詢
- MongoRepository查詢資料常用語法Go
- linux 中根據檔案的大小進行檔案的查詢Linux
- 關於日期及時間欄位的查詢
- Oracle查詢回滾大事務所需時間Oracle
- 記錄一個簡陋的根據statspack查詢哪段時間事務量最大的指令碼指令碼
- 新版《網路安全審查辦法》施行,資料安全納入審查範圍
- mysql like查詢 - 根據多個條件的模糊匹配查詢MySql