diff --git a/resources/sql/base_data.rar b/resources/sql/base_data.rar new file mode 100644 index 0000000..6fb8fb3 Binary files /dev/null and b/resources/sql/base_data.rar differ diff --git a/src/database/BuildDataSets.java b/src/database/BuildDataSets.java index 4aab21d..648228d 100644 --- a/src/database/BuildDataSets.java +++ b/src/database/BuildDataSets.java @@ -38,13 +38,21 @@ public void buildDataSet(int size) throws SQLException { currentLat = LAT_MIN; currentLon = LON_MIN; while (currentLat < LAT_MAX) { + Double startLat; + Double endLat; + startLat = currentLat; + endLat = currentLat + latLonStep; while (currentLon < LON_MAX) { dataTiles = new ArrayList>(); + Double startLon; + Double endLon; + startLon = currentLon; + endLon = currentLon + latLonStep; + // Get the data - dataTiles = getData(currentLat, currentLat + latLonStep, - currentLon, currentLon + latLonStep, conn); + dataTiles = getData(startLat, endLat, startLon, endLon, conn); DataTile tile = processTile(dataTiles, 1896, currentLat, currentLon); @@ -135,6 +143,10 @@ private DataTile processTile(ArrayList> tiles, * @return */ private int calcSlopeRank(Double slope) { + if(slope < 0){ + slope *= -1; + } + // (-0.5*(slope^2))+100 int rank = (int) (-0.5 * (Math.pow(slope, 2)) + 100); return rank; diff --git a/src/database/buildDataSets.java b/src/database/buildDataSets.java deleted file mode 100644 index 4aab21d..0000000 --- a/src/database/buildDataSets.java +++ /dev/null @@ -1,190 +0,0 @@ -package database; - -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; - -import main.DataTile; - -public class BuildDataSets { - // in meters!! - private final Double MOON_CIRC = 10921000d; - private final Double LAT_MAX = 90d; - private final Double LAT_MIN = -90d; - private final Double LON_MAX = 180d; - private final Double LON_MIN = -180d; - - /** - * Get base data from database and create a dataset for analysis - * - * @param lat - * @param lon - * @throws SQLException - */ - public void buildDataSet(int size) throws SQLException { - DbConnection dbConn = new DbConnection(); - - int latLonStep = (int) (360 / (MOON_CIRC / size)); - Double currentLat = LAT_MIN; - Double currentLon = LON_MIN; - String db = DataSets.getDb(size); - ArrayList> dataTiles; - Connection conn = dbConn.getConnection(); - - updateSetConfig(conn, db, latLonStep, latLonStep); - - currentLat = LAT_MIN; - currentLon = LON_MIN; - while (currentLat < LAT_MAX) { - while (currentLon < LON_MAX) { - dataTiles = new ArrayList>(); - - // Get the data - - dataTiles = getData(currentLat, currentLat + latLonStep, - currentLon, currentLon + latLonStep, conn); - - DataTile tile = processTile(dataTiles, 1896, currentLat, - currentLon); - if (tile != null) { - addTileSet(conn, db, tile); - } - dataTiles = null; - currentLon += latLonStep; - } - currentLat += latLonStep; - } - dbConn.closeConnection(conn); - } - - /** - * - * @param tiles - * @param distance - * @param lat - * @param lon - * @return - */ - private DataTile processTile(ArrayList> tiles, - int distance, double lat, double lon) { - int rankAverage; - int rankTotal = 0; - Integer finalLat; - Integer finalLon; - Double finalHeight; - Double heightTotal = 0d; - - ArrayList rankArray = new ArrayList(); - ArrayList heightArray = new ArrayList(); - - if (tiles.size() == 0) { - // Theres missing data so return null :( - return null; - } - - for (int x = 0; x < tiles.size() - 1; x++) { - - ArrayList tileRow = tiles.get(x); - - for (int y = 0; y < tileRow.size() - 1; y++) { - - Double slope; - Double opp; - Double centre = tileRow.get(y).getHeight(); - Double right = tileRow.get(y + 1).getHeight(); - Double below = tiles.get(x).get(y).getHeight(); - - heightArray.add(centre); - - // Calc right slope first - opp = centre - right; - slope = Math.toDegrees(Math.tan((opp / distance))); - rankArray.add(calcSlopeRank(slope)); - - // Calc below slope - opp = centre - below; - slope = Math.toDegrees(Math.tan((opp / distance))); - rankArray.add(calcSlopeRank(slope)); - } - } - - // Calculate rank - for (Integer rank : rankArray) { - rankTotal += rank; - } - rankAverage = rankTotal / rankArray.size(); - - for (Double height : heightArray) { - heightTotal += height; - } - finalHeight = heightTotal / heightArray.size(); - - // truncate lat/lon - finalLat = (int) lat; - finalLon = (int) lon; - - return new DataTile(finalLat.doubleValue(), finalLon.doubleValue(), - rankAverage, finalHeight); - } - - /** - * - * @param slope - * @return - */ - private int calcSlopeRank(Double slope) { - // (-0.5*(slope^2))+100 - int rank = (int) (-0.5 * (Math.pow(slope, 2)) + 100); - return rank; - } - - private ArrayList> getData(Double latStart, - Double latEnd, Double lonStart, Double lonEnd, Connection conn) - throws SQLException { - ArrayList> dataTileResults = new ArrayList>(); - Statement stmt = conn.createStatement(); - String stmtBuilder = String - .format("SELECT * FROM base_data WHERE (LAT > %f AND LAT < %f) AND (LON > %f AND LON < %f) ORDER BY LAT, LON", - latStart, latEnd, lonStart, lonEnd); - - ResultSet results = stmt.executeQuery(stmtBuilder); - results.beforeFirst(); - Long preLat = 0L; - ArrayList dataTileRow = new ArrayList(); - while (results.next()) { - Long lat = results.getLong("LAT"); - Long lon = results.getLong("LON"); - Long height = results.getLong("HEIGHT"); - if (lat != preLat) { - dataTileRow = new ArrayList(); - dataTileResults.add(dataTileRow); - preLat = lat; - } - dataTileRow.add(new DataTile(lat.doubleValue(), lon.doubleValue(), - height.doubleValue())); - - } - return dataTileResults; - } - - private void addTileSet(Connection conn, String db, DataTile tile) - throws SQLException { - Statement stmt = conn.createStatement(); - String stmtBuilder = String - .format("INSERT INTO %s (LAT, LON, HEIGHT, RANK) VALUES (%s, %s, %s, %d)", - db, tile.getLat().toString(), tile.getLon().toString(), - tile.getHeight().toString(), tile.getRank()); - stmt.execute(stmtBuilder); - } - - private void updateSetConfig(Connection conn, String setName, int latStep, - int lonStep) throws SQLException { - Statement stmt = conn.createStatement(); - String stmtBuilder = String - .format("UPDATE set_config SET LAT_STEP=%d, LON_STEP=%s WHERE DATA_SET='%s';", - latStep, lonStep, setName); - stmt.executeUpdate(stmtBuilder); - } -} diff --git a/src/database/EnterBaseData.java b/src/database/threads/EnterBaseData.java similarity index 90% rename from src/database/EnterBaseData.java rename to src/database/threads/EnterBaseData.java index 4e8ecc2..ceb8074 100644 --- a/src/database/EnterBaseData.java +++ b/src/database/threads/EnterBaseData.java @@ -1,4 +1,4 @@ -package database; +package database.threads; import image.ImageProcess; @@ -6,6 +6,8 @@ import java.sql.SQLException; import java.sql.Statement; +import database.DbConnection; + public class EnterBaseData implements Runnable { private ImageProcess process; diff --git a/src/database/threads/getPixelArea.java b/src/database/threads/GetPixelArea.java similarity index 63% rename from src/database/threads/getPixelArea.java rename to src/database/threads/GetPixelArea.java index dda663b..02a1f84 100644 --- a/src/database/threads/getPixelArea.java +++ b/src/database/threads/GetPixelArea.java @@ -2,11 +2,11 @@ import database.BuildDataSets; -public class getPixelArea implements Runnable { +public class GetPixelArea implements Runnable { private BuildDataSets set; - public getPixelArea(BuildDataSets set) { + public GetPixelArea(BuildDataSets set) { this.set = set; } diff --git a/src/image/ImageProcess.java b/src/image/ImageProcess.java index 79093c9..27134c4 100644 --- a/src/image/ImageProcess.java +++ b/src/image/ImageProcess.java @@ -8,9 +8,7 @@ import java.io.FileWriter; import java.io.FilenameFilter; import java.io.IOException; -import java.sql.Connection; import java.sql.SQLException; -import java.sql.Statement; import java.util.ArrayList; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -22,7 +20,7 @@ import com.sun.media.jai.codec.ImageCodec; import com.sun.media.jai.codec.ImageDecoder; -import database.EnterBaseData; +import database.threads.EnterBaseData; public class ImageProcess { @@ -167,8 +165,8 @@ private void convertRgb() throws Exception { private void fillDb() throws IOException, SQLException, InterruptedException { File processedFileDir = new File(OUT_DIR + ROW_DIR + PROCESSED_DIR); - EnterBaseData baseData = new EnterBaseData(this); - baseData.run(); + Thread baseData = new Thread(new EnterBaseData(this)); + baseData.start(); int rowFileSize = rowFilesSize(); for (int i = 0; i < rowFileSize; i++) { File row = rowFilesPoll(); diff --git a/src/main/Lunar.java b/src/main/Lunar.java index 1ad3de4..f761ad8 100644 --- a/src/main/Lunar.java +++ b/src/main/Lunar.java @@ -4,28 +4,20 @@ import image.PaletteProcess; import java.io.IOException; -import java.sql.Connection; -import java.sql.DriverManager; import java.sql.SQLException; import database.BuildDataSets; public class Lunar { - private final static String MYSQL_IP = "localhost"; - private final static String MYSQL_PORT = "3306"; - private final static String MYSQL_DB = "lunar"; - private final static String MYSQL_USER = "lunar"; - private final static String MYSQL_PASSWORD = "lunar"; - /** * @param args */ public static void main(String[] args) { try { - boolean buildDb = true; + boolean buildDb = false; - String path = "E:\\workspaces\\Lunar\\Lunar\\resources\\COLOR_SCALEBAR.TIF"; + String path = "resources\\COLOR_SCALEBAR.TIF"; Double totalElevation = 19910d; Double startElevationValue = -9150d; if (buildDb) { @@ -33,7 +25,7 @@ public static void main(String[] args) { palette.createPalette(path, totalElevation, startElevationValue); ImageProcess image = new ImageProcess(palette); - image.generateData("E:\\workspaces\\Lunar\\Lunar\\resources\\WAC_CSHADE_E000N1800_016P.TIF"); + image.generateData("resources\\WAC_CSHADE_E000N1800_016P.TIF"); } BuildDataSets dataSet = new BuildDataSets(); dataSet.buildDataSet(100000);