Advertisement
Guest User

Untitled

a guest
May 24th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.sql.*;
  2. import java.util.Scanner;
  3.  
  4.  
  5. public class CollisionAvoider {
  6.  
  7. static final String JDBC_DRIVER = "org.mariadb.jdbc.Driver";
  8. static final String DB_URL = "jdbc:mariadb://localhost/mining";
  9.  
  10. // Database credentials
  11. static final String USER = "root";
  12. static final String PASS = "123456";
  13. private static Scanner reader;
  14. public static Connection conn;
  15.  
  16. private double distance(double lat1, double lon1, double lat2, double lon2, String unit) {
  17. double theta = lon1 - lon2;
  18. double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
  19. dist = Math.acos(dist);
  20. dist = rad2deg(dist);
  21. dist = dist * 60 * 1.1515;
  22. if (unit == "K") {
  23. dist = dist * 1.609344;
  24. } else if (unit == "N") {
  25. dist = dist * 0.8684;
  26. }
  27.  
  28. return (dist);
  29. }
  30.  
  31. /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
  32. /*:: This function converts decimal degrees to radians :*/
  33. /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
  34. private double deg2rad(double deg) {
  35. return (deg * Math.PI / 180.0);
  36. }
  37.  
  38. /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
  39. /*:: This function converts radians to decimal degrees :*/
  40. /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
  41. private double rad2deg(double rad) {
  42. return (rad * 180 / Math.PI);
  43. }
  44.  
  45. public void makeConnection() throws ClassNotFoundException, SQLException
  46. {
  47. Class.forName(JDBC_DRIVER);
  48. System.out.println("Connecting to a selected database...");
  49. conn = DriverManager.getConnection(
  50. DB_URL, USER, PASS);
  51. System.out.println("Connected database successfully...");
  52. }
  53.  
  54. public double fahrenheitToCelcius(double fahrenheit)
  55. {
  56. //(°F - 32) x 5/9 = °C
  57. return (fahrenheit - 32) * 5.0/9.0;
  58. }
  59.  
  60. public boolean checkBadWeather(double latitude, double longitude, String day, String month, String year) throws SQLException
  61. {
  62. String query = "SELECT * FROM gsod g, stations s WHERE (g.temp < 32 OR g.fog = 1 OR g.rain_drizzle = 1 OR g.snow_ice_pellets = 1 OR g.hail =1 OR g.thunder = 1 OR g.tornado_funnel_cloud = 1) AND g.year = '" + year + "' AND g.mo = '" + month + "' AND g.da = '" +
  63. day + "' AND s.usaf = g.stn AND s.wban = g.wban";
  64.  
  65. // create the java statement
  66. Statement st = conn.createStatement();
  67.  
  68. // execute the query, and get a java resultset
  69. ResultSet rs = st.executeQuery(query);
  70. // iterate through the java resultset
  71. while (rs.next())
  72. {
  73. double distanceBetween = distance(rs.getFloat("s.lat"), rs.getFloat("s.lon"), latitude, longitude, "K");
  74. if (distanceBetween < 10)
  75. {
  76. return true;
  77. }
  78. }
  79. return false;
  80. }
  81.  
  82. public boolean checkBadWeather(String street, String day, String month, String year) throws SQLException
  83. {
  84. String query = "SELECT * FROM gsod g, stations s, nypd_mv_collisions m WHERE (g.temp < 32 OR g.fog = 1 OR g.rain_drizzle = 1 OR g.snow_ice_pellets = 1 OR g.hail = 1 OR g.thunder = 1 OR g.tornado_funnel_cloud = 1) AND g.year = '" + year + "' AND g.mo = '" + month + "' AND g.da = '" +
  85. day + "' AND s.usaf = g.stn AND s.wban = g.wban AND (m.on_street_name LIKE '" + street + "' OR m.off_street_name LIKE '" + street + "' OR m.cross_street_name LIKE '" + street + "')";
  86.  
  87. // create the java statement
  88. Statement st = conn.createStatement();
  89.  
  90. // execute the query, and get a java resultset
  91. ResultSet rs = st.executeQuery(query);
  92. // iterate through the java resultset
  93. while (rs.next())
  94. {
  95. double distanceBetween = distance(rs.getFloat("s.lat"), rs.getFloat("s.lon"), rs.getFloat("m.latitude"), rs.getFloat("m.longitude"), "K");
  96. if (distanceBetween < 10)
  97. {
  98. return true;
  99. }
  100. }
  101. return false;
  102. }
  103.  
  104. public double averageCrashesPerDay(String street) throws SQLException
  105. {
  106. String query = "SELECT (count(*) / 365) as crash_count FROM nypd_mv_collisions m WHERE (m.on_street_name LIKE '" + street + "' OR m.off_street_name LIKE '" + street + "' OR m.cross_street_name LIKE '" + street + "')";
  107.  
  108. // create the java statement
  109. Statement st = conn.createStatement();
  110.  
  111. // execute the query, and get a java resultset
  112. ResultSet rs = st.executeQuery(query);
  113. rs.first();
  114. return rs.getDouble("crash_count");
  115. }
  116.  
  117. public int numberOfCrashes(String street, String date) throws SQLException
  118. {
  119. String query = "SELECT count(*) as crash_count FROM nypd_mv_collisions m WHERE (m.on_street_name LIKE '" + street + "' OR m.off_street_name LIKE '" + street + "' OR m.cross_street_name LIKE '" + street + "') AND DATE(m.timestamp) = STR_TO_DATE('" + date + "', '%Y-%m-%d')";
  120.  
  121. // create the java statement
  122. Statement st = conn.createStatement();
  123.  
  124. // execute the query, and get a java resultset
  125. ResultSet rs = st.executeQuery(query);
  126. rs.first();
  127. return rs.getInt("crash_count");
  128. }
  129.  
  130. public double increase(double first, double second)
  131. {
  132. double ratio = first / second;
  133. return ratio * 100.0;
  134. }
  135.  
  136. public double increaseInRisk(double riskIncrease1, double riskIncrease2, double crashIncreaseCount1, double crashIncreaseCount2)
  137. {
  138. if (riskIncrease1 > riskIncrease2 && crashIncreaseCount1 > crashIncreaseCount2)
  139. {
  140. return increase(riskIncrease1, riskIncrease2);
  141. }
  142. else
  143. {
  144. return 0;
  145. }
  146. }
  147.  
  148. public double compareTwoStreets(String street1, String street2, String date) throws SQLException
  149. {
  150. double average1 = averageCrashesPerDay(street1);
  151. double average2 = averageCrashesPerDay(street2);
  152. double number1 = numberOfCrashes(street1, date);
  153. double number2 = numberOfCrashes(street2, date);
  154. double riskInrease1 = increase(number1, average1);
  155. double riskInrease2 = increase(number2, average2);
  156. return increaseInRisk(riskInrease1, riskInrease2, number1 - average1, number2 - average2);
  157. }
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement