package org.pyneo.tabulae.map; import java.net.MalformedURLException; import java.net.URL; import org.mapsforge.core.model.Tile; import org.mapsforge.map.android.graphics.AndroidGraphicFactory; import org.mapsforge.map.android.view.MapView; import org.mapsforge.map.layer.download.TileDownloadLayer; import org.mapsforge.map.layer.download.tilesource.OnlineTileSource; import org.pyneo.tabulae.Tabulae; /** * Google satellite based layer */ class LayerGoogleSat extends LayerBase { static final String ID = "google_sat"; static final String strGalileo = "Galileo"; LayerGoogleSat(Tabulae activity, MapView mapView) { super(activity, mapView, true); tileLayer = new TileDownloadLayer(tileCache, mapView.getModel().mapViewPosition, new Source(), AndroidGraphicFactory.INSTANCE); mapView.getLayerManager().getLayers().add(0, tileLayer); setVisible(false); } String getId() { return ID; } byte getZoomLevelMax() { return (byte) 18; } static class Source extends OnlineTileSource { Source() { super(new String[]{"khms%d.google.com",}, 80); setAlpha(false); setBaseUrl("/kh/v=140"); setExtension("png"); setName(ID); setParallelRequestsLimit(8); setProtocol("http"); setTileSize(256); setZoomLevelMax(getZoomLevelMax()); setZoomLevelMin(getZoomLevelMin()); } @Override public URL getTileUrl(Tile tile) throws MalformedURLException { int servernum = (tile.tileX + 2 * tile.tileY) % 4; return new URL(getProtocol(), String.format(getHostName(), servernum), port, getBaseUrl() + "&hl=" + "en" + "&src=" + "app" + "&x=" + tile.tileX + "&y=" + tile.tileY + "&z=" + tile.zoomLevel + "&scale=" + true + "&s=" + strGalileo.substring(0, (tile.tileX * 3 + tile.tileY) % 8) ); } } }