1. I do this query : BBOX(geom, 118.180168,24.060873,118.28798,24.149692) AND dtg DURING 2017-01-01T07:14:00+00:00/2017-01-01T08:20:00+00:00 2. Console log is : createQueryPlan QueryStrategy(**Z3Index(geom,dtg)[BBOX(geom, 118.180168,24.060873,118.28798,24.149692) AND dtg DURING 2017-01-01T07:14:00+00:00/2017-01-01T08:20:00+00:00]**[None],Stream(BoundedByteRange([B@100c567f,[B@30c0d731), ?),Stream(BoundedRange(Z3IndexKey(2452,4299856006940196864),Z3IndexKey(2452,4299856006956974079)), ?),List(),None,Hints: org.geotools.util.factory.Hints$ClassKey@325bb9a6 = SimpleFeatureType ais-quickstart ShipName:String,CallSign:String,IMO:String,MMSI:String:cardinality=high,ShipTypeCN:String,ShipTypeEN:String,NavStatusCN:String,NavStatusEN:String,Length:Double,Width:Double,Draught:Double,Heading:Double,Course:String,Speed:String,Lon:String,Lat:String,Rot:String,Dest:String,ETA:String,Receivedtime(UTC+8):String,UnixTime:String,Lon_d:String,Lat_d:String,dtg:Date,*geom:Point:srid=4326 org.geotools.util.factory.Hints$ClassKey@f478a81 = z3:6:geom:dtg System defaults: FORCE_LONGITUDE_FIRST_AXIS_ORDER = true ,Some(Z3IndexValues(org.locationtech.geomesa.curve.Z3SFC@28fd3dc1,FilterValues(List(POLYGON ((118.180168 24.060873, 118.28798 24.060873, 118.28798 24.149692, 118.180168 24.149692, 118.180168 24.060873))),true,false),List((118.180168,24.060873,118.28798,24.149692)),FilterValues(List([2017-01-01T07:14:01Z,2017-01-01T08:19:59Z]),true,false),Map(2452 -> List((285241,289199))),List()))) 3. And query result is 0, but it is not correct by look for database. 4. **By debug, look this function in package org.locationtech.sfcurve.zorder and abstract class ZN:**  So why output is ( Input is ZRange(4299856006940196864,4299856006956974079)) :  5. **And don`t understand this function** : ` /** * Calculates ranges in index space that match any of the input bounds. Uses breadth-first searching to * allow a limit on the number of ranges returned. * * To improve performance, the following decisions have been made: * uses loops instead of foreach/maps * uses java queues instead of scala queues * allocates initial sequences of decent size * sorts once at the end before merging * * @param zbounds search space * @param precision precision to consider, in bits (max 64) * @param maxRanges loose cap on the number of ranges to return. A higher number of ranges will have less * false positives, but require more processing. * @param maxRecurse max levels of recursion to apply before stopping * @return ranges covering the search space */ def zranges(zbounds: Array[ZRange], precision: Int = 64, maxRanges: Option[Int] = None, maxRecurse: Option[Int] = Some(ZN.DefaultRecurse)): Seq[IndexRange] = { ....... }`
org.geotools.util.factory.Hints$ClassKey@325bb9a6 = SimpleFeatureType ais-quickstart ShipName:String,CallSign:String,IMO:String,MMSI:String:cardinality=high,ShipTypeCN:String,ShipTypeEN:String,NavStatusCN:String,NavStatusEN:String,Length:Double,Width:Double,Draught:Double,Heading:Double,Course:String,Speed:String,Lon:String,Lat:String,Rot:String,Dest:String,ETA:String,Receivedtime(UTC+8):String,UnixTime:String,Lon_d:String,Lat_d:String,dtg:Date,*geom:Point:srid=4326
org.geotools.util.factory.Hints$ClassKey@f478a81 = z3:6:geom:dtg
System defaults:
FORCE_LONGITUDE_FIRST_AXIS_ORDER = true
,Some(Z3IndexValues(org.locationtech.geomesa.curve.Z3SFC@28fd3dc1,FilterValues(List(POLYGON ((118.180168 24.060873, 118.28798 24.060873, 118.28798 24.149692, 118.180168 24.149692, 118.180168 24.060873))),true,false),List((118.180168,24.060873,118.28798,24.149692)),FilterValues(List([2017-01-01T07:14:01Z,2017-01-01T08:19:59Z]),true,false),Map(2452 -> List((285241,289199))),List())))
So why output is ( Input is ZRange(4299856006940196864,4299856006956974079)) :

t understand this function** :/*/
def zranges(zbounds: Array[ZRange],
precision: Int = 64,
maxRanges: Option[Int] = None,
maxRecurse: Option[Int] = Some(ZN.DefaultRecurse)): Seq[IndexRange] = {
.......
}`