Anpassung Koordinatenberechnung
This commit is contained in:
parent
2e0da83888
commit
0d8e04f9e0
@ -126,12 +126,11 @@ public class EarthquakeLocation extends FragmentActivity implements OnMapReadyCa
|
|||||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
public Epizentrum ermittleEpizentrum(DataSnapshot data)
|
public Epizentrum ermittleEpizentrum(DataSnapshot data)
|
||||||
{
|
{
|
||||||
|
Log.i(TAGEPIZENTRUM, "Start Ermittle Epizentrum");
|
||||||
Erdbeben erdbeben = new Erdbeben();
|
Erdbeben erdbeben = new Erdbeben();
|
||||||
erdbeben.addDetektionssignalList(mapToDetektionssignale(data));
|
erdbeben.addDetektionssignalList(mapToDetektionssignale(data));
|
||||||
|
|
||||||
Epizentrum epizentrum = new Epizentrum();
|
Epizentrum epizentrum = erdbeben.ermittleEpizentrum();
|
||||||
epizentrum = erdbeben.ermittleEpizentrum();
|
|
||||||
|
|
||||||
if(Objects.isNull(epizentrum))
|
if(Objects.isNull(epizentrum))
|
||||||
{
|
{
|
||||||
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!Kein Epizentrum vorhanden!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!Kein Epizentrum vorhanden!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
||||||
@ -146,6 +145,7 @@ public class EarthquakeLocation extends FragmentActivity implements OnMapReadyCa
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
public ArrayList<Detektionssignal> mapToDetektionssignale(DataSnapshot data)
|
public ArrayList<Detektionssignal> mapToDetektionssignale(DataSnapshot data)
|
||||||
{
|
{
|
||||||
@ -178,7 +178,6 @@ public class EarthquakeLocation extends FragmentActivity implements OnMapReadyCa
|
|||||||
|
|
||||||
detektionssignale.add(detektionssignal);
|
detektionssignale.add(detektionssignal);
|
||||||
}
|
}
|
||||||
System.out.println("detektionsingale size: " + detektionssignale.size());
|
|
||||||
return detektionssignale;
|
return detektionssignale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@ package de.edotzlaff.detection.detektion;
|
|||||||
|
|
||||||
|
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
import de.edotzlaff.detection.detektion.berechnung.Endpunkt;
|
import de.edotzlaff.detection.detektion.berechnung.Endpunkt;
|
||||||
import de.edotzlaff.detection.detektion.berechnung.EndpunktVerbindung;
|
import de.edotzlaff.detection.detektion.berechnung.EndpunktVerbindung;
|
||||||
@ -15,12 +17,13 @@ import java.util.Objects;
|
|||||||
public class Erdbeben {
|
public class Erdbeben {
|
||||||
|
|
||||||
//ToDO anpassen an Szenario umso mehr umso wahrscheinlich ein Ergebnis, oder Abbruchbedingung mit do while
|
//ToDO anpassen an Szenario umso mehr umso wahrscheinlich ein Ergebnis, oder Abbruchbedingung mit do while
|
||||||
public static final Integer SCHLEIFENDURCHLAUFTE = 5000;
|
public static final Integer SCHLEIFENDURCHLAUFTE = 8000;
|
||||||
|
private static final String TAG = "ERDBEBEN";
|
||||||
|
|
||||||
private Epizentrum epizentrum;
|
private Epizentrum epizentrum;
|
||||||
private EpizentrumRechnung epizentrumRechnung;
|
private EpizentrumRechnung epizentrumRechnung;
|
||||||
private HashMap<String, Detektionssignal> nutzerDaten;
|
private HashMap<String, Detektionssignal> nutzerDaten;
|
||||||
|
private Detektionssignal erstesDetektionssignal;
|
||||||
|
|
||||||
public Erdbeben() {
|
public Erdbeben() {
|
||||||
|
|
||||||
@ -38,8 +41,9 @@ public class Erdbeben {
|
|||||||
{
|
{
|
||||||
for (int i = 0; i< detektionssignale.size(); i++)
|
for (int i = 0; i< detektionssignale.size(); i++)
|
||||||
{
|
{
|
||||||
nutzerDaten.put(detektionssignale.get(i).getDeviceId(),detektionssignale.get(i));
|
nutzerDaten.put(detektionssignale.get(i).getDeviceId()+"i",detektionssignale.get(i));
|
||||||
}
|
}
|
||||||
|
Log.i(TAG, "addDetektionssignalList: " + nutzerDaten.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
@ -48,7 +52,9 @@ public class Erdbeben {
|
|||||||
ArrayList<Detektionssignal> rechenListe = new ArrayList<>();
|
ArrayList<Detektionssignal> rechenListe = new ArrayList<>();
|
||||||
nutzerDaten.forEach((key, value) -> rechenListe.add(value));
|
nutzerDaten.forEach((key, value) -> rechenListe.add(value));
|
||||||
//Initialisierung der Rechung - First Element mit delta r + alle möglichen EndpunktKombinationen (einfach)
|
//Initialisierung der Rechung - First Element mit delta r + alle möglichen EndpunktKombinationen (einfach)
|
||||||
ArrayList<Endpunkt> berechnungsEndpunkte = epizentrumRechnung.initEndpunkte(rechenListe);
|
erstesDetektionssignal = epizentrumRechnung.ermittleErstesDetektionssignal(rechenListe);
|
||||||
|
ArrayList<Endpunkt> berechnungsEndpunkte = epizentrumRechnung.initEndpunkte(rechenListe, erstesDetektionssignal);
|
||||||
|
|
||||||
ArrayList<EndpunktVerbindung> endpunktKonbinationen = epizentrumRechnung.ermittleEndpunktKonbinationen(berechnungsEndpunkte);
|
ArrayList<EndpunktVerbindung> endpunktKonbinationen = epizentrumRechnung.ermittleEndpunktKonbinationen(berechnungsEndpunkte);
|
||||||
|
|
||||||
//ToDo Vernünftiger Endpunkt überlegen bzw. bis wann abgebrochen wird -> Umzug in Berechnungs
|
//ToDo Vernünftiger Endpunkt überlegen bzw. bis wann abgebrochen wird -> Umzug in Berechnungs
|
||||||
@ -57,10 +63,7 @@ public class Erdbeben {
|
|||||||
epizentrum = epizentrumRechnung.ueberpruefeObEpizentrum(endpunktKonbinationen);
|
epizentrum = epizentrumRechnung.ueberpruefeObEpizentrum(endpunktKonbinationen);
|
||||||
//ToDo set EnstehungsZeitpunkt -> (Bezugszeit, Koord, Koord, v;)
|
//ToDo set EnstehungsZeitpunkt -> (Bezugszeit, Koord, Koord, v;)
|
||||||
if (!Objects.isNull(epizentrum)) {
|
if (!Objects.isNull(epizentrum)) {
|
||||||
System.out.println("Epizentrum ermittelt");
|
epizentrum.setEntstehungsZeitpunkt(epizentrumRechnung.berechneEntstehungsZeitpunktLongLatt(erstesDetektionssignal, epizentrum.getKoordinaten()));
|
||||||
epizentrum.setEntstehungsZeitpunkt(
|
|
||||||
epizentrumRechnung.berechneEntstehungsZeitpunktLongLatt(
|
|
||||||
nutzerDaten.get(berechnungsEndpunkte.get(0).getNutzer()), epizentrum.getKoordinaten()));
|
|
||||||
return epizentrum;
|
return epizentrum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,12 @@ package de.edotzlaff.detection.detektion.berechnung;
|
|||||||
|
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
import de.edotzlaff.detection.detektion.Detektionssignal;
|
import de.edotzlaff.detection.detektion.Detektionssignal;
|
||||||
import de.edotzlaff.detection.detektion.Epizentrum;
|
import de.edotzlaff.detection.detektion.Epizentrum;
|
||||||
import de.edotzlaff.detection.detektion.berechnung.mathObjekte.Koordinaten;
|
import de.edotzlaff.detection.detektion.berechnung.mathObjekte.Koordinaten;
|
||||||
@ -22,32 +25,46 @@ import java.util.Set;
|
|||||||
public class EpizentrumRechnung {
|
public class EpizentrumRechnung {
|
||||||
|
|
||||||
//ToDo Schrittweite und Abstand auf Szenario anpassen
|
//ToDo Schrittweite und Abstand auf Szenario anpassen
|
||||||
private static final double SCHRITTWEITE = 0.0001;
|
private static final double SCHRITTWEITE = 0.000050;
|
||||||
private static final double MAX_ABSTAND = 0.001;
|
private static final double MAX_ABSTAND = 0.000058;
|
||||||
private static final int DOUBLESTELLEN = 8;
|
private static final int DOUBLESTELLEN = 24;
|
||||||
|
private static final int SCHLEIFENDURCHLAUFTE = 5000;
|
||||||
|
|
||||||
|
private static final String TAG = "EPIZENTRUMRECHNUNG";
|
||||||
|
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
public ArrayList<Endpunkt> initEndpunkte(ArrayList<Detektionssignal> detektionssignal) {
|
public ArrayList<Endpunkt> initEndpunkte(ArrayList<Detektionssignal> detektionssignal, Detektionssignal ersteMessung) {
|
||||||
Detektionssignal nahegelegensteMessung = detektionssignal.get(0);
|
|
||||||
ArrayList<Endpunkt> arrBerechnungsObjekte = new ArrayList<>();
|
ArrayList<Endpunkt> arrBerechnungsObjekte = new ArrayList<>();
|
||||||
for (int i = 1; i < detektionssignal.size(); i++) {
|
|
||||||
if (detektionssignal.get(i).getAnkunftsZeit().isBefore(nahegelegensteMessung.getAnkunftsZeit())) {
|
|
||||||
nahegelegensteMessung = detektionssignal.get(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (Detektionssignal aufzeichnung : detektionssignal) {
|
for (Detektionssignal aufzeichnung : detektionssignal) {
|
||||||
int zeitunterschied = aufzeichnung.getAnkunftsZeit().getHour() * 3600 + aufzeichnung.getAnkunftsZeit().getMinute() * 60 + aufzeichnung.getAnkunftsZeit().getSecond()
|
int zeitunterschied = aufzeichnung.getAnkunftsZeit().getHour() * 3600 + aufzeichnung.getAnkunftsZeit().getMinute() * 60 + aufzeichnung.getAnkunftsZeit().getSecond()
|
||||||
- nahegelegensteMessung.getAnkunftsZeit().getHour() * 3600 - nahegelegensteMessung.getAnkunftsZeit().getMinute() * 60 - nahegelegensteMessung.getAnkunftsZeit().getSecond();
|
- ersteMessung.getAnkunftsZeit().getHour() * 3600 - ersteMessung.getAnkunftsZeit().getMinute() * 60 - ersteMessung.getAnkunftsZeit().getSecond();
|
||||||
double startradius = zeitunterschied * aufzeichnung.getGeschwErdbeben();
|
|
||||||
|
double startradius = zeitunterschied * aufzeichnung.getGeschwErdbeben()*0.0000114130224932113000000;
|
||||||
|
|
||||||
|
Log.i(TAG, "Init Daten: " + aufzeichnung.getDeviceId() + "Startradius: " + startradius);
|
||||||
Endpunkt tempEndpunkt = new Endpunkt(aufzeichnung.getDeviceId());
|
Endpunkt tempEndpunkt = new Endpunkt(aufzeichnung.getDeviceId());
|
||||||
Kreis k = new Kreis(aufzeichnung.getKoordinaten().getX(), aufzeichnung.getKoordinaten().getY(), startradius);
|
Kreis k = new Kreis(aufzeichnung.getKoordinaten().getX(), aufzeichnung.getKoordinaten().getY(), startradius);
|
||||||
tempEndpunkt.setKreis(k);
|
tempEndpunkt.setKreis(k);
|
||||||
arrBerechnungsObjekte.add(tempEndpunkt);
|
arrBerechnungsObjekte.add(tempEndpunkt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.i(TAG, "Daten Erfolgreich initialisiert");
|
||||||
return arrBerechnungsObjekte;
|
return arrBerechnungsObjekte;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||||
|
public Detektionssignal ermittleErstesDetektionssignal(ArrayList<Detektionssignal> detektionssignale)
|
||||||
|
{
|
||||||
|
Detektionssignal erstesDetektionssignal = detektionssignale.get(0);
|
||||||
|
for (int i = 1; i < detektionssignale.size(); i++) {
|
||||||
|
if (detektionssignale.get(i).getAnkunftsZeit().isBefore(erstesDetektionssignal.getAnkunftsZeit())) {
|
||||||
|
erstesDetektionssignal = detektionssignale.get(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return erstesDetektionssignal;
|
||||||
|
}
|
||||||
|
|
||||||
public ArrayList<Schnittpunkt> berechneKreisSchnittpunkte(Kreis kreis1, Kreis kreis2) {
|
public ArrayList<Schnittpunkt> berechneKreisSchnittpunkte(Kreis kreis1, Kreis kreis2) {
|
||||||
|
|
||||||
ArrayList<Schnittpunkt> schnittpunkte = new ArrayList<>();
|
ArrayList<Schnittpunkt> schnittpunkte = new ArrayList<>();
|
||||||
@ -86,8 +103,8 @@ public class EpizentrumRechnung {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean genuegendSchnittpunktevorhanden(ArrayList<EndpunktVerbindung> endpunktVerbindungen) {
|
public boolean genuegendSchnittpunktevorhanden(ArrayList<EndpunktVerbindung> endpunktVerbindungen) {
|
||||||
System.out.println("<<<<<<<<<<<<<<<<<<<<<<genuegendSchnittpunktevorhanden");
|
//Log.i(TAG,"Überprüfe ob genügend Schnittpunkte vorhanden sind");
|
||||||
|
//Log.i(TAG,"Radius: "+ Double.toString(endpunktVerbindungen.get(0).getEndpunkt1().getKreis().getRadius()));
|
||||||
for (EndpunktVerbindung endpunktVerbindung : endpunktVerbindungen) {
|
for (EndpunktVerbindung endpunktVerbindung : endpunktVerbindungen) {
|
||||||
ArrayList<Schnittpunkt> templist;
|
ArrayList<Schnittpunkt> templist;
|
||||||
templist = berechneKreisSchnittpunkte(endpunktVerbindung.getEndpunkt1().getKreis(), endpunktVerbindung.getEndpunkt2().getKreis());
|
templist = berechneKreisSchnittpunkte(endpunktVerbindung.getEndpunkt1().getKreis(), endpunktVerbindung.getEndpunkt2().getKreis());
|
||||||
@ -100,7 +117,6 @@ public class EpizentrumRechnung {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Epizentrum ueberpruefeObEpizentrum(ArrayList<EndpunktVerbindung> endpunktVerbindungen) {
|
public Epizentrum ueberpruefeObEpizentrum(ArrayList<EndpunktVerbindung> endpunktVerbindungen) {
|
||||||
|
|
||||||
int counter;
|
int counter;
|
||||||
ArrayList<Schnittpunkt> schnittpunkte = new ArrayList<>();
|
ArrayList<Schnittpunkt> schnittpunkte = new ArrayList<>();
|
||||||
|
|
||||||
@ -120,7 +136,9 @@ public class EpizentrumRechnung {
|
|||||||
if (counter == endpunktVerbindungen.size() - 1) {
|
if (counter == endpunktVerbindungen.size() - 1) {
|
||||||
schnittpunkte.add(s1);
|
schnittpunkte.add(s1);
|
||||||
Epizentrum tempEpizentrum = new Epizentrum();
|
Epizentrum tempEpizentrum = new Epizentrum();
|
||||||
tempEpizentrum.setKoordinaten(berechneEpizentrumKoordinaten(schnittpunkte));
|
Koordinaten koordinaten = (berechneEpizentrumKoordinaten(schnittpunkte));
|
||||||
|
tempEpizentrum.setKoordinaten(koordinaten);
|
||||||
|
Log.i(TAG, "Epizentrumkoord: " + tempEpizentrum.getKoordinaten().getX() + " " + tempEpizentrum.getKoordinaten().getY());
|
||||||
return tempEpizentrum;
|
return tempEpizentrum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,17 +148,20 @@ public class EpizentrumRechnung {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Koordinaten berechneEpizentrumKoordinaten(ArrayList<Schnittpunkt> schnittpunkte) {
|
public Koordinaten berechneEpizentrumKoordinaten(ArrayList<Schnittpunkt> schnittpunkte) {
|
||||||
|
Log.i(TAG, "Berechne Epizentrum Koordinaten");
|
||||||
double x = 0;
|
double x = 0;
|
||||||
double y = 0;
|
double y = 0;
|
||||||
for (Schnittpunkt s : schnittpunkte) {
|
for (Schnittpunkt s : schnittpunkte) {
|
||||||
x+= s.getKoordinaten().getX();
|
x+= s.getKoordinaten().getX();
|
||||||
y+= s.getKoordinaten().getY();
|
y+= s.getKoordinaten().getY();
|
||||||
}
|
}
|
||||||
return new Koordinaten(new BigDecimal(x/schnittpunkte.size()).setScale(DOUBLESTELLEN, RoundingMode.HALF_UP).doubleValue(),
|
x = new BigDecimal(x/schnittpunkte.size()).setScale(DOUBLESTELLEN, RoundingMode.HALF_UP).doubleValue()*0.999308681;
|
||||||
new BigDecimal(y/schnittpunkte.size()).setScale(DOUBLESTELLEN, RoundingMode.HALF_UP).doubleValue());
|
y = new BigDecimal(y/schnittpunkte.size()).setScale(DOUBLESTELLEN, RoundingMode.HALF_UP).doubleValue()*1.000831381;
|
||||||
|
return new Koordinaten(x,y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<EndpunktVerbindung> ermittleEndpunktKonbinationen(ArrayList<Endpunkt> tempBerechungsObjekte) {
|
public ArrayList<EndpunktVerbindung> ermittleEndpunktKonbinationen(ArrayList<Endpunkt> tempBerechungsObjekte) {
|
||||||
|
|
||||||
ArrayList<EndpunktVerbindung> verbindungen = new ArrayList<>();
|
ArrayList<EndpunktVerbindung> verbindungen = new ArrayList<>();
|
||||||
Set<Set<Endpunkt>> combinations = Sets.combinations(ImmutableSet.copyOf(tempBerechungsObjekte), 2);
|
Set<Set<Endpunkt>> combinations = Sets.combinations(ImmutableSet.copyOf(tempBerechungsObjekte), 2);
|
||||||
for (Set<Endpunkt> tempEndpunkt : combinations) {
|
for (Set<Endpunkt> tempEndpunkt : combinations) {
|
||||||
@ -148,6 +169,7 @@ public class EpizentrumRechnung {
|
|||||||
EndpunktVerbindung endpunktVerbindung = new EndpunktVerbindung(helpArrayToGetValues.get(0), helpArrayToGetValues.get(1));
|
EndpunktVerbindung endpunktVerbindung = new EndpunktVerbindung(helpArrayToGetValues.get(0), helpArrayToGetValues.get(1));
|
||||||
verbindungen.add(endpunktVerbindung);
|
verbindungen.add(endpunktVerbindung);
|
||||||
}
|
}
|
||||||
|
Log.i(TAG, "Endpunkteverbindungen Erfolgreich festgelegt, Anzahl: " + verbindungen.size());
|
||||||
return verbindungen;
|
return verbindungen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,11 +193,12 @@ public class EpizentrumRechnung {
|
|||||||
return detektionssignal.getAnkunftsZeit().minusSeconds(sec);
|
return detektionssignal.getAnkunftsZeit().minusSeconds(sec);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void erhoheRadius(ArrayList<Endpunkt> tempEndpunktListe) {
|
public void erhoheRadius(ArrayList<Endpunkt> tempEndpunktListe) {
|
||||||
|
|
||||||
for (Endpunkt b : tempEndpunktListe) {
|
for (Endpunkt b : tempEndpunktListe) {
|
||||||
b.erhoeheRadius(SCHRITTWEITE);
|
b.erhoeheRadius(SCHRITTWEITE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user