org.osmdroid.mtp.util.DbCreator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of OSMMapTilePackager Show documentation
Show all versions of OSMMapTilePackager Show documentation
A tool to package OpenStreetMap tiles
package org.osmdroid.mtp.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
public class DbCreator {
public static void putFolderToDb(final File pDestinationFile, final File pFolderToPut) throws ClassNotFoundException, SQLException, FileNotFoundException, IOException {
pDestinationFile.delete();
Class.forName("org.sqlite.JDBC");
final Connection conn = DriverManager.getConnection("jdbc:sqlite:" + pDestinationFile);
final Statement stat = conn.createStatement();
stat.execute("CREATE TABLE tiles (key INTEGER PRIMARY KEY, provider TEXT, tile BLOB)");
stat.close();
final PreparedStatement prep = conn.prepareStatement("insert into tiles values (?, ?, ?);");
File[] listFiles = pFolderToPut.listFiles();
if (listFiles != null) {
for (int zf = 0; zf < listFiles.length; zf++) {
File[] listFiles1 = listFiles[zf].listFiles();
if (listFiles1 != null) {
for (int xf = 0; xf < listFiles1.length; xf++) //for(final File xf : zf.listFiles())
{
File[] listFiles2 = listFiles1[xf].listFiles();
if (listFiles2 != null) {
for (int yf = 0; yf < listFiles2.length; yf++) //for(final File yf : xf.listFiles())
{
// escaped path separator
// Windows -> \\
// Unix -> \/
final String[] s = listFiles2[yf].toString().split("\\" + File.separator);
final long z = Long.parseLong(s[s.length - 3]);
final long x = Long.parseLong(s[s.length - 2]);
final long y = Long.parseLong(s[s.length - 1].split(".png")[0]);
final long index = (((z << z) + x) << z) + y;
prep.setLong(1, index);
final String provider = s[s.length - 4];
prep.setString(2, provider);
final byte[] image = new byte[(int) listFiles2[yf].length()];
final FileInputStream str = new FileInputStream(listFiles2[yf]);
str.read(image);
str.close();
prep.setBytes(3, image);
prep.executeUpdate();
}
}
}
}
}
}
conn.setAutoCommit(false);
prep.executeBatch();
conn.setAutoCommit(true);
conn.close();
}
}