Wie verwende ich eine von MOBAC erstellte OSMDroid SQLite-Kachel-Quelldatei offline?

Ich habe mir die Haare ausgerissen und versucht, meine eigene Offline-Karte für Mobile Atlas Creator OSMDroid SQLite ohne Glück mit OSMDroid 3.0.8 zu erstellen. Es sind lange 3 Tage vergangen. Ich werde versuchen, mit Clips aus meiner Anwendung zu erklären. Ich habe ItemizedIconOverlay und OverlayItem erweitert, damit es nicht zu verwirrend wird.

Ich habe meine eigene OSMDroid SQLite-Kartendatei mit 3 verschiedenen Zoomstufen für eine kleine Fläche von etwa 10 Quadratkilometern erstellt. Ich habe die resultierende "base.sqlite" -Datei in mein Projekt / res / raw / -Verzeichnis kopiert. Beachten Sie, dass die GeoPoints in meiner Anwendung innerhalb des Kachelbereichs der Karte liegen sollten. Die Datei "base.sqlite" sollte im anwendungsspezifischen Datenverzeichnis gespeichert werden.

Als nächstes habe ich das Verzeichnis / osmdroid auf meinem Telefon durchsucht, damit ich die zuvor zwischengespeicherten Karten entfernen konnte. Ich dachte, ich hätte meine eigenen Offline-Karten, bis ich den Flugzeugmodus einschaltete und bemerkte, dass die zwischengespeicherten Karten immer noch verfügbar waren.

Jetzt bekomme ich nur noch Leerzeichen. Ich habe keine Ahnung, wie ich das hinbekomme. Ich habe ein paar Beispiele gesehen, aber nach einer Menge Experimente war es mir nicht gelungen, eines davon zum Laufen zu bringen.

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);
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage