public static void main(String[] args) { String testDataLocation = "testData/HighResolutionTerrain/"; HashMap<String, Sector> sectors = new HashMap<String, Sector>(); sectors.put( testDataLocation + "HRTOutputTest01.txt", Sector.fromDegrees(37.8, 38.3, -120, -119.3)); sectors.put( testDataLocation + "HRTOutputTest02.txt", Sector.fromDegrees(32.34767, 32.77991, 70.88239, 71.47658)); sectors.put( testDataLocation + "HRTOutputTest03.txt", Sector.fromDegrees(32.37825, 71.21130, 32.50050, 71.37926)); try { if (args.length > 0 && args[0].equals("-generateTestData")) { for (Map.Entry<String, Sector> sector : sectors.entrySet()) { String filePath = sector.getKey(); generateReferenceValues(filePath, sector.getValue()); } } for (Map.Entry<String, Sector> sector : sectors.entrySet()) { String filePath = sector.getKey(); ArrayList<Position> referencePositions = readReferencePositions(filePath); ArrayList<Position> computedPositions = computeElevations(referencePositions); testPositions(filePath, referencePositions, computedPositions); } } catch (FileNotFoundException e) { e.printStackTrace(); } }
protected static ArrayList<Position> computeElevations(ArrayList<Position> locations) { Sector sector = Sector.boundingSector(locations); HighResolutionTerrain hrt = new HighResolutionTerrain(new Earth(), sector, null, 1.0); ArrayList<Position> computedPositions = new ArrayList<Position>(); for (LatLon latLon : locations) { Double elevation = hrt.getElevation(latLon); computedPositions.add(new Position(latLon, Math.round(elevation * 10000.0) / 10000.0)); } return computedPositions; }
protected static ArrayList<Position> generateReferenceLocations( Sector sector, int numLats, int numLons) { ArrayList<Position> locations = new ArrayList<Position>(); double dLat = (sector.getMaxLatitude().degrees - sector.getMinLatitude().degrees) / (numLats - 1); double dLon = (sector.getMaxLongitude().degrees - sector.getMinLongitude().degrees) / (numLons - 1); for (int j = 0; j < numLats; j++) { double lat = sector.getMinLatitude().degrees + j * dLat; for (int i = 0; i < numLons; i++) { double lon = sector.getMinLongitude().degrees + i * dLon; // Specify angles to five decimal places. locations.add( Position.fromDegrees( Math.round(lat * 100000.0) / 100000.0, Math.round(lon * 100000.0) / 100000.0, 0)); } } return locations; }