package org.pyneo.tabulae.map;
import android.util.Log;
import java.io.File;
import java.io.FileNotFoundException;
import org.mapsforge.map.android.graphics.AndroidGraphicFactory;
import org.mapsforge.map.android.view.MapView;
import org.mapsforge.map.layer.renderer.TileRendererLayer;
import org.mapsforge.map.reader.MapFile;
import org.mapsforge.map.datastore.MultiMapDataStore;
import org.mapsforge.map.rendertheme.ExternalRenderTheme;
import org.mapsforge.map.rendertheme.InternalRenderTheme;
import org.pyneo.tabulae.Tabulae;
import static org.pyneo.tabulae.map.Constants.*;
/**
* Default vector bases layer
*/
class LayerMapsForge extends LayerBase {
static final String ID = "mapsforge";
LayerMapsForge(Tabulae activity, MapView mapView) {
super(activity, mapView, false);
MultiMapDataStore multiMapDataStore = new MultiMapDataStore(MultiMapDataStore.DataPolicy.RETURN_ALL);
File mapsDir = new File(activity.getMapsDir(), ID);
if (DEBUG) Log.d(TAG, "LayerMapsForge searching in mapsDir=" + mapsDir);
File[] maps = mapsDir.listFiles();
if (maps != null) for (File map : maps) {
if (map.isFile()) {
try {
MapFile mapfile = new MapFile(map);
multiMapDataStore.addMapDataStore(mapfile, true, true);
if (DEBUG) Log.d(TAG, "LayerMapsForge loaded map=" + map + ", bb=" + mapfile.boundingBox());
}
catch (Exception e) {
Log.e(TAG, "LayerMapsForge error map=" + map, e);
}
}
}
tileLayer = new TileRendererLayer(tileCache, multiMapDataStore,
mapView.getModel().mapViewPosition, false, true, true, AndroidGraphicFactory.INSTANCE);
boolean success = false;
File themesDir = new File(mapsDir, "themes");
File theme = new File(themesDir, "theme.xml");
// File[] themes = themes.listFiles();
// for (File theme: themes) {
if (theme.isFile() && theme.getPath().endsWith(".xml")) {
try {
((TileRendererLayer) tileLayer).setXmlRenderTheme(new ExternalRenderTheme(theme));
if (DEBUG) Log.d(TAG, "LayerMapsForge loaded theme=" + theme);
// break;
success = true;
}
catch (FileNotFoundException e) {
Log.e(TAG, "LayerMapsForge error theme=" + theme, e);
}
}
// }
if (!success) {
if (DEBUG) Log.d(TAG, "LayerMapsForge fallback to default theme");
((TileRendererLayer) tileLayer).setXmlRenderTheme(InternalRenderTheme.OSMARENDER);
}
mapView.getLayerManager().getLayers().add(0, tileLayer);
setVisible(false);
}
byte getZoomLevelMin() {
return 8;
}
String getId() {
return ID;
}
}