Standortbestimmung mit genauer Adresse und Sprachausgabe

C

csjburg

Neues Mitglied
8
Moin!

Ich habe ein Projekt gebastelt, welches:

1. über GPS den genauen Standort (als Adresse) ermittelt
2. diesen Standort nach erfolgreicher Ortung vorliest
3. Strasse, Hausnummer, PLZ und Ort als Zooper-Variable übergibt (#TStrasse# und #TOrt#)

Jedes mal, wenn das Display ausgeschaltet wird, aktualisiert sich der Standort.

Zu finden ist das Projekt hier.

Meine Tests sind bislang erfolgreich. Wer Lust hat, kann es ja auch mal testen. Für Verbesserungsvorschläge bin ich immer dankbar (gerade der Trigger gefällt mir noch nicht so richtig, vielleicht hat ja jemand eine zündende Idee)!

Gruß, Claus
 
Bei mir funktioniert der Task ebenfalls.

Ich persönlich versuche meine Tasks immer so zu bauen, dass möglichst keine globalen Variablen oder Dateien erzeugt werden.
Zumindest die Datei lässt sich bei Deiner Umsetzung aber nicht vermeiden.
Hier zum vergleich mal meiner, welcher ein Resultat nach dem Muster 'Kurfürstendamm 101, Berlin' ausgibt:
Code:
Location (13)
	A1: If [ %par1 Set ]
	A2: HTTP Get [ Server:Port:http://maps.googleapis.com/maps/api/geocode/json?latlng=%par1&sensor=false Path: Attributes: Cookies: User Agent: Timeout:100 Mime Type: Output File: Trust Any Certificate:Off Continue Task After Error:On ] 
	A3: Else 
	A4: Get Location [ Source:GPS Timeout (Seconds):240 Continue Task Immediately:Off Keep Tracking:Off ] 
	A5: HTTP Get [ Server:Port:http://maps.googleapis.com/maps/api/geocode/json?latlng=%LOC&sensor=false Path: Attributes: Cookies: User Agent: Timeout:100 Mime Type: Output File: Trust Any Certificate:Off Continue Task After Error:On ] 
	A6: End If 
	A7: Variable Set [ Name:%res To:%HTTPD Do Maths:Off Append:Off ] 
	A8: Variable Split [ Name:%res Splitter:" Delete Base:Off ] 
	A9: Return [ Value:%res20 %res8, %res64 Stop:On ]

Bei meiner Nutzung würde Dein Kontext mir schnell den Akku leerziehen.
Du könntest vielleicht berechnen, wie alt der letzte Fix ist (%TIMES-%LOCTMS)und davon abhängig machen, ob Du erneut den Standort abragen willst.
 
  • Danke
Reaktionen: vepman
@ cramu

Ups! Da zolle ich Dir meinen Respekt und ziehe meinen virtuellen Hut - ich hab nämlich von Deiner (bestimmt genialen) Variante kein Wort kapiert...

Würdest Du Deine Variante mal als fertiges Profil zur Verfügung stellen?

Gruß, Claus
 
Dann erklär ichs Dir lieber:

Mein Task ist so aufgebaut, dass man ihn aus einem anderen heraus ausführen kann.
Aus dem Muttertask kann ich so in Form der Variablen %par1 beliebige Koordinaten mitgeben und erhalte dann am Ende die Adresse in einer beliebiegen Variable zurück.

Falls ich den aktuellen Standort nutzen will, beginnt der Task erst bei A4 mit dem GPS-Fix.
Wenn die Daten der 'HTTP Get'-Aktion nicht in eine Datei geschrieben werden, wie Du das machst, sind sie in der Variablen %HTTPD verfügbar, welche ich in A7 in die lokale Variable %res übertrage.
Da die interessanten Informationen wie Straßenname und Hausnummer immer zwischen Anführungszeichen stehen, nutze ich diese in A8 als Splitter und erhalte so fortlaufend nummerierte Teilvariablen (%res1, %res2 ..).

Die gewünschten Inhalte (%res20=Straßenname, %res8=Hausnummer, %res64=Stadt) werden dann in A9 an den Muttertask zurückgegeben.

Um die Adresse einfach mal anzusagen, müsstest Du also nur A4, A5 ,A7, und A8 ausführen, sowie A9 durch Say: Value:%res20 %res8, %res64 ersetzen.
 
  • Danke
Reaktionen: vepman
Nun, mit der ausführlichen Erläuterung (ganz herzlichen Dank dafür!) wird die Sache schon klarer. Ich werde mich am Wochenende mal näher damit befassen. Besonders gefällt mir der Aspekt, die Daten nicht in eine Datei, sondern in eine Variable zu schreiben und von dort auszulesen.

Gruß, Claus
 
Super, danke für den Task.
Zu erwähnen wäre vielleicht noch, dass sich in der gesplitteten Variable %res die richtigen Daten auch in anderen Untervariablen als in %res20, %res8, %res64 befinden können. Bei mir z. B. in %res36. Deshalb habe ich einmal mit einer globalen Variablen gearbeitet, um zu sehen, was in den Splitt-Untervariablen steht.
 
Hm, hab's mal ausprobiert. Je nachdem, wo ich mich befinde, stehen die gesuchten Daten mal in %res_x oder auch mal in %res_y. Somit wird dann als Standort u.U. irgendwas, aber nicht unbedingt Straße bzw. Ort ausgegeben. Das Problem scheint mir, innerhalb der gesplitteten Variablen nach bestimmten Inhalten zu suchen, die sich aber wie gesagt mal hier und mal da befinden können. Das passiert bei meiner (wenn auch programmtechnisch weniger schönen) Variante nicht. Also stehe ich mit der Variante von cramu leider erst mal auf dem Schlauch... ;(

Gruß, Claus
 
Ich hab den Task bisher nicht häufig genutzt und es hat immer problemlos geklappt, allerdings hab ich gestern Abend noch ein wenig damit herumgespielt und über %par1 ein paar Koordinaten von kleinen Käffern ausprobiert.

Das Problem ist, dass bei diesen keine Daten für sublocality_level2, bzw. sublocality_level2 und sublocality_level1 ausgegeben werden, darum verschiebt sich die Information für locality und der Task gibt falsche Werte aus.

Um dem entgegenzuwirken musste ich noch einige IF-Actions einbauen:

Code:
Location (13)
	A1: If [ %par1 Set ]
	A2: HTTP Get [ Server:Port:http://maps.googleapis.com/maps/api/geocode/json?latlng=%par1&sensor=false Path: Attributes: Cookies: User Agent: Timeout:100 Mime Type: Output File: Trust Any Certificate:Off Continue Task After Error:On ] 
	A3: Else 
	A4: Get Location [ Source:GPS Timeout (Seconds):100 Continue Task Immediately:Off Keep Tracking:Off ] 
	A5: HTTP Get [ Server:Port:http://maps.googleapis.com/maps/api/geocode/json?latlng=%LOC&sensor=false Path: Attributes: Cookies: User Agent: Timeout:100 Mime Type: Output File: Trust Any Certificate:Off Continue Task After Error:On ] 
	A6: End If 
	A7: Variable Set [ Name:%res To:%HTTPD Do Maths:Off Append:Off ] 
	A8: Variable Split [ Name:%res Splitter:" Delete Base:Off ] 
	A9: Variable Set [ Name:%number To:%res8 Do Maths:Off Append:Off ] If [ %res16 ~ street_number ]
	A10: Variable Set [ Name:%street To:%res20 Do Maths:Off Append:Off ] If [ %res28 ~ route ]
	A11: Variable Set [ Name:%city To:%res32 Do Maths:Off Append:Off ] If [ %res40 ~ locality ]
	A12: Variable Set [ Name:%city To:%res48 Do Maths:Off Append:Off ] If [ %res56 ~ locality ]
	A13: Variable Set [ Name:%city To:%res64 Do Maths:Off Append:Off ] If [ %res72 ~ locality ]
	A14: Return [ Value:%street,%number,%city Stop:On ]

Je mehr Infos man abfragen will, desto aufwändiger wird der Task, deswegen ist meine Lösung wohl doch nicht perfekt.
Ich werde zukünftig einfach das Adress-Lookup-Feature in AutoLocation nutzen, welches übrigens auch in der kostenlosen Version verfügbar ist.
Ein weiterer Vorteil der App ist, dass sie auf Standortdaten zugreift, welche von GNow sowieso erhoben werden, und man sich darum die energie- und zeitfressende 'Get Location'-Action sparen kann.
 
Hm. Gestern abend habe ich mir mal AutoLocation runtergeladen und die halbe Nacht damit verbracht, dem Teil irgendwas Sinnvolles zu entlocken. Leider Fehlanzeige. Recherchen im Internet haben diesbezüglich auch nix Wesentliches ergeben. Gibt's irgendwo ein TUT für die momentane Adressbestimmung per AutoLocation?

Gruß, Claus
 
Auch hier muss zuerst eine Standortabfrage gemacht werden.
AL greift hierbei auf den von Google ermittelten Standort zu.
Code:
A1: AutoLocation Location [ Configuration:Stopping Location Monitor
Retrieve First Location: true
Update Type: High Accuracy Package:com.joaomgcd.autolocation Name:AutoLocation Location Timeout (Seconds):60 Continue Task After Error:On ]

Danach sind in dem Task folgende Variablen verfügbar:

- %alaccuracy
- %albearing
- %alspeed
- %altime
- %alaltitude
- %allatitude
- %allongitude
- %alprovider

Die Koordinaten nutzt Du dann in der nächsten Aktion für die Adressermittlung.
Code:
A2: AutoLocation Info [ Configuration:Address Lookup Latitude: %allatitude
Address Lookup Longitude: %allongitude Package:com.joaomgcd.autolocation Name:AutoLocation Info Timeout (Seconds):60 Continue Task After Error:On ]
Wenn Du danach eine Flash-Action einbaust und im Textfeld auf das Variablenfeld klickst, siehst Du am Anfang der Liste alle möglichen AL-Variablen.
Zu beachten ist, dass die Variablen welche eine leere Klammer in der Bezeichnung haben, Arrays sind, also mehrere Werte enthalten.
Code:
A3: Flash [ Text:%aladdresses1 Long:On ]
 
Also erst mal ganz lieben Dank, dass Du Dir solche Mühe machst!

Habe den Task wie von Dir beschrieben eingegeben, wobei die nachfolgend roten Passagen gar nicht einzugeben waren:

A1: AutoLocation Location [ Configuration:Stopping Location Monitor Retrieve First Location: true Update Type: High Accuracy Package:com.joaomgcd.autolocation Name:AutoLocation Location Timeout (Seconds):60 Continue Task After Error:On ]

A2: AutoLocation Info [ Configuration:Address Lookup Latitude: %allatitude Address Lookup Longitude: %allongitude Package:com.joaomgcd.autolocation Name:AutoLocation Info Timeout (Seconds):60 Continue Task After Error:On ]

A3: Flash [ Text:%aladdresses1 Long:On ]

Als Ergebnis bekomme ich leider nur: %aladdresses1

Was mache ich falsch?

Gruß, Claus
 
Kein Problem, ich habe lange nicht mehr an meinen Location-Tasks gearbeitet und jetzt aber wieder Spaß daran.

Die Paketnamen musst Du nicht eingeben, diese speichert Tasker nur ab, weil es sich um ein Plugin handelt.
Das Häkchen bei 'Retrieve First Location' muss man schon setzen, wenn man A1 konfiguriert.

Du könntest mal hinter A2 eine Flash-Action setzen, welche %allatitude anzeigt, um zu schauen ob der Standort überhaupt ermittelt wurde.
Wenn die Variable leer ist, könnte das daran liegen, dass das Häkchen in A1 nicht gesetzt ist, oder dass Du die Standortfreigabe in den Systemeinstellungen nicht aktiviert hast.
 
Die Standortfreigabe in den Systemeinstellungen ist aktiviert. Aber ich finde nirgendwo "Retrieve First Location" :(

ScreenALC.png


Gruß, Claus
 
Bei mir ist diese Option vorhanden.
Kann sein, dass es die nur in der Beta oder nur in der Bezahlversion gibt ..
 

Anhänge

  • screen.png
    screen.png
    43,1 KB · Aufrufe: 280
Tja, ich hab die Bezahlversion...

Trotzdem danke für Deine Hilfe!

Gruß, Claus
 
1.1.32b (Beta)(2014-05-07)
- Added “Generate Map Image” option in “AutoLocation Info” Tasker action that lets you generate images like these
- Added option to retrieve your location in the same task in the “AutoLocation Location” Tasker action, so you can use it right away
- Forced Geofences to update when the location monitor is on. Android should do this by itself, but people were saying it wasn’t happening on their systems. Now I’m doing it manually to make sure that it happens for everyone.
- Added option to not exit Geofences when turning the Geofence monitor on or off. This should help make your Tasker profiles not exit undesirably .
- “AutoLocation Manage” action now retrieves all information about your geofences and makes it available in the task

Dann musst Du entweder warten, oder Dich für die Betarunde eintragen.
 
Nun hab ich die Beta - und es läuft (zumindest bei mir zuhause)! Grossartig! Werd's dann mal unterwegs testen...

Vielen Dank nochmals!

Gruß, Claus
 

Ähnliche Themen

D
Antworten
4
Aufrufe
593
David.P
D
J
Antworten
4
Aufrufe
162
rtwl
rtwl
keinnamemehrfrei
Antworten
3
Aufrufe
299
keinnamemehrfrei
keinnamemehrfrei
Zurück
Oben Unten