package org.droidplanner.services.android.impl.core.srtm; import org.droidplanner.services.android.impl.core.srtm.Srtm.OnProgressListner; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class SrtmRegions { static final String[] REGIONS = { "Eurasia", "Africa", "Australia", "Islands", "North_America", "South_America" }; private Map<String, Integer> regionMap = new HashMap<String, Integer>(); private String path; public SrtmRegions(String path) { this.path = path; } /* * Returns region name for a file */ public String findRegion(String fname, OnProgressListner listner) throws Exception { if (regionMap.isEmpty()) { fillRegionData(listner); } String name = fname.replace(".hgt", ""); if (regionMap.containsKey(name)) { return REGIONS[regionMap.get(name)]; } throw new Exception("Null Region"); } private void fillRegionData(OnProgressListner listner) throws Exception { String region; for (int i = 0; i < SrtmRegions.REGIONS.length; i++) { region = SrtmRegions.REGIONS[i]; String indexPath = region; indexPath = SrtmDownloader.getIndexPath(path) + indexPath; File indexDir = new File(indexPath); if (!indexDir.exists()) { indexDir.mkdirs(); } indexPath += ".index.html"; File indexFile = new File(indexPath); if (!indexFile.exists()) { try { new SrtmDownloader(listner).downloadRegionIndex(i, path); } catch (IOException e) { // download error, try again with the next attempt regionMap.clear(); throw new Exception("Null Region"); } } Scanner scanner = new Scanner(indexFile); while (scanner.hasNext()) { String line = scanner.next(); if (line.contains("href=\"")) { int index = line.indexOf(".hgt.zip") - 7; if (index >= 0) { String srtm = line.substring(index, index + 7); regionMap.put(srtm, i); } else { index = line.indexOf("hgt.zip") - 7; if (index >= 0) { String srtm = line.substring(index, index + 7); regionMap.put(srtm, i); } } } } scanner.close(); } } }