package de.edotzlaff.detection; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Build; import android.os.CountDownTimer; import android.provider.ContactsContract; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.fragment.app.FragmentActivity; import android.os.Bundle; import android.widget.Toast; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import de.edotzlaff.detection.detektion.Detektionssignal; import de.edotzlaff.detection.detektion.Epizentrum; import de.edotzlaff.detection.detektion.Erdbeben; import de.edotzlaff.detection.detektion.berechnung.mathObjekte.Koordinaten; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Objects; public class EarthquakeLocation extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; private static final String TAGEPIZENTRUM = "Epizentrum"; private DatabaseReference mDatenbank; private double latitudeD1, latitudeD2, latitudeD3, latitudeD4; private double longitudeD1, longitudeD2, longitudeD3, longitudeD4; private String dev1, dev2, dev3, dev4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_earthquake_location); getLocationInfo(); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); } //########################################################################################################################################################################## //################################################################## vvv DB Code vvv ##################################################################################### public void getLocationInfo() { mDatenbank = FirebaseDatabase.getInstance().getReference().child("overviewdetection"); mDatenbank.get().addOnCompleteListener(new OnCompleteListener() { @RequiresApi(api = Build.VERSION_CODES.O) @Override public void onComplete(@NonNull Task task) { if (!task.isSuccessful()) { System.out.println("Datenbank Fehler in getDataBaseValuesNoListener"); } else{ defineGPSforMapping(task.getResult()); ermittleEpizentrum(task.getResult()); //mapToDetektionssignale(task.getResult()); } } }); } public void defineGPSforMapping(DataSnapshot data) { String breitengradString; String laengengradString; String androidID; for(int i =1; i<=3; i++) { breitengradString = data.child("IDG" + i).child("d_breitengrad").getValue().toString(); laengengradString = data.child("IDG" + i).child("e_laengengrad").getValue().toString(); androidID = data.child("IDG" + i).child("a_androidid").getValue().toString(); double breitengrad = Double.parseDouble(breitengradString); double laengengrad = Double.parseDouble(laengengradString); switch (i){ case 1: latitudeD1 = breitengrad; longitudeD1 = laengengrad; dev1 = androidID; break; case 2: latitudeD2 = breitengrad; longitudeD2 = laengengrad; dev2 = androidID; break; case 3: latitudeD3 = breitengrad; longitudeD3 = laengengrad; dev3 = androidID; break; default: break; } } } //################################################################## ^^^^ DB Code ^^^^ ################################################################################### //########################################################################################################################################################################## //########################################################################################################################################################################## //################################################################## vvv Calculate Epicenter vvv ######################################################################### @RequiresApi(api = Build.VERSION_CODES.O) public Epizentrum ermittleEpizentrum(DataSnapshot data) { Log.i(TAGEPIZENTRUM, "Start Ermittle Epizentrum"); Erdbeben erdbeben = new Erdbeben(); erdbeben.addDetektionssignalList(mapToDetektionssignale(data)); Epizentrum epizentrum = erdbeben.ermittleEpizentrum(); if(Objects.isNull(epizentrum)) { System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!Kein Epizentrum vorhanden!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); Log.i(TAGEPIZENTRUM, "Kein Epizentrum vorhanden"); } else { Log.i(TAGEPIZENTRUM, "Epizentrum konnte ermittelt werden, Koordinaten: " + epizentrum.getKoordinaten().getX() + " " + epizentrum.getKoordinaten().getY()); Log.i(TAGEPIZENTRUM, "Enstehungszeitpunkt: " + epizentrum.getEntstehungsZeitpunkt()); } return epizentrum; } @RequiresApi(api = Build.VERSION_CODES.O) public ArrayList mapToDetektionssignale(DataSnapshot data) { ArrayList detektionssignale = new ArrayList<>(); for(int i=1; i<=3; i++) { Detektionssignal detektionssignal = new Detektionssignal(); //LocalDateTime als LocalDateTime String localdatetimeString = data.child("IDG" + i).child("b_localdatetime").getValue().toString(); DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; LocalDateTime localdatetime = LocalDateTime.parse(localdatetimeString, formatter); detektionssignal.setAnkunftsZeit(localdatetime); //ID als String detektionssignal.setDeviceId(data.child("IDG" + i).child("a_androidid").getValue().toString()); //Koordinaten String breitengradString = data.child("IDG" + i).child("d_breitengrad").getValue().toString(); String laengengradString = data.child("IDG" + i).child("e_laengengrad").getValue().toString(); double breitengrad = Double.parseDouble(breitengradString); double laengengrad = Double.parseDouble(laengengradString); Koordinaten koordinaten = new Koordinaten(breitengrad, laengengrad); detektionssignal.setKoordinaten(koordinaten); //Welle in m/s String welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString(); int wellengeschwindigkeit = Integer.parseInt(welle); detektionssignal.setGeschwErdbeben(wellengeschwindigkeit); detektionssignale.add(detektionssignal); } return detektionssignale; } //################################################################## ^^^^ Calculate Epicenter ^^^^ ####################################################################### //########################################################################################################################################################################## //########################################################################################################################################################################## //################################################################## vvv Maps Code vvv ################################################################################### @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; //TODO Aron: Daten aus DB in die jeweiligen Devices einsetzten //aus DB für Device 1 long lat LatLng device1 = new LatLng(latitudeD1, longitudeD1); mMap.addMarker(new MarkerOptions().position(device1).title("Device 1").icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); //aus DB für Device 2 long lat LatLng device2 = new LatLng(latitudeD2, longitudeD2); mMap.addMarker(new MarkerOptions().position(device2).title("Device 2").icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); //aus DB für Device 3 long lat LatLng device3 = new LatLng(latitudeD3, longitudeD3); mMap.addMarker(new MarkerOptions().position(device3).title("Device 3").icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); //man könnten noch eine IF Abfrage einbauen falls es 4 Devices gibt // Add a marker in Epicenter LatLng epicenter = new LatLng(-34, 151); mMap.addMarker(new MarkerOptions().position(epicenter).title("Epicenter")); mMap.moveCamera(CameraUpdateFactory.newLatLng(epicenter)); } //################################################################## ^^^^ Maps Code ^^^^ ################################################################################# //########################################################################################################################################################################## }