code: @Override
  	protected void selectRectangle(Bbox selectedArea) {
  		// we can clear here !
  		if (!shiftOrCtrl) {
  			MapModel mapModel = mapWidget.getMapModel();
  			mapModel.clearSelectedFeatures();
  		}
  		GwtCommand commandRequest = new GwtCommand(SearchByLocationRequest.COMMAND);
  		SearchByLocationRequest request = new SearchByLocationRequest();
  		request.setLayerIds(getSelectionLayerIds());
  		for (Layer<?> layer : mapWidget.getMapModel().getLayers()) {
  			if (layer.isShowing() && layer instanceof VectorLayer) {
  				request.setFilter(layer.getServerLayerId(), ((VectorLayer) layer).getFilter());
  			}
  		}
  
  		Polygon polygon = mapWidget.getMapModel().getGeometryFactory().createPolygon(selectedArea);
  		request.setLocation(GeometryConverter.toDto(polygon));
  		request.setCrs(mapWidget.getMapModel().getCrs());
  		request.setQueryType(SearchByLocationRequest.QUERY_INTERSECTS);
  		request.setRatio(coverageRatio);
  		request.setSearchType(SearchByLocationRequest.SEARCH_ALL_LAYERS);
  		request.setFeatureIncludes(GwtCommandDispatcher.getInstance().getLazyFeatureIncludesSelect());
  		commandRequest.setCommandRequest(request);
  		GwtCommandDispatcher.getInstance().execute(commandRequest,
  				new AbstractCommandCallback<SearchByLocationResponse>() {
  
  			public void execute(SearchByLocationResponse response) {
  				Map<String, List<org.geomajas.layer.feature.Feature>> featureMap = response.getFeatureMap();
  				for (String layerId : featureMap.keySet()) {
  					selectFeatures(layerId, featureMap.get(layerId));
  				}
  			}
  		});
  	}
docs: -------------------------------------------------------------------------