private static void fillForBasicFilter(@NonNull final BaseGeocacheFilter basicFilter, final GCWebAPI.WebApiSearch search) {
        switch (basicFilter.getType()) {
            case TYPE:
                search.addCacheTypes(((TypeGeocacheFilter) basicFilter).getRawValues());
                break;
            case NAME:
                if (((NameGeocacheFilter) basicFilter).getStringFilter().getFilterType() != StringFilter.StringFilterType.DOES_NOT_CONTAIN) {
                    search.setKeywords(((NameGeocacheFilter) basicFilter).getStringFilter().getTextValue());
                }
                break;
            case ATTRIBUTES:
                final AttributesGeocacheFilter attFilter = (AttributesGeocacheFilter) basicFilter;
                if (!attFilter.isInverse()) {
                    search.addCacheAttributes(
                        CollectionStream.of(attFilter.getAttributes().entrySet())
                        .filter(e -> Boolean.TRUE.equals(e.getValue()))
                        .filter(e -> e.getKey().gcid >= 0 && e.getKey().gcid < 100)
                        .map(Map.Entry::getKey)
                        .toArray(CacheAttribute.class));
                }
                break;
            case SIZE:
                search.addCacheSizes(((SizeGeocacheFilter) basicFilter).getValues());
                break;
            case DISTANCE:
                final DistanceGeocacheFilter distanceFilter = (DistanceGeocacheFilter) basicFilter;
                final Geopoint coord = distanceFilter.getEffectiveCoordinate();
                if (distanceFilter.getMaxRangeValue() != null) {
                    search.setBox(new Viewport(coord, distanceFilter.getMaxRangeValue()));
                } else {
                    search.setOrigin(coord);
                }
                break;
            case DIFFICULTY:
                search.setDifficulty(((DifficultyGeocacheFilter) basicFilter).getMinRangeValue(), ((DifficultyGeocacheFilter) basicFilter).getMaxRangeValue());
                break;
            case TERRAIN:
                search.setTerrain(((TerrainGeocacheFilter) basicFilter).getMinRangeValue(), ((TerrainGeocacheFilter) basicFilter).getMaxRangeValue());
                break;
            case DIFFICULTY_TERRAIN:
                fillForBasicFilter(((DifficultyAndTerrainGeocacheFilter) basicFilter).difficultyGeocacheFilter, search);
                fillForBasicFilter(((DifficultyAndTerrainGeocacheFilter) basicFilter).terrainGeocacheFilter, search);
                break;
            case DIFFICULTY_TERRAIN_MATRIX:
                final DifficultyTerrainMatrixGeocacheFilter matrixFilter = (DifficultyTerrainMatrixGeocacheFilter) basicFilter;
                if (matrixFilter.isFilteringMatrix()) {
                    search.setDifficultyTerrainCombis(((DifficultyTerrainMatrixGeocacheFilter) basicFilter).getDtCombis());
                }
                break;
            case RATING:
                // not supported for online searches for this connector
                break;
            case OWNER:
                search.setHiddenBy(((OwnerGeocacheFilter) basicFilter).getStringFilter().getTextValue());
                break;
            case FAVORITES:
                final FavoritesGeocacheFilter favFilter = (FavoritesGeocacheFilter) basicFilter;
                if (!favFilter.isPercentage() && favFilter.getMinRangeValue() != null) {
                    search.setMinFavoritepoints(Math.round(favFilter.getMinRangeValue()));
                }
                break;
            case STATUS:
                final StatusGeocacheFilter statusFilter = (StatusGeocacheFilter) basicFilter;
                search.setStatusFound(statusFilter.getStatusFound());
                search.setStatusOwn(statusFilter.getStatusOwned());
                search.setStatusEnabled(
                        statusFilter.isExcludeDisabled() && statusFilter.isExcludeArchived() ? Boolean.TRUE :
                                (statusFilter.isExcludeActive() && statusFilter.isExcludeArchived() ? FALSE : null));
                search.setShowArchived(!statusFilter.isExcludeArchived());
                break;
            case HIDDEN:
            case EVENT_DATE:
                final HiddenGeocacheFilter hiddenFilter = (HiddenGeocacheFilter) basicFilter;
                search.setPlacementDate(hiddenFilter.getMinDate(), hiddenFilter.getMaxDate());
                break;
            case LOG_ENTRY:
                final LogEntryGeocacheFilter foundByFilter = (LogEntryGeocacheFilter) basicFilter;
                if (foundByFilter.isInverse()) {
                    search.addNotFoundBy(foundByFilter.getFoundByUser());
                } else {
                    search.addFoundBy(foundByFilter.getFoundByUser());
                }
                break;
            default:
                break;
        }
    }
Searches the view port on the live map with Strategy.AUTO

@param viewport Area to search
main/src/main/java/cgeo/geocaching/connector/gc/GCMap.java