Question

I have a developed, deployed and previously successful application which uses Osmdroid to load tiles from the default tile provider which is Mapnik

mMapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);

or

mMapView.setTileSource(TileSourceFactory.MAPNIK);

Until recently (maybe since today) the tiles on real devices (a phone and a tablet) do not load anymore. I am using osmdroid version 3.0.5. If I try the latest 4.0 version in a small sample project on an emulator, I see '403 forbidden responses' in the logcat when trying to download maptiles. If I switch the tile source to

mMapView.setTileSource(TileSourceFactory.MAPQUESTOSM);

then the map is visible with no problem. I don't see any reported issues on the Osmdroid web site issues list, nor does a Google search reveal any new problems reported, so I am asking if anyone else sees this new behaviour from Mapnik and might know of a fix?

Was it helpful?

Solution

Please follow Issue 515 to track this issue. We have implemented a fix and we will release a proper update soon.

OTHER TIPS

Having the same problem as well.

Unfortunately, it seems that osmdroid was banned from accessing http://tile.openstreetmap.org. Reading the tile usage policy, I found these two things which might explain why osmdroid got banned:

Heavy use (e.g. distributing an app that uses tiles from openstreetmap.org) is forbidden without prior permission from the System Administrators.

and

Valid User-Agent identifying application. Faking another app's User-Agent WILL get you blocked.

(osmdroid's useragent is "Apache-HttpClient/UNAVAILABLE (java 1.4)" which is pretty generic)

From OpenPisteMap:

If you start getting "403 Forbidden" responses, stop. Don't just keep hammering away at the server - it probably means that you've been banned for abusive behaviour and continuing to hammer away at the server will just extend your ban.

http://wiki.osm.org/wiki/Blocked

You can use this code to set the user agent

        HttpClientFactory.setFactoryInstance(new IHttpClientFactory() {
        public HttpClient createHttpClient() {
            final DefaultHttpClient client = new DefaultHttpClient();
            client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "useragent");
            return client;
        }
    });
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top