sfcurve icon indicating copy to clipboard operation
sfcurve copied to clipboard

About Z3 query

Open 152056212 opened this issue 4 years ago • 0 comments

  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: debug

So why output is ( Input is ZRange(4299856006940196864,4299856006956974079)) : output

  1. And dont 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] = { ....... }`

152056212 avatar Mar 05 '21 03:03 152056212