package haven.geoloc; import java.awt.image.BufferedImage; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; public class GeolocGen { private static String LOOKUP_FILE = "geoloc.dat"; public static void main(String[] args) { if (args.length == 0) { System.out.println("Usage: java -jar geolocgen.jar [PATH_TO_ZOOM_9_TILES_DIR]"); return; } String MAP_DIR = args[0]; DataOutputStream os = null; try { File lf = new File(LOOKUP_FILE); if (!lf.exists()) lf.createNewFile(); os = new DataOutputStream(new FileOutputStream(lf.getAbsoluteFile())); File[] files = new File(MAP_DIR).listFiles(); for (File file : files) { if (file.isFile()) { // ignore wget duplicates (e.g .png.1) String fileName = file.getName(); if (fileName.charAt(fileName.length()-1) != 'g') continue; BufferedImage img = null; try { img = ImageIO.read(file); } catch (IOException e) { System.err.println("Cannot read map tile."); e.printStackTrace(); } img = Geoloc.preprocessMapTile(img); MapTileData mtd = Geoloc.getHash(img); if (mtd.weight != 0) { os.writeShort(mtd.weight); os.writeLong(mtd.hash); String[] coords = fileName.substring(0, fileName.length() - 4).split("_"); os.writeShort(Short.valueOf(coords[0])); os.writeShort(Short.valueOf(coords[1])); } } } } catch (IOException e) { System.err.println("Failed to write lookup file."); e.printStackTrace(); } finally { try { os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }