code: func (q *Query) SetZoom(north, west, south, east float64) {
  	if west <= east && east-west > 360 {
  		// we're just zoomed out very far
  		west = -179.99
  		east = 179.99
  	}
  	const precision = 1e-6
  	// since we print the locrect at a given arbitrary precision (e-6), we need to
  	// round everything "up", to make sure we don't exclude points on the boundaries.
  	newNorth := north + precision
  	newSouth := south - precision
  	newWest := camtypes.Longitude(west - precision).WrapTo180()
  	newEast := camtypes.Longitude(east + precision).WrapTo180()
  
  	q.nextZoom = &camtypes.LocationBounds{
  		North: newNorth,
  		South: newSouth,
  		West:  newWest,
  		East:  newEast,
  	}
  	zoomExpr := fmt.Sprintf("map:%.6f,%.6f,%.6f,%.6f", newNorth, newWest, newSouth, newEast)
  
  	q.Expr = handleZoomPredicate(q.Expr, false, zoomExpr)
  }
docs: // SetZoom modifies the query's search expression: it uses the given coordinates
  // in a map predicate to constrain the search expression to the defined area,
  // effectively acting like a map zoom.
  //
  // The map predicate is defined like locrect, and it has a similar meaning.
  // However, it is not defined server-side, and it is specifically meant to
  // represent the area of the world that is visible in the screen when using the map
  // aspect, and in particular when zooming or panning. As such, it follows stricter
  // rules than the other predicates, which are:
  //
  // 1. only one map predicate is allowed in the whole expression.
  // 2. since the map predicate is interpreted as if it were a logical 'and' with
  // the rest of the whole expression (regardless of its position within the
  // expression), logical 'or's around it are forbidden.
  //
  // The map predicate is also moved to the end of the expression, for clarity.