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 9.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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.util.Log;
  9. import androidx.annotation.NonNull;
  10. import androidx.annotation.RequiresApi;
  11. import androidx.fragment.app.FragmentActivity;
  12. import android.os.Bundle;
  13. import android.widget.Toast;
  14. import com.google.android.gms.maps.CameraUpdateFactory;
  15. import com.google.android.gms.maps.GoogleMap;
  16. import com.google.android.gms.maps.OnMapReadyCallback;
  17. import com.google.android.gms.maps.SupportMapFragment;
  18. import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  19. import com.google.android.gms.maps.model.LatLng;
  20. import com.google.android.gms.maps.model.MarkerOptions;
  21. import com.google.android.gms.tasks.OnCompleteListener;
  22. import com.google.android.gms.tasks.Task;
  23. import com.google.firebase.database.DataSnapshot;
  24. import com.google.firebase.database.DatabaseReference;
  25. import com.google.firebase.database.FirebaseDatabase;
  26. import de.edotzlaff.detection.detektion.Detektionssignal;
  27. import de.edotzlaff.detection.detektion.Epizentrum;
  28. import de.edotzlaff.detection.detektion.Erdbeben;
  29. import java.time.LocalDateTime;
  30. import java.time.format.DateTimeFormatter;
  31. import java.util.ArrayList;
  32. import java.util.Objects;
  33. public class EarthquakeLocation extends FragmentActivity implements OnMapReadyCallback {
  34. private GoogleMap mMap;
  35. private static final String TAGEPIZENTRUM = "Epizentrum";
  36. private DatabaseReference mDatenbank;
  37. @Override
  38. protected void onCreate(Bundle savedInstanceState) {
  39. super.onCreate(savedInstanceState);
  40. setContentView(R.layout.activity_earthquake_location);
  41. // Obtain the SupportMapFragment and get notified when the map is ready to be used.
  42. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
  43. mapFragment.getMapAsync(this);
  44. }
  45. //##########################################################################################################################################################################
  46. //################################################################## vvv DB Code vvv #####################################################################################
  47. public void getDataBaseInfo(int k)
  48. {
  49. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  50. mDatenbank.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
  51. @RequiresApi(api = Build.VERSION_CODES.O)
  52. @Override
  53. public void onComplete(@NonNull Task<DataSnapshot> task) {
  54. if (!task.isSuccessful()) {
  55. System.out.println("Datenbank Fehler in getDataBaseValuesNoListener");
  56. }
  57. else {
  58. mapToDetektionssignale(task.getResult());
  59. }
  60. }
  61. });
  62. }
  63. public double getLocationInfo(String specific,int index)
  64. {
  65. double kp = 5;
  66. mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection");
  67. mDatenbank.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
  68. @RequiresApi(api = Build.VERSION_CODES.O)
  69. @Override
  70. public void onComplete(@NonNull Task<DataSnapshot> task) {
  71. if (!task.isSuccessful()) {
  72. System.out.println("Datenbank Fehler in getDataBaseValuesNoListener");
  73. }
  74. else {
  75. }
  76. }
  77. });
  78. return kp;
  79. }
  80. //################################################################## ^^^^ DB Code ^^^^ ###################################################################################
  81. //##########################################################################################################################################################################
  82. //##########################################################################################################################################################################
  83. //################################################################## vvv Calculate Epicenter vvv #########################################################################
  84. @RequiresApi(api = Build.VERSION_CODES.O)
  85. public Epizentrum ermittleEpizentrum(DataSnapshot data)
  86. {
  87. Erdbeben erdbeben = new Erdbeben();
  88. erdbeben.addDetektionssignalList(mapToDetektionssignale(data));
  89. Epizentrum epizentrum = new Epizentrum();
  90. epizentrum = erdbeben.ermittleEpizentrum();
  91. if(Objects.isNull(epizentrum))
  92. {
  93. Log.i(TAGEPIZENTRUM, "Kein Epizentrum vorhanden");
  94. }
  95. else
  96. {
  97. Log.i(TAGEPIZENTRUM, "Epizentrum konnte ermittelt werden, Koordinaten: " + epizentrum.getKoordinaten().getX() + " " + epizentrum.getKoordinaten().getY());
  98. }
  99. return epizentrum;
  100. }
  101. @RequiresApi(api = Build.VERSION_CODES.O)
  102. public ArrayList<Detektionssignal> mapToDetektionssignale(DataSnapshot data)
  103. {
  104. ArrayList<Detektionssignal> detektionssignale = new ArrayList<>();
  105. for(int i=1; i<=3; i++)
  106. {
  107. Detektionssignal detektionssignal = new Detektionssignal();
  108. //LocalDateTime als LocalDateTime
  109. String localdatetimeString = data.child("IDG" + i).child("b_localdatetime").getValue().toString();
  110. DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
  111. LocalDateTime localdatetime = LocalDateTime.parse(localdatetimeString, formatter);
  112. detektionssignal.setAnkunftsZeit(localdatetime);
  113. //ID als String
  114. detektionssignal.setDeviceId(data.child("IDG" + i).child("a_androidid").getValue().toString());
  115. //Koordinaten als ???
  116. String breitengradString = data.child("IDG" + i).child("d_breitengrad").getValue().toString();
  117. String laengengradString = data.child("IDG" + i).child("e_laengengrad").getValue().toString();
  118. double breitengrad = Double.parseDouble(breitengradString);
  119. double laengengrad = Double.parseDouble(laengengradString);
  120. //TODO @Jan In welchem Datenformat muss breitengrad und laengengrad hier rein? Außerdem welche Einheit? m/s oder km/s?
  121. //detektionssignal.setKoordinaten(breitengrad, laengengrad);
  122. //Wellengeschwindigkeit als int
  123. String welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString();
  124. int wellengeschwindigkeit = Integer.parseInt(welle);
  125. detektionssignal.setGeschwErdbeben(wellengeschwindigkeit);
  126. //Detektionssignal
  127. detektionssignale.add(detektionssignal);
  128. }
  129. return detektionssignale;
  130. }
  131. //################################################################## ^^^^ Calculate Epicenter ^^^^ #######################################################################
  132. //##########################################################################################################################################################################
  133. //##########################################################################################################################################################################
  134. //################################################################## vvv Maps Code vvv ###################################################################################
  135. @Override
  136. public void onMapReady(GoogleMap googleMap) {
  137. mMap = googleMap;
  138. //TODO Aron: Daten aus DB in die jeweiligen Devices einsetzten
  139. //aus DB für Device 1 long lat
  140. LatLng divice1 = new LatLng(-34, 152);
  141. mMap.addMarker(new MarkerOptions().position(divice1).title("Device 1").icon(BitmapDescriptorFactory
  142. .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
  143. //aus DB für Device 2 long lat
  144. LatLng divice2 = new LatLng(-33, 152);
  145. mMap.addMarker(new MarkerOptions().position(divice2).title("Device 2").icon(BitmapDescriptorFactory
  146. .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
  147. //aus DB für Device 3 long lat
  148. LatLng divice3 = new LatLng(-34, 150);
  149. mMap.addMarker(new MarkerOptions().position(divice3).title("Device 3").icon(BitmapDescriptorFactory
  150. .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
  151. //man könnten noch eine IF Abfrage einbauen falls es 4 Devices gibt
  152. // Add a marker in Epicenter
  153. LatLng epicenter = new LatLng(-34, 151);
  154. mMap.addMarker(new MarkerOptions().position(epicenter).title("Epicenter"));
  155. mMap.moveCamera(CameraUpdateFactory.newLatLng(epicenter));
  156. }
  157. //################################################################## ^^^^ Maps Code ^^^^ #################################################################################
  158. //##########################################################################################################################################################################
  159. }