code: function (options) {
    options = options || {};
    var defaults = {
      precision: options.integerMode === true ? 32 : 6,
      rowMode: false,
      integerMode: false,
      geojson: [],
      splitAt: 2000,
      hashMode: 'inside',
      threshold: 0
    };
    for (var attrname in defaults) {
      this[attrname] = options.hasOwnProperty(attrname) && (options[attrname] !== null && typeof options[attrname] !== 'undefined') ? options[attrname] : defaults[attrname];
    }
  
    this.isMulti = Array.isArray(this.geojson[0][0][0]);
    this.geojson = !this.isMulti ? [this.geojson] : this.geojson;
    this.geojson = this.geojson.map(function (el) {
      return turf.polygon(el);
    });
    if (this.integerMode) {
    	this.geohashEncode = geohash.encode_int;
    	this.geohashDecode = geohash.decode_int;
    	this.geohashDecodeBbox = geohash.decode_bbox_int;
    	this.geohashNeighbor = geohash.neighbor_int;
    } else {
    	this.geohashEncode = geohash.encode;
    	this.geohashDecode = geohash.decode;
    	this.geohashDecodeBbox = geohash.decode_bbox;
    	this.geohashNeighbor = geohash.neighbor;
    }
  
    Readable.call(this, {
      objectMode: this.rowMode
    });
  }
docs: /*
  Hasher, extends Readable
  a stream that will provide a readable list of hashes, row by row.
  
  Calculate geohashes of specified precision that cover the (Multi)Polygon provided
  Note, duplicates may occur.