Como usar o MOBAC criado o arquivo fonte do mosaico OSMDroid SQLite offline?
Eu tenho puxado meu cabelo para fora tentando obter o meu próprio offline Mobile Atlas Creator mapa OSMDroid SQLite trabalhando com OSMDroid 3.0.8 sem sorte. Tem sido um longo 3 dias. Vou tentar explicar com clipes do meu aplicativo. Estive estendendo ItemizedIconOverlay e OverlayItem, então espero que não fique muito confuso.
Eu criei meu próprio arquivo de mapa do OSMDroid SQLite com 3 diferentes níveis de zoom para um pequeno, como 10 kms quadrados. Eu copiei o arquivo "base.sqlite" resultante em meu diretório project / res / raw /. Observe que os GeoPoints no meu aplicativo devem estar bem dentro do intervalo de ladrilhos do mapa. O arquivo "base.sqlite" deve ser salvo no diretório de dados específico do aplicativo.
Em seguida, criei o diretório / osmdroid no meu telefone para que eu pudesse remover os mapas anteriormente armazenados em cache. Eu pensei que tinha meus próprios mapas off-line trabalhando até que eu liguei o modo Avião e percebi que os mapas em cache ainda estavam disponíveis.
Agora tudo que eu obtenho são espaços em branco. Eu não tenho ideia de como fazer isso acontecer. Eu vi alguns exemplos, mas depois de uma tonelada de experimentos, não consegui fazer nenhum deles funcionar.
private Hashtable<String, NodeOverlayItem> nodes = new Hashtable<String, NodeOverlayItem>();
private MapView mapView;
private Context context;
private LocationManager locManager;
private MapController mapController;
private MapTileProviderArray mapProvider;
private String mapTileArchivePath = "base.sqlite";
private ResourceProxy resourceProxy;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
this.mapView = new MapView(this, 256);
this.mapView.setBuiltInZoomControls(true);
this.mapView.setMultiTouchControls(true);
this.context = this.getApplicationContext();
this.resourceProxy = new DefaultResourceProxyImpl(context);
XYTileSource TILERENDERER = new XYTileSource("test",
ResourceProxy.string.offline_mode,
1, 20, 256, ".png", "http://127.0.0.1");
SimpleRegisterReceiver simpleReceiver = new SimpleRegisterReceiver(this.context);
IArchiveFile[] archives = { ArchiveFileFactory.getArchiveFile(this.getMapsFile()) };
MapTileModuleProviderBase moduleProvider = new MapTileFileArchiveProvider(
simpleReceiver,
TILERENDERER,
archives);
this.mapProvider = new MapTileProviderArray(TILERENDERER, null, new MapTileModuleProviderBase[] { moduleProvider });
this.mapProvider.setUseDataConnection(false);
this.mapView = new MapView(this, 256, this.resourceProxy, this.mapProvider);
this.mapView.setUseDataConnection(false);
mapController = mapView.getController();
mapController.setZoom(18);
mapController.setCenter(new GeoPoint((int)(45.349622 * 1E6), (int)(-75.880700 *1E6)));
this.setContentView(mapView);
} catch(Exception ex) {
Log.e("test", ex.getMessage());
}
}
public File getMapsFile() throws IOException {
Log.d("test", "Trying to load map tiles to: " + this.mapTileArchivePath);
FileOutputStream fos = this.openFileOutput(this.mapTileArchivePath, Context.MODE_PRIVATE);
InputStream in = getResources().openRawResource(R.raw.osmdroid);
byte[] buff = new byte[1024];
int read = 0;
try {
while ((read = in.read(buff)) > 0) {
fos.write(buff, 0, read);
}
} finally {
in.close();
fos.close();
}
return new File(this.getFilesDir(), this.mapTileArchivePath);
}