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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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.RequiresApi;
  10. import androidx.fragment.app.FragmentActivity;
  11. import android.os.Bundle;
  12. import android.widget.Toast;
  13. import com.google.android.gms.maps.CameraUpdateFactory;
  14. import com.google.android.gms.maps.GoogleMap;
  15. import com.google.android.gms.maps.OnMapReadyCallback;
  16. import com.google.android.gms.maps.SupportMapFragment;
  17. import com.google.android.gms.maps.model.BitmapDescriptorFactory;
  18. import com.google.android.gms.maps.model.LatLng;
  19. import com.google.android.gms.maps.model.MarkerOptions;
  20. import de.edotzlaff.detection.detektion.Detektionssignal;
  21. import de.edotzlaff.detection.detektion.Epizentrum;
  22. import de.edotzlaff.detection.detektion.Erdbeben;
  23. import java.util.ArrayList;
  24. import java.util.Objects;
  25. public class EarthquakeLocation extends FragmentActivity implements OnMapReadyCallback {
  26. private GoogleMap mMap;
  27. private static final String TAGEPIZENTRUM = "Epizentrum";
  28. //##########################################################################################################################################################################
  29. //################################################################## vvv SensorParameter vvv ##############################################################################
  30. private SensorManager mSensorManager;
  31. private static final float mUpperThreshold = 1.5f; // für Emulator auf 1.5 setzen
  32. private static final float mLowerThreshold = 0.5f; // für Emulator auf 0.5 setzen
  33. private static final long mShakeDetectionLockTimeMicroSeconds = 10000;
  34. private float mAccel;
  35. private float mAccelCurrent;
  36. private float mAccelLast;
  37. private boolean mShakeDetectionIsActive = false;
  38. private boolean mShakeDetected = false;
  39. private boolean allowShakeEvent = true;
  40. //################################################################## ^^^^ SensorParameter ^^^^ ############################################################################
  41. //##########################################################################################################################################################################
  42. @Override
  43. protected void onCreate(Bundle savedInstanceState) {
  44. super.onCreate(savedInstanceState);
  45. setContentView(R.layout.activity_earthquake_location);
  46. // Obtain the SupportMapFragment and get notified when the map is ready to be used.
  47. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
  48. .findFragmentById(R.id.map);
  49. mapFragment.getMapAsync(this);
  50. }
  51. //##########################################################################################################################################################################
  52. //################################################################## vvv DB Code vvv #####################################################################################
  53. //TODO Aron
  54. //################################################################## ^^^^ DB Code ^^^^ ###################################################################################
  55. //##########################################################################################################################################################################
  56. //################################################################## vvv Detection Code vvv ###################################################################################
  57. //##########################################################################################################################################################################
  58. private final SensorEventListener mSensorListener = new SensorEventListener() {
  59. @Override
  60. public void onSensorChanged(SensorEvent event) {
  61. float x = event.values[0];
  62. float y = event.values[1];
  63. float z = event.values[2];
  64. mAccelLast = mAccelCurrent;
  65. mAccelCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
  66. float delta = mAccelCurrent - mAccelLast;
  67. mAccel = mAccel * 0.9f + delta;
  68. // Log.d(TAG,"mAccel: "+ mAccel);
  69. if (mShakeDetectionIsActive) {
  70. if(Math.abs(mAccel) > mUpperThreshold) {
  71. new CountDownTimer(1500, 10) {
  72. public void onTick(long millisUntilFinished) {
  73. if (Math.abs(mAccel) > mUpperThreshold) {
  74. mShakeDetectionIsActive = false;
  75. } else if (Math.abs(mAccel) < mLowerThreshold) {
  76. mShakeDetectionIsActive = true;
  77. this.cancel();
  78. }
  79. }
  80. public void onFinish() {
  81. if (Math.abs(mAccel) > mUpperThreshold) {
  82. mShakeDetectionIsActive = false;
  83. mShakeDetected = true;
  84. earthquakeDetected();
  85. } else {
  86. mShakeDetectionIsActive = true;
  87. mShakeDetected = false;
  88. }
  89. }
  90. }.start();
  91. }
  92. }
  93. }
  94. @Override
  95. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  96. }
  97. };
  98. private void earthquakeDetected()
  99. {
  100. Toast.makeText(getApplicationContext(), "!Earthquake detected!", Toast.LENGTH_SHORT).show();
  101. //setDataBaseValues();
  102. }
  103. //################################################################## ^^^^ Detection Code ^^^^ ###################################################################################
  104. //##########################################################################################################################################################################
  105. //##########################################################################################################################################################################
  106. //################################################################## vvv Calculate Epicenter vvv #########################################################################
  107. //TODO Jan
  108. @RequiresApi(api = Build.VERSION_CODES.O)
  109. /* public Epizentrum ermittleEpizentrum(DataSnapshot data)
  110. {
  111. Erdbeben erdbeben = new Erdbeben();
  112. erdbeben.addDetektionssignalList(mapToDetektionssignale(data));
  113. Epizentrum epizentrum = new Epizentrum();
  114. epizentrum = erdbeben.ermittleEpizentrum();
  115. if(Objects.isNull(epizentrum))
  116. {
  117. Log.i(TAGEPIZENTRUM, "Kein Epizentrum vorhanden");
  118. }
  119. else
  120. {
  121. Log.i(TAGEPIZENTRUM, "Epizentrum konnte ermittelt werden, Koordinaten: " + epizentrum.getKoordinaten().getX() + " " + epizentrum.getKoordinaten().getY());
  122. }
  123. return epizentrum;
  124. }
  125. */
  126. /* public ArrayList<Detektionssignal> mapToDetektionssignale(DataSnapshot data)
  127. {
  128. ArrayList<Detektionssignal> detektionssignale = new ArrayList<>();
  129. for(data.child("overviewnodes").getChildernKey)
  130. {
  131. Detektionssignal detektionssignal = new Detektionssignal();
  132. detektionssignal.setAnkunftsZeit();
  133. detektionssignal.setDeviceId();
  134. detektionssignal.setKoordinaten(data.child("overviewnodes").child("IDG" + f).child("d_breitengrad").getValue().toString(),
  135. data.child("overviewnodes").child("IDG" + f).child("e_laengengrad").getValue().toString());
  136. detektionssignal.setGeschwErdbeben();
  137. detektionssignale.add(detektionssignal);
  138. }
  139. return detektionssignale;
  140. }
  141. */
  142. //################################################################## ^^^^ Calculate Epicenter ^^^^ #######################################################################
  143. //##########################################################################################################################################################################
  144. //##########################################################################################################################################################################
  145. //################################################################## vvv Maps Code vvv ###################################################################################
  146. @Override
  147. public void onMapReady(GoogleMap googleMap) {
  148. mMap = googleMap;
  149. //TODO Aron: Daten aus DB in die jeweiligen Devices einsetzten
  150. //aus DB für Device 1 long lat
  151. LatLng divice1 = new LatLng(-34, 152);
  152. mMap.addMarker(new MarkerOptions().position(divice1).title("Device 1").icon(BitmapDescriptorFactory
  153. .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
  154. //aus DB für Device 2 long lat
  155. LatLng divice2 = new LatLng(-33, 152);
  156. mMap.addMarker(new MarkerOptions().position(divice2).title("Device 2").icon(BitmapDescriptorFactory
  157. .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
  158. //aus DB für Device 3 long lat
  159. LatLng divice3 = new LatLng(-34, 150);
  160. mMap.addMarker(new MarkerOptions().position(divice3).title("Device 3").icon(BitmapDescriptorFactory
  161. .defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
  162. //man könnten noch eine IF Abfrage einbauen falls es 4 Devices gibt
  163. // Add a marker in Epicenter
  164. LatLng epicenter = new LatLng(-34, 151);
  165. mMap.addMarker(new MarkerOptions().position(epicenter).title("Epicenter"));
  166. mMap.moveCamera(CameraUpdateFactory.newLatLng(epicenter));
  167. }
  168. //################################################################## ^^^^ Maps Code ^^^^ #################################################################################
  169. //##########################################################################################################################################################################
  170. }