Gedanken über Positionsbestimmung in einem Bild

Hallo Leute,

hier sind meine Gedanken über mein zukünftiges Projekt und ich hoffe ihr könnt mich verbessern oder einen besseren Vorschlag bringen, bevor ich mein Projekt gleich falsch anfange.

Es soll ein Android-Programm werden, habe es aber absichtlich nicht unter die Rubrik Android gestellt, da es hier nicht um Android sondern um die Gedanken/Absichten geht.

Ich habe einen Raum, nehmen wir ein Wohnzimmer. Von diesem Zimmer habe ich den Grundriss.
Wenn man das Androidprogramm startet sieht man sofort das Bild dieses Grundrisses.

Nun möchte ich gerne mit dem Handy in der Hand durch das Wohnzimmer gehen und die Wlandaten (Signalstärke abfangen). Das Abfangen der Daten ist kein Problem, aber ich möchte diese Wlandaten mit X und Y-Werte abspeichern.
Die X und Y Werte sollen die Achsen des Bildes darstellen.
Also würde ich so etwas speichern: Signalstärke 15, X=10, Y=3.

Jetzt stellt sich für mich nur die Frage, wie bekomme ich diese X und Y Werte? Hier meine Ansätze die leider immer ein Problem bringen:
Dazu ein Bild als Hilfestellung:

  1. Ich hole mir die Länge vom Rand des Bildes. z.B. wäre das x=10cm. y=10cm
    Wenn ich nun auf den Bildschirm klicke wo man im Raum auch stehen sollte, zieht man einen gedachter Strich nach ganz unten und nach ganz rechts. Jetzt sehe ich z.B. auf der X-Achse, dass ich auf 2,4cm bin und auf der Y-Achse bei 3cm bin. Das speichere ich nun mit der Wlanstärke wo ich stehe.

Könnte funktionieren, das Problem dabei ist, jeder Bildschirm obgleich PC oder Handy hat eine Unterschiedliche Größe, deshalb kann man nicht einfach die Länge des Bildes nehmen und dann diese Daten in eine Datenbank speichern, denn die Daten würden nur für dieses eine Gerät mit dieser Auflösung stimmen.

  1. Überlegung:
    Man macht alles mit Prozente. Also man nimmt die Länge jeder Achse und sagt: Das sind 100%.
    Also im obrigen Beispiel wäre X=10cm 100% und y=10cm 100%
    Wenn ich jetzt das selbe wie oben nochmal durchführe würde, würde ich keine fixen Zahlen für X und Y speichern sondern Prozente. Z.B. steht man dann zu 28% in X und zu 34% in Y. (nicht ausgerechnet, Prozentwerte sind aus der Luft gegriffen) Somit könnte jeder, auch auf Unterschiedlichen Auflösungen Displays sagen, dass wenn man 28% auf der X achse vom linken Rand kommt und von unten 34% nach oben geht dann hat man die Position.

Problem dabei: Kompliziert das ganze zu programmiern, da man dann auch mit 28,875857837337% arbeiten müsste.

Ja wie geht das bitte jetzt besser?
Wie finde ich X und Y Koordinaten sodass man bei jedem Display/Auflösung erkennt, wo die Position ist?

Danke sehr

PS: Sollte es nicht verständlich geschrieben sein, versuche ich es natürlich gerne nochmal neu zu schreiben.

Bei SmartPhones und Tablets hätt ich ja eigentlich GPS gesagt, das könnte aber zu ungenau sein. Aber wie (punkt) genau kannst du (bzw irgend ein anderer) schon auf einen Touchscreen tippen? Also das mit dem Prozentuellen ist schon mal 'ne gute Idee, so wären die Ergebnisse zumindest schon mal immer die selben. Die 100%-Werte kann man sich auch aus den Systemeinstellungen (ScreenSize & DPI) holen und das Bild jeweils auf diese skalieren.

Ist das einfach so ein Bild zu skalieren? Leider noch nie gemacht. (ich gehe mal davon aus, dass wenn es unter java geht, dann gehts auch unter android). Das nächste wäre, wenn man dann zoomt, wäre der ScreenSize wieder anders.

GPS ist ausgeschlossen, das Wohnzimmer ist in einem Schutzbunker 500Meter unter der Erde :smiley:

Später soll das drücken ja auch aufgelöst werden, es soll so etwas ähnliches werden:
https://www.indooratlas.com/Help#step3
Step3 - Collect data Video mal angucken bitte :slight_smile:

[QUOTE=Paul279]GPS ist ausgeschlossen, das Wohnzimmer ist in einem Schutzbunker 500Meter unter der Erde :-D[/QUOTE]In solchen Wohnzimmern wird’s auch kein WLAN geben, wenn du sie brauchst (also die Wohnzimmer in Schutzbunkern mein ich). :lol:

In diesem Fall (da wird ja auch gedreht und verschoben…) muss die Map eine feste Grösse haben und die Positionen aufgrund der Transformationen (Matrix bzw AffineTransform) im Graphics-Object des Screens (heisst bei Android afaik “Paint”) zurückgerechnet werden. Aufwendig, aber nicht anders machbar.

Danke sehr, ich les mich mal ein

Noch kurz zur ersten Frage: Bei sowas empfiehlt es sich meistens, in Prozentwerten zu rechnen - d.h. eigentlich nicht in Prozenzwerten, sondern mit Relativen Werten, zwischen 0 und 1. In diesem Fall also 0.28 und 0.34. Das ganze kann man dann einfach mit dem entsprechenden Faktor multiplizieren, um es auf “echte (Welt-)größen” oder Bildschirmkoordinaten umzurechnen.

also ich hab mir das video mal angesehen, meine meinung : nette idee, aber praktische umsetzung ? naja …

wie es genau in dem video gemacht wird kann ich schlecht sagen, aber : mit nur einem wlan-spot dürfte das ziemlich schwierig und sehr ungenau werden
grund : radio-wellen breiten sich ringförmig aus, du hast also (zumindest rein theoretisch, mal abgesehen von störeinflüssen) in einem bestimmten radius auch immer genau die gleiche wlan-leistung, so kannst du maximal einen möglichen radius vom spot “berechnen” aber ganz sicher keinen fixen punkt
wenn sich das ganze auf eine eben gleicher höhe beschränkt brauchst du mindestens einen zweiten spot der relativ zum erste so aufgestellt sein muss das es keinen schnittpunkt zwischen den radien doppelt gibt, möglich also z.b. beide spots in benachbarten ecken, diagonal jedoch würde es wieder mehrere radien mit 2 schnittpunkten geben

soll das ganze dann auch noch für verschiedene ebenen laufen brauchst du noch mindestens einen dritten spot in einer anderen höhe um deine position im 3-dimensionalen raum korrekt bestimmen zu können (ist auch der grund warum man für gps min 3 satelieten braucht)

worauf ich hinaus will ist einfach gesagt : wenn du für die positionsbestimmung irgendwelche messdaten nimmst brauchst du mindestens 2 bekannte fix-punkt (bzw 3 wenns auch unterschiedliche höhen gibt) deren radien sich jeweils nur ein einem punkt schneiden dürfen (ansonsten auf jeden fall mindestens 3 fix-punkte)
und DAS ist mit wlan und einem handels-üblichen smartphone nicht machbar, denn dafür braucht man auch entsprechend viele wlan-adapter