问题
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?
回答1:
Please follow Issue 515 to track this issue. We have implemented a fix and we will release a proper update soon.
回答2:
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)
回答3:
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
回答4:
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;
}
});
来源:https://stackoverflow.com/questions/21191767/osmdroid-and-mapnik-tile-provider-no-longer-working