Projektteil 2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

EarthquakeLocation.java 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. package de.edotzlaff.detection;
  2. import android.hardware.Sensor;
  3. import android.hardware.SensorEvent;
  4. import android.hardware.SensorEventListener;
  5. import android.hardware.SensorManager;
  6. import android.os.Build;
  7. import android.os.CountDownTimer;
  8. import android.provider.ContactsContract;
  9. import android.util.Log;
  10. import androidx.annotation.NonNull;
  11. import androidx.annotation.RequiresApi;
  12. import androidx.fragment.app.FragmentActivity;
  13. import android.os.Bundle;
  14. import android.widget.Toast;
  15. import com.google.android.gms.maps.CameraUpdateFactory;
  16. import com.google.android.gms.maps.GoogleMap;
  17. import com.google.android.gms.maps.OnMapReadyCallback;
  18. import com.google.android.gms.maps.SupportMapFragment;
  19. import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  20. import com.google.android.gms.maps.model.LatLng;
  21. import com.google.android.gms.maps.model.MarkerOptions;
  22. import com.google.android.gms.tasks.OnCompleteListener;
  23. import com.google.android.gms.tasks.Task;
  24. import com.google.firebase.database.DataSnapshot;
  25. import com.google.firebase.database.DatabaseReference;
  26. import com.google.firebase.database.FirebaseDatabase;
  27. import de.edotzlaff.detection.detektion.Detektionssignal;
  28. import de.edotzlaff.detection.detektion.Epizentrum;
  29. import de.edotzlaff.detection.detektion.Erdbeben;
  30. import de.edotzlaff.detection.detektion.berechnung.mathObjekte.Koordinaten;
  31. import java.time.LocalDateTime;
  32. import java.time.format.DateTimeFormatter;
  33. import java.util.ArrayList;
  34. import java.util.Objects;
  35. public class EarthquakeLocation extends FragmentActivity implements OnMapReadyCallback {
  36. private GoogleMap mMap;
  37. private static final String TAGEPIZENTRUM = "Epizentrum";
  38. private DatabaseReference mDatenbank;
  39. private double latitudeD1, latitudeD2, latitudeD3, latitudeD4, latitudeEPI;
  40. private double longitudeD1, longitudeD2, longitudeD3, longitudeD4, lonitudeEPI;
  41. private String dev1, dev2, dev3, dev4;
  42. Epizentrum epizentrum;
  43. @Override
  44. protected void onCreate(Bundle savedInstanceState) {
  45. super.onCreate(savedInstanceState);
  46. setContentView(R.layout.activity_earthquake_location);
  47. getLocationInfo();
  48. // Obtain the SupportMapFragment and get notified when the map is ready to be used.
  49. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
  50. mapFragment.getMapAsync(this);
  51. }
  52. //##########################################################################################################################################################################
  53. //################################################################## vvv DB Code vvv #####################################################################################
  54. public void getLocationInfo()
  55. {
  56. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  57. mDatenbank.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
  58. @RequiresApi(api = Build.VERSION_CODES.O)
  59. @Override
  60. public void onComplete(@NonNull Task<DataSnapshot> task) {
  61. if (!task.isSuccessful()) {
  62. System.out.println("Datenbank Fehler in getDataBaseValuesNoListener");
  63. }
  64. else{
  65. defineGPSforMapping(task.getResult());
  66. epizentrum = ermittleEpizentrum(task.getResult());
  67. //ermittleEpizentrum(task.getResult());
  68. //mapToDetektionssignale(task.getResult());
  69. }
  70. }
  71. });
  72. }
  73. public void defineGPSforMapping(DataSnapshot data)
  74. {
  75. String breitengradString;
  76. String laengengradString;
  77. String androidID;
  78. for(int i =1; i<=3; i++)
  79. {
  80. breitengradString = data.child("IDG" + i).child("d_breitengrad").getValue().toString();
  81. laengengradString = data.child("IDG" + i).child("e_laengengrad").getValue().toString();
  82. androidID = data.child("IDG" + i).child("a_androidid").getValue().toString();
  83. double breitengrad = Double.parseDouble(breitengradString);
  84. double laengengrad = Double.parseDouble(laengengradString);
  85. switch (i){
  86. case 1:
  87. latitudeD1 = breitengrad;
  88. longitudeD1 = laengengrad;
  89. dev1 = androidID;
  90. break;
  91. case 2:
  92. latitudeD2 = breitengrad;
  93. longitudeD2 = laengengrad;
  94. dev2 = androidID;
  95. break;
  96. case 3:
  97. latitudeD3 = breitengrad;
  98. longitudeD3 = laengengrad;
  99. dev3 = androidID;
  100. break;
  101. default:
  102. break;
  103. }
  104. }
  105. }
  106. //################################################################## ^^^^ DB Code ^^^^ ###################################################################################
  107. //##########################################################################################################################################################################
  108. //##########################################################################################################################################################################
  109. //################################################################## vvv Calculate Epicenter vvv #########################################################################
  110. @RequiresApi(api = Build.VERSION_CODES.O)
  111. public Epizentrum ermittleEpizentrum(DataSnapshot data)
  112. {
  113. Log.i(TAGEPIZENTRUM, "Start Ermittle Epizentrum");
  114. Erdbeben erdbeben = new Erdbeben();
  115. erdbeben.addDetektionssignalList(mapToDetektionssignale(data));
  116. Epizentrum epizentrum = erdbeben.ermittleEpizentrum();
  117. if(Objects.isNull(epizentrum))
  118. {
  119. System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!Kein Epizentrum vorhanden!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
  120. Log.i(TAGEPIZENTRUM, "Kein Epizentrum vorhanden");
  121. }
  122. else
  123. {
  124. Log.i(TAGEPIZENTRUM, "Epizentrum konnte ermittelt werden, Koordinaten: " + epizentrum.getKoordinaten().getX() + " " + epizentrum.getKoordinaten().getY());
  125. Log.i(TAGEPIZENTRUM, "Enstehungszeitpunkt: " + epizentrum.getEntstehungsZeitpunkt());
  126. }
  127. return epizentrum;
  128. }
  129. @RequiresApi(api = Build.VERSION_CODES.O)
  130. public ArrayList<Detektionssignal> mapToDetektionssignale(DataSnapshot data)
  131. {
  132. ArrayList<Detektionssignal> detektionssignale = new ArrayList<>();
  133. for(int i=1; i<=3; i++)
  134. {
  135. Detektionssignal detektionssignal = new Detektionssignal();
  136. //LocalDateTime als LocalDateTime
  137. String localdatetimeString = data.child("IDG" + i).child("b_localdatetime").getValue().toString();
  138. DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
  139. LocalDateTime localdatetime = LocalDateTime.parse(localdatetimeString, formatter);
  140. detektionssignal.setAnkunftsZeit(localdatetime);
  141. //ID als String
  142. detektionssignal.setDeviceId(data.child("IDG" + i).child("a_androidid").getValue().toString());
  143. //Koordinaten
  144. String breitengradString = data.child("IDG" + i).child("d_breitengrad").getValue().toString();
  145. String laengengradString = data.child("IDG" + i).child("e_laengengrad").getValue().toString();
  146. double breitengrad = Double.parseDouble(breitengradString);
  147. double laengengrad = Double.parseDouble(laengengradString);
  148. Koordinaten koordinaten = new Koordinaten(breitengrad, laengengrad);
  149. detektionssignal.setKoordinaten(koordinaten);
  150. //Welle in m/s
  151. String welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString();
  152. int wellengeschwindigkeit = Integer.parseInt(welle);
  153. detektionssignal.setGeschwErdbeben(wellengeschwindigkeit);
  154. detektionssignale.add(detektionssignal);
  155. }
  156. return detektionssignale;
  157. }
  158. //################################################################## ^^^^ Calculate Epicenter ^^^^ #######################################################################
  159. //##########################################################################################################################################################################
  160. //##########################################################################################################################################################################
  161. //################################################################## vvv Maps Code vvv ###################################################################################
  162. @RequiresApi(api = Build.VERSION_CODES.N)
  163. @Override
  164. public void onMapReady(GoogleMap googleMap) {
  165. mMap = googleMap;
  166. if(Objects.isNull(epizentrum))
  167. {
  168. System.out.println("--------Keine Epizentrum Koordinaten verfügbar");
  169. }else
  170. {
  171. System.out.println(">>>>>>>>Epizentrum Koordinaten");
  172. latitudeEPI = epizentrum.getKoordinaten().getX();
  173. lonitudeEPI = epizentrum.getKoordinaten().getY();
  174. System.out.println("Breitengrad/Latitude: " + latitudeEPI);
  175. System.out.println("Längengrad/Longitude: " + lonitudeEPI);
  176. }
  177. //aus DB für Device 1 long lat
  178. LatLng device1 = new LatLng(latitudeD1, longitudeD1);
  179. mMap.addMarker(new MarkerOptions().position(device1).title("Device 1").icon(BitmapDescriptorFactory
  180. .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
  181. //aus DB für Device 2 long lat
  182. LatLng device2 = new LatLng(latitudeD2, longitudeD2);
  183. mMap.addMarker(new MarkerOptions().position(device2).title("Device 2").icon(BitmapDescriptorFactory
  184. .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
  185. //aus DB für Device 3 long lat
  186. LatLng device3 = new LatLng(latitudeD3, longitudeD3);
  187. mMap.addMarker(new MarkerOptions().position(device3).title("Device 3").icon(BitmapDescriptorFactory
  188. .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
  189. //man könnten noch eine IF Abfrage einbauen falls es 4 Devices gibt
  190. // Add a marker in Epicenter
  191. LatLng epicenter = new LatLng(latitudeEPI, lonitudeEPI);
  192. mMap.addMarker(new MarkerOptions().position(epicenter).title("Epicenter"));
  193. mMap.moveCamera(CameraUpdateFactory.newLatLng(epicenter));
  194. }
  195. //################################################################## ^^^^ Maps Code ^^^^ #################################################################################
  196. //##########################################################################################################################################################################
  197. }