X-Git-Url: https://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Ffunction%2Fsrtm%2FTileFinder.java;h=5ada68ca1b65e5428c3d6f961db1086e6b8086db;hp=60a9479d1289faae0523e0fd7d025b56e816d37e;hb=HEAD;hpb=2302358503c38817e19f6e529f6c9e530aac0e86 diff --git a/src/tim/prune/function/srtm/TileFinder.java b/src/tim/prune/function/srtm/TileFinder.java index 60a9479..d237971 100644 --- a/src/tim/prune/function/srtm/TileFinder.java +++ b/src/tim/prune/function/srtm/TileFinder.java @@ -3,17 +3,19 @@ package tim.prune.function.srtm; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; -import java.util.ArrayList; /** * Class to get the URLs of the SRTM tiles * using the srtmtiles.dat file */ -public abstract class TileFinder +public class TileFinder { + /** tile data loaded from file */ + private byte[] _tileData = null; + /** URL prefix for all tiles */ - private static final String URL_PREFIX = "https://dds.cr.usgs.gov/srtm/version2_1/SRTM3/"; + private static final String URL_PREFIX = "https://srtm.kurviger.de/SRTM3/"; /** Directory names for each continent */ private static final String[] CONTINENTS = {"", "Eurasia", "North_America", "Australia", "Islands", "South_America", "Africa"}; @@ -24,28 +26,33 @@ public abstract class TileFinder * @param inTiles list of Tiles to get * @return array of URLs */ - public static URL[] getUrls(ArrayList inTiles) + public URL getUrl(SrtmTile inTile) { - if (inTiles == null || inTiles.size() < 1) {return null;} - URL[] urls = new URL[inTiles.size()]; - // Read dat file into array - byte[] lookup = readDatFile(); - for (int t=0; t 0) { - try { - urls[t] = new URL(URL_PREFIX + CONTINENTS[dir] + "/" + tile.getTileName()); - } catch (MalformedURLException e) {} // ignore error, url stays null - } - } catch (ArrayIndexOutOfBoundsException e) {} // ignore error, url stays null + System.err.println("Build error: resource srtmtiles.dat missing!"); + return null; + } } - return urls; + + URL url = null; + // Get byte from lookup array + int idx = (inTile.getLatitude() + 59)*360 + (inTile.getLongitude() + 180); + try + { + int dir = _tileData[idx]; + if (dir > 0) { + try { + url = new URL(URL_PREFIX + CONTINENTS[dir] + "/" + inTile.getTileName()); + } catch (MalformedURLException e) {} // ignore error, url stays null + } + } catch (ArrayIndexOutOfBoundsException e) {} // ignore error, url stays null + + return url; } /**