123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- 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<DataSnapshot>() {
- @RequiresApi(api = Build.VERSION_CODES.O)
- @Override
- public void onComplete(@NonNull Task<DataSnapshot> 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)
- {
- Erdbeben erdbeben = new Erdbeben();
- erdbeben.addDetektionssignalList(mapToDetektionssignale(data));
-
- Epizentrum epizentrum = new 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());
- }
-
- return epizentrum;
- }
-
-
- @RequiresApi(api = Build.VERSION_CODES.O)
- public ArrayList<Detektionssignal> mapToDetektionssignale(DataSnapshot data)
- {
- ArrayList<Detektionssignal> 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);
- }
- System.out.println("detektionsingale size: " + detektionssignale.size());
- 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 ^^^^ #################################################################################
- //##########################################################################################################################################################################
-
-
- }
|