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.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 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; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_earthquake_location); // 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 ##################################################################################### //Aufruf der DB public void getDataBaseValuesNoListener() { 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 { mapToDetektionssignale(task.getResult()); } } }); } public void privideDBforDeviceMaping(DataSnapshot data, int i) { String localedatetime; String breitengrad; String laengengrad; String timestamp; localedatetime = data.child("IDG" + i).child("b_localdatetime").getValue().toString(); breitengrad = data.child("IDG" + i).child("d_breitengrad").getValue().toString(); laengengrad = data.child("IDG" + i).child("e_laengengrad").getValue().toString(); timestamp = data.child("IDG" + i).child("h_timestamp").getValue().toString(); } //################################################################## ^^^^ DB Code ^^^^ ################################################################################### //########################################################################################################################################################################## //########################################################################################################################################################################## //################################################################## vvv Calculate Epicenter vvv ######################################################################### //TODO Jan @RequiresApi(api = Build.VERSION_CODES.O) public Epizentrum ermittleEpizentrum(DataSnapshot data) { Erdbeben erdbeben = new Erdbeben(); erdbeben.addDetektionssignalList(mapToDetektionssignale(data)); Epizentrum epizentrum = new Epizentrum(); epizentrum = erdbeben.ermittleEpizentrum(); if(Objects.isNull(epizentrum)) { Log.i(TAGEPIZENTRUM, "Kein Epizentrum vorhanden"); } else { Log.i(TAGEPIZENTRUM, "Epizentrum konnte ermittelt werden, Koordinaten: " + epizentrum.getKoordinaten().getX() + " " + epizentrum.getKoordinaten().getY()); } 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 als??? 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); //TODO @Jan In welchem Datenformat muss breitengrad und laengengrad hier rein? Außerdem welche Einheit? m/s oder km/s? //detektionssignal.setKoordinaten(breitengrad, laengengrad); //Wellengeschwindigkeit als int String welle = data.child("IDG" + i).child("w_wellengeschwindigkeit").getValue().toString(); int wellengeschwindigkeit = Integer.parseInt(welle); detektionssignal.setGeschwErdbeben(wellengeschwindigkeit); //Detektionssignal 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 divice1 = new LatLng(-34, 152); mMap.addMarker(new MarkerOptions().position(divice1).title("Device 1").icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); //aus DB für Device 2 long lat LatLng divice2 = new LatLng(-33, 152); mMap.addMarker(new MarkerOptions().position(divice2).title("Device 2").icon(BitmapDescriptorFactory .defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); //aus DB für Device 3 long lat LatLng divice3 = new LatLng(-34, 150); mMap.addMarker(new MarkerOptions().position(divice3).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 ^^^^ ################################################################################# //########################################################################################################################################################################## }