package se.kodapan.osm.slippymap;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import se.kodapan.osm.util.slippymap.SlippyMap;
import se.kodapan.osm.util.slippymap.TMS;
import se.kodapan.osm.util.slippymap.Tile;
import java.io.InputStream;
import java.util.List;
/**
* @author kalle
* @since 8/25/13 8:02 PM
*/
public class PrerenderEkonomiskaKartan {
private static Logger log = LoggerFactory.getLogger(PrerenderEkonomiskaKartan.class);
/**
* mvn exec:java -Dexec.mainClass="se.kodapan.osm.slippymap.PrerenderEkonomiskaKartan"
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
HttpClient httpClient = new DefaultHttpClient();
double southLatitude = 10.634765625d;
double westLongitude = 55.42901345240739d;
double northLatitude = 24.9609375d;
double eastLongitude = 69.50376519563683d;
byte[] buf = new byte[49152];
SlippyMap slippyMap = new TMS("http://osm.kodapan.se:8080/tms/1.0.0/ek_EPSG3857/%{z}/%{x}/%{y}.png");
int totalTiles = 0;
for (int z = 12; z < 18; z++) {
long totalBytesReadZ = 0;
long timestampZ = System.currentTimeMillis();
List<Tile> tiles = slippyMap.listTiles(southLatitude, westLongitude, northLatitude, eastLongitude, z);
// Collections.shuffle(tiles);
long statusBytesRead = 0;
int tilesProccessedZ = 0;
for (Tile tile : tiles) {
tilesProccessedZ++;
totalTiles++;
String url = slippyMap.toURL(tile);
HttpGet get = new HttpGet(url);
HttpResponse response = httpClient.execute(get);
if (response.getStatusLine().getStatusCode() == 200) {
long bytesRead = 0;
try {
InputStream httpContent = response.getEntity().getContent();
while (true) {
int read = httpContent.read(buf, 0, buf.length);
if (read > 0) {
bytesRead += read;
statusBytesRead += read;
totalBytesReadZ += read;
} else {
break;
}
}
} finally {
response.getEntity().getContent().close();
}
if (statusBytesRead > 1024 * 1024) {
double tilesLeft = tiles.size() - tilesProccessedZ;
double millisecondsPerTile = (System.currentTimeMillis() - timestampZ) / tilesProccessedZ;
double millisecondsToCompletion = millisecondsPerTile * tilesLeft;
int estimatedMinutesToCompletion = (int) (millisecondsToCompletion / 1000d / 60d);
double bytesPerTile = totalBytesReadZ / tilesProccessedZ;
int estimatedTotalMegabytes = (int)(bytesPerTile * (double)tiles.size()) / 1024/1024;
log.info("Processed #" + totalTiles + "/ " + tiles.size() + " " + url + "\t" + bytesRead + " bytes");
log.info("Estimated " + estimatedMinutesToCompletion + " minutes left to completion.");
log.info((totalBytesReadZ / 1024 / 1024) + " total megabytes worth of tiles successfully requested, estimated total of " + estimatedTotalMegabytes + " megabytes.");
statusBytesRead = 0;
}
} else {
log.warn(tile.toString() + "\t" + response.getStatusLine().toString());
}
}
System.currentTimeMillis();
}
System.currentTimeMillis();
}
}