Downloading of tiles should be in separate threads so that each connection to a tile server has its own thread.
Connections to tile servers should use the "keep alive" feature. At the moment for every tile a new connection is created.
Perhaps create an (abstract) interface / abstract class TileProvider? Not sure, if there is an use case.
Separation between http download and tile providing since http download is needed for wikipedia (and perhaps other stuff) integration also.