Guten Tag allerseits! Ich mache gerade ein kleines Privatprojekt für mich und meine Kinder zuhause und habe im Moment foglendes Problem. Ich verwende gerade einen arduino GPS-shield und möchte gerne für mein Quart-Bike ein Bereich eingrenzen um damit sozusagen dem Fahrzeug vorgeben wo es fahren darf. Also sagen wir mal ich hab ein Rechteck und er soll in diesem Bereich fahren und außerhalb nicht. Mein Problem ist ich schaffe es nicht die Koordinaten miteinander zu verbinden (punkt A mit punkt B usw.). Ich danke schon im voraus auf alle Antworten! MfG. bmsirb
Danke für deine Antwort! Aber ich bin relativ neu auf diesem Gebiet! Aber aus dem "geofencing algorithm" versteh ich wenig bis gar nichts :') Kannst du es bitte näher erläutern denn ich denke das wäre was für mein Projekt
http://www.dbs.ifi.lmu.de/Lehre/GIS/SS2009/Skript/Kap-06.pdf Würde mich aber nicht wundern wenn es schon etwas fertiges für den ar**ino gibt.
Geo Fence heisst soviel wie "Gebietskäfig" und hat heutzutage Einzug bei den Quadcoptern mit gPS das man sagen kann vom Startpunkt bis Grenze 20mx20x20 m. Ohne höhe ist das nichtmal ein Algorithmus, sondern eine Koordinatenrechnung die nicht sehr schwer ist.. Allerdings muss man dann immer von einem Ausgangspunkt ausgehen.. nen halbes Strassenverzeichnis wird dann eher zum Algorhitmus.
ich habe für ein anderes Projekt etwas ähnliches realisiert. Hier wird im Radius um einen Mittelpunkt ein Bereich überwacht, wird der Bereich (Kreis) um 5 Meter verlassen, wird eine Aktion ausgeführt, hier wird ein Zähler hochgezählt und ein akustisches Signal ausgegeben. Das einzige was du machen musst, die Koordinaten in UTM (x0, y0) umrechnen, wie du das für dein Arduino machst, musst du allerdings selber raus finden, da hab ich keine Ahnung.
1 | If GPS1.GPSEnabled Then |
2 | lat1 = Location1.Latitude |
3 | lon1 = Location1.Longitude |
4 | utm = Navigation1.LatLonToUTM(6378137.0, 1/298.257223563, lat1, lon1) |
5 | x0 = utm(0) |
6 | y0 = utm(1) |
7 | Label1.Text = "Aktuelle Position: " & Round2(x0, 2) & " / " & Round2(y0, 2) |
8 | If Button1.Tag = "1" OR radius > 0 Then |
9 | entfernung = Sqrt(Power(x0 - x1, 2) + Power(y0 - y1, 2)) |
10 | Label3.Text = "Entfernung zum Mittelpunk: " & Round2(entfernung, 2) |
11 | If radius > 0 AND (entfernung > radius + 5) AND wz Then |
12 | zähler = zähler + 1 |
13 | Label6.Text = "Zähler:" |
14 | Label5.Text = Round(zähler) |
15 | Beeper1.Initialize(1000, 800) |
16 | Beeper1.Beep |
17 | wz = False |
18 | Else If entfernung < radius - 5 AND wz = False Then |
19 | wz = True |
20 | End If |
21 | End If |
22 | End If |
:
Bearbeitet durch User
für den Privatgebrauch kann man - meiner Meinung nach - die Krümmung der Erdoberfläche als nicht vorhanden bettrachten, da die eingegrenzte Fläche doch eher klein sein dürfte ;-) in dem Fall ist das Problem einfach: Die Grenzen des Bereichs werden durch zwei bis vier Koordinatenpaare definiert. Im Fall "zwei" ist die Aufgabe (abgesehen von einer Umwandlung in ein brauchbares Datenformat) mit einem einzigen if (und mehreren Teilbedingungen) erledigt. Im Fall "mehr als zwei" brauchts ein bisschen mehr Hirnschmalz, ist aber mit Mitteln der Mathematik aus der Mittelschule durchaus in recht kurzer Zeit zu erledigen. Schwieriger wirds, wenn die Größenordnung der Fläche 1000 km² überschreitet, dann sollte man sich (je nach gewünschter Genauigkeitsanforderung) tiefer mit der Gemotrie beschäftigen, da ansonsten kein Rechteck mehr herauskommt ;-)
Daniel F. schrieb: > für den Privatgebrauch kann man - meiner Meinung nach - die Krümmung der > Erdoberfläche als nicht vorhanden bettrachten, da die eingegrenzte > Fläche doch eher klein sein dürfte ;-) Wenn man Mercator-projizierte Karten verwendet, passt das eh, denn die machen das auch. > Im Fall "mehr als zwei" brauchts ein bisschen mehr Hirnschmalz, ist aber > mit Mitteln der Mathematik aus der Mittelschule durchaus in recht kurzer > Zeit zu erledigen. Wobei man da, wenn's allgemein überall funktionieren soll, etwas aufpassen muss, denn die Erdoberfläche hat blöderweise keinen Anfang und kein Ende. Es gibt also einen "wrap-around" bei den Koordinaten, den man berücksichtigen muss. > Schwieriger wirds, wenn die Größenordnung der Fläche 1000 km² > überschreitet, dann sollte man sich (je nach gewünschter > Genauigkeitsanforderung) tiefer mit der Gemotrie beschäftigen, da > ansonsten kein Rechteck mehr herauskommt ;-) Nicht nur mit Geometrie, sondern vor allem auch mit Kartografie.
Bestimme von Deinem Rechteck (per GPS-Messung) Längen- und Breitengard links oben (im Nordwesten) -> GrLiOLong und GrLiOLat sowie Längen- und Breitengard rechts unten (im Südosten) -> GrReULong und GrReULat Deines Rechtecks und schreibe diese mit den gemessenene Werten als vorgenannte Konstanten in Dein Programm. Dann, im Programm, prüfe jeweils (mit Longitude und Latitude = akt. GPS-Messung):
1 | IF ( GrLiOLong < Longitude && GrLiOLat > Latitude ) && |
2 | ( GrReULong > Longitude && GrReULat < Latitude ) |
3 | |
4 | {
|
5 | // alles O.K.
|
6 | }
|
7 | |
8 | ELSE
|
9 | |
10 | {
|
11 | // Motor aus :-) oder sonst was ...
|
12 | }
|
Ich gehe davon aus, wir reden vom Standort Deutschland ... Du kannst Di natürlich auch sprechendere Namen für die Variablen / Konstanten ausdenken :-)
Ich denke mal, es wird maximal um einige km gehen. Da sind innerhalb der Polarkreise (und nicht gerade an der Datumsgrenze) Näherungen mit < 1% Fehler möglich, wenn es um ein Quadrat geht, dessen untere/obere Begrenzung in Ost-West- Richtung geht. Man stellt sich auf den Mittelpunkt des Quadrats und das GPS ermittelt die Koordinaten des Mittelpunkts. Nun gibt man dem arduino die halbe Seitenlänge des Quadrats ein. Oder die ganze Seitenlänge und der arduino halbiert sie für den Vergleichswert. Beim Fahren wird mit Hilfe des GPS die Abweichung vom Mittelpunkt in Breite (1852 m / Winkelminute) und Länge (1852 m * cos(Breite) / Winkelminute) erfasst. Die Abweichungen werden absolut (ohne Vorzeichen) mit dem erlaubten Wert verglichen - und bei Überschreitung gibt es ein Signal, oder - oder ....
Beim Quadrat bei dem die Ränder parallel zur Nord/Süd-Achse und Ost/West-Achse verlaufen, nimmst du dir die Koordinaten vom nordöstlichen und vom südwestlichen Punkt und prüfst ob deine Position in der NordsüdKoordinate größer als die vom Nordoste-Punkt UND kleiner als die vom südwest-Punkt ist. Genauso für die Ostwestachse verfahren. Sollte dein Quadrat verdreht sein, solltest du dich noch ein wenig mit Vektorrechnung befassen. MfG chaos
Also, wenn man einen "Wrap around" ausschliessen will, muss man entweder die Entsprechenden Fälle abfangen oder gleich mit Orthodromen rechnen. (Wobei man das dort auch tut) Breitenkorrigierte Koordinaten per Pythagoras machen auch bei einer Strecke von 1500km nur wenig Abweichung. An den Polen nimmt die Abweicheung jedoch zu:
1 | Durchschn_Längenkm = (cos(Breitengrad_A) + cos(Breitengrad_B)) / 2 * 111,111 |
2 | Breitenkm = (Breitengrad_A - Breitengrad_B) * 111,111 |
3 | Längenkm = (Längengrad_A - Längengrad_B) * Durchschn_Längenkm |
4 | Strecke = wurzel(Breitenkm² + Längenkm²) |
Gruß Jobst
:
Bearbeitet durch User
Dieter F. schrieb: > Dann, im Programm, prüfe jeweils (mit Longitude und Latitude = akt. > GPS-Messung): > > IF ( GrLiOLong < Longitude && GrLiOLat > Latitude ) && > ( GrReULong > Longitude && GrReULat < Latitude ) > > { > // alles O.K. > } Da täuscht du dich aber gewaltig, zumindest falls das Ding nicht nur auf Teilen der Erdoberfläche funktionieren soll. Beweis durch Gegenbeispiel. Wo ist übrigens Oben, Unten, Links und Rechts? Das hätte dir schon dein Geographielehrer austreiben sollen.
W.A. schrieb: > Da täuscht du dich aber gewaltig, zumindest falls das Ding nicht nur auf > Teilen der Erdoberfläche funktionieren soll Dieter F. schrieb: > Ich gehe davon aus, wir reden vom Standort Deutschland ... Lesen kannst Du aber - oder ? W.A. schrieb: > Beweis durch Gegenbeispiel. Wo ist übrigens Oben, Unten, Links und > Rechts? Das hätte dir schon dein Geographielehrer austreiben sollen. Dieter F. schrieb: > links oben (im Nordwesten) Dieter F. schrieb: > rechts unten (im Südosten) Habe ich ja wohl alles definiert. Du beweist nur, dass Du nicht richtig liest. Bist Du von Beruf "Oberlehrer"? :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.