code: public static Observable<Options> partition(final Options options, final int horizontal,
              final int vertical) {
          List<Options> list = new ArrayList<>();
          Bounds bounds = options.getBounds();
          double h = bounds.getWidthDegrees() / horizontal;
          double v = bounds.getHeightDegrees() / vertical;
          for (int i = 0; i < horizontal; i++) {
              for (int j = 0; j < vertical; j++) {
                  double lat = bounds.getTopLeftLat() - j * v;
                  double lon = bounds.getTopLeftLon() + i * h;
                  Bounds b = new Bounds(lat, lon, lat - v, lon + h);
                  list.add(options.buildFrom().bounds(b).filterBounds(b.expand(7, 7)).build());
              }
          }
          return Observable.from(list);
      }
docs: Returns a sequence of {@link Options} that are same as the source apart
  from the {@link Bounds} which are partitioned according to horizontal and
  vertical parameters. For map-reduce purposes we need to be able to
  partition the bounds of Options. Passing horizontal=1 and vertical=1 will
  return one item only being a copy of the source {@link Options}.
  
  @param options
  @param horizontal
  number of regions (with longitude)
  @param vertical
  number of regions (with latitude)
  @return