class TileWalker {

    public List<TileGeometry> collectTiles()
    {
        List<TileGeometry> theGeometries = New.list();
        XrayGogglesModel model = myModel.clone();
        boolean hasGeo = model.getLowerLeftGeo() != null && model.getLowerRightGeo() != null && model.getUpperLeftGeo() != null
                && model.getUpperRightGeo() != null && model.getCenterGeo() != null;
        boolean hasScreen = model.getLowerLeft() != null && model.getLowerRight() != null && model.getUpperLeft() != null
                && model.getUpperRight() != null;
        if (hasGeo && hasScreen)
        {
            Collection<Geometry> geometries = myGeometryRegistry.getGeometries();
            for (Geometry geometry : geometries)
            {
                if (geometry instanceof TileGeometry)
                {
                    TileGeometry tile = (TileGeometry)geometry;
                    if (tile.getBounds() instanceof GeographicBoundingBox
                            && overlaps((GeographicBoundingBox)tile.getBounds(), model))
                    {
                        collectTiles(tile, theGeometries, model);
                    }
                }
            }
        }

        return theGeometries;
    }

    public  TileWalker(MapManager mapManager, GeometryRegistry geometryRegistry, XrayGogglesModel model);

}