FORUMS
Remove All Ads from XDA

[GUIDE][Difficulty: Advanced] Send an SMS with Address, Speed, and URL for a Map Pin

851 posts
Thanks Meter: 1,884
 
Post Reply Email Thread
Your phone is lost, or you've got a relative who you're okay with sharing your location to. If you're driving, it's hard to give them an exact location, but thanks to the power of Tasker and a Javascriptlet, you can do that and more. With this task, you'll be able to automatically send an SMS with the current Address, current Speed that the phone is traveling, and a URL that drops a pin on the phone's location in Google Maps. Very helpful for easily finding a location! I would like to thank Redditor /u/popillol for figuring out the proper Javascriptlet to parse the Google Maps Geocoding API results.

Prerequisites
  1. Secure Settings plugin if you are rooted and want to be able to automatically toggle location mode
  1. Create a new Profile and select the Event context. Go to Phone and select Received Text. For the Type, leave it at Any and the Sender field blank. However for the Content field, choose a trigger phrase that you will share with your trusted relatives. This trigger phrase should be unique enough that there is no way it will trigger based off of any random text message.
  2. Create a Task and name it 'Get Location.'


Now, for the task itself. Be warned that this involves some Javascript, so be sure you copy/paste the functions in properly otherwise it might not work.
  1. Variables --> Variable Set. Set Name to %from and To to %SMSRF. This gets the phone number that the text was sent from and puts it into a variable called %from.
  2. (If Rooted) Plugin --> Secure Settings. Choose Location Mode/High Accuracy under System+ Actions.
  3. Location --> Get Location. Set the source as Any.
  4. Net --> HTTP Get. Under Server:Port, put in the following URL to access the Google Maps Geocoding API:
    Code:
    maps.google.com/maps/api/geocode/json?latlng=%LOC&sensor=false
    Set Mime Type as text/xml
  5. Code --> Javascriptlet. For the code, add the following:
    Code:
    var locj = JSON.parse(global("%HTTPD"));
    var spd = Number(global("%LOCSPD"))*2.23693629;
    var lat = global("%LOC").split(",");
    var lon = Math.abs(lat[1]);
    lat = lat[0];
    var latd = Math.floor(lat);
    var latm = ( lat - latd )*60;
    var lats = ( latm - Math.floor(latm) )*60;
    latm = Math.floor(latm);
    var lond = Math.floor(lon);
    var lonm = ( lon - lond )*60;
    var lons = ( lonm - Math.floor(lonm) )*60;
    lonm = Math.floor(lonm);
    lat = latd+"\°"+latm+"\'"+lats.toFixed(1)+"%22N";
    lon = lond+"\°"+lonm+"\'"+lons.toFixed(1)+"%22W";
    var url = "https://www.google.com/maps/place/"+lat+"+"+lon+"/@"+global("%LOC")+",14z";
    
    if ( locj.results.length > 0 )
    {
    var short = locj.results[0].address_components[0].short_name;
    if ( short.search(/[^\d-]/) == -1 )
    short = "";
    else
    short = "("+short+") ";
    var add = locj.results[0].formatted_address;
    add = short+add.replace(", USA","");
     }
  6. Phone --> Send SMS. For the Number, put in %from. For the Message, put in the following:
    Code:
    %add 
    Speed ~ %spd mph 
    URL: %url


That's it! As mentioned in the Reddit thread for this, you can use AutoInput to automate turning on/off location services if you aren't rooted, but it's a bit of a messy implementation so I recommend just leaving location services on.
Attached Files
File Type: xml Send_Location.prf.xml - [Click for QR Code] (4.1 KB, 2516 views)
The Following 15 Users Say Thank You to MishaalRahman For This Useful Post: [ View ] Gift MishaalRahman Ad-Free
 
 
8th March 2016, 05:41 AM |#2  
vizdak's Avatar
Senior Member
Flag Mindanao
Thanks Meter: 73
 
More
Maybe publish the script that can be downloaded and inserted from tasker. Thanks.
8th March 2016, 05:45 AM |#3  
MishaalRahman's Avatar
OP Editor in Chief
Thanks Meter: 1,884
 
More
Quote:
Originally Posted by vizdak

Maybe publish the script that can be downloaded and inserted from tasker. Thanks.

I've attached the script in the post. Enjoy!
The Following User Says Thank You to MishaalRahman For This Useful Post: [ View ] Gift MishaalRahman Ad-Free
8th March 2016, 01:29 PM |#4  
Senior Member
Flag Karachi
Thanks Meter: 73
 
More
Quote:
Originally Posted by MishaalRahman

I've attached the script in the post. Enjoy!

Dropped pin is not accurate, its showing all blue area. Whats the problem?
8th March 2016, 02:17 PM |#5  
Member
Thanks Meter: 4
 
More
Hi,

Just bought tasker and setted this up, seems like the url query is not working, any tips?

Also, putting that url in chrome gives me the following:

Code:
{
"results" : [],
"status" : "ZERO_RESULTS"
}
Regards.
Attached Thumbnails
Click image for larger version

Name:	Screenshot_20160308-110913[1].jpg
Views:	534
Size:	207.4 KB
ID:	3675053  
8th March 2016, 05:52 PM |#6  
patrickpetersen's Avatar
Senior Member
Flag Esbjerg
Thanks Meter: 25
 
More
Quote:
Originally Posted by MishaalRahman

Your phone is lost, or you've got a relative who you're okay with sharing your location to. If you're driving, it's hard to give them an exact location, but thanks to the power of Tasker and a Javascriptlet, you can do that and more. With this task, you'll be able to automatically send an SMS with the current Address, current Speed that the phone is traveling, and a URL that drops a pin on the phone's location in Google Maps. Very helpful for easily finding a location! I would like to thank Redditor /u/popillol for figuring out the proper Javascriptlet to parse the Google Maps Geocoding API results.

Prerequisites

  1. Secure Settings plugin if you are rooted and want to be able to automatically toggle location mode
  1. Create a new Profile and select the Event context. Go to Phone and select Received Text. For the Type, leave it at Any and the Sender field blank. However for the Content field, choose a trigger phrase that you will share with your trusted relatives. This trigger phrase should be unique enough that there is no way it will trigger based off of any random text message.
  2. Create a Task and name it 'Get Location.'


Now, for the task itself. Be warned that this involves some Javascript, so be sure you copy/paste the functions in properly otherwise it might not work.
  1. Variables --> Variable Set. Set Name to %from and To to %SMSRF. This gets the phone number that the text was sent from and puts it into a variable called %from.
  2. (If Rooted) Plugin --> Secure Settings. Choose Location Mode/High Accuracy under System+ Actions.
  3. Location --> Get Location. Set the source as Any.
  4. Net --> HTTP Get. Under Server:Port, put in the following URL to access the Google Maps Geocoding API:
    Code:
    maps.google.com/maps/api/geocode/json?latlng=%LOC&sensor=false
    Set Mime Type as text/xml
  5. Code --> Javascriptlet. For the code, add the following:
    Code:
    var locj = JSON.parse(global("%HTTPD"));
    var spd = Number(global("%LOCSPD"))*2.23693629;
    var lat = global("%LOC").split(",");
    var lon = Math.abs(lat[1]);
    lat = lat[0];
    var latd = Math.floor(lat);
    var latm = ( lat - latd )*60;
    var lats = ( latm - Math.floor(latm) )*60;
    latm = Math.floor(latm);
    var lond = Math.floor(lon);
    var lonm = ( lon - lond )*60;
    var lons = ( lonm - Math.floor(lonm) )*60;
    lonm = Math.floor(lonm);
    lat = latd+"\°"+latm+"\'"+lats.toFixed(1)+"%22N";
    lon = lond+"\°"+lonm+"\'"+lons.toFixed(1)+"%22W";
    var url = "https://www.google.com/maps/place/"+lat+"+"+lon+"/@"+global("%LOC")+",14z";
    
    if ( locj.results.length > 0 )
    {
    var short = locj.results[0].address_components[0].short_name;
    if ( short.search(/[^\d-]/) == -1 )
    short = "";
    else
    short = "("+short+") ";
    var add = locj.results[0].formatted_address;
    add = short+add.replace(", USA","");
     }
  6. Phone --> Send SMS. For the Number, put in %from. For the Message, put in the following:
    Code:
    %add 
    Speed ~ %spd mph 
    URL: %url


That's it! As mentioned in the Reddit thread for this, you can use AutoInput to automate turning on/off location services if you aren't rooted, but it's a bit of a messy implementation so I recommend just leaving location services on.

The part where you used +"%22N" and +"%22W" wouldn't it only make it work in the northern part of America?
Tried it out, and by my location I should be in Denmark, but the URL leads me to be somewhere in the Atlantic Ocean.

If I delete the two parts or simply change the W to an E, it works... But isn't it possible to make Google determine if it should be N/S and W/E? I mean, it can be fixed with an If(), but isn't there a way to make the api do that? But that's a cool script! I've been looking for ages for a function that could do the speed without root - you helped me out, thanks!
8th March 2016, 05:52 PM |#7  
MishaalRahman's Avatar
OP Editor in Chief
Thanks Meter: 1,884
 
More
Quote:
Originally Posted by mnhs1010

Dropped pin is not accurate, its showing all blue area. Whats the problem?

Sometimes, the URL that gets sent in the SMS doesn't format properly (there's nothing you can do about that except maybe use a URL shortener service) so you'll have to make sure you copy/paste the ENTIRE URL that gets sent rather than just clicking on what it gives you.

Quote:
Originally Posted by Cryorus

Hi,

Just bought tasker and setted this up, seems like the url query is not working, any tips?

Also, putting that url in chrome gives me the following:

Code:
{
"results" : [],
"status" : "ZERO_RESULTS"
}
Regards.

Hi, it's perhaps failing because your phone failed to get a location lock, meaning %LOC is not being set. If %LOC is not set, then the URL query will not work as Google Maps is expecting GPS coordinates being passed to it. As for why it doesn't work when you open the URL in Chrome, same reason.

One thing you can do is add an Alert --> Flash command and Flash %LOC right after the "Get Location" action. If you don't see GPS coordinates pop up then it means Tasker timed out on getting a location on you.
8th March 2016, 05:54 PM |#8  
MishaalRahman's Avatar
OP Editor in Chief
Thanks Meter: 1,884
 
More
Quote:
Originally Posted by patrickpetersen

The part where you used +"%22N" and +"%22W" wouldn't it only make it work in the northern part of America?
Tried it out, and by my location I should be in Denmark, but the URL leads me to be somewhere in the Atlantic Ocean.

If I delete the two parts or simply change the W to an E, it works... But isn't it possible to make Google determine if it should be N/S and W/E? I mean, it can be fixed with an If(), but isn't there a way to make the api do that? But that's a cool script! I've been looking for ages for a function that could do the speed without root - you helped me out, thanks!

You are correct. To make the Javascriptlet work globally, you would need to do the following (this is from the Redditor that came up with the Javascript):

Quote:

This assumes you're using North latitude numbers and West longitude numbers (so North America). If you want to use it globally, this would be the way to do it:

In the javascriptlet, check the sign (+ or -) of lon before getting the absolute value, and assign a new variable string with either W or E based on the sign. Do the same thing with lat (after the lat=lat[0] line) and with N or S. Then near the bottom where it puts the degrees, minutes, and seconds together, use that string variable after the "%22". I haven't tested it but that should work.

8th March 2016, 06:00 PM |#9  
Member
Thanks Meter: 4
 
More
Quote:
Originally Posted by MishaalRahman

Sometimes, the URL that gets sent in the SMS doesn't format properly (there's nothing you can do about that except maybe use a URL shortener service) so you'll have to make sure you copy/paste the ENTIRE URL that gets sent rather than just clicking on what it gives you.



Hi, it's perhaps failing because your phone failed to get a location lock, meaning %LOC is not being set. If %LOC is not set, then the URL query will not work as Google Maps is expecting GPS coordinates being passed to it. As for why it doesn't work when you open the URL in Chrome, same reason.

One thing you can do is add an Alert --> Flash command and Flash %LOC right after the "Get Location" action. If you don't see GPS coordinates pop up then it means Tasker timed out on getting a location on you.

Thanks for the tip, it seems that step 3. Get Location takes a while (around a minute or more) to complete, after that, Flashing %LOC doesn't return anything.

Edit: Working now, I turned options for GPS to use Wifi and Bluethooth and it worked, but the link isn't sent completly, the hyperlink breaks at the first comma. Example: www.url.com/22w22s1234,etc.

Edit 2: Just read that there is nothing to do about it... gona find a way around.

Edit 3: Found a way around using the bitly API, the problem now is even if I change the location N to S (I'm in South America) it doesn't pin anything. (It doesnt even with N)
8th March 2016, 06:49 PM |#10  
Senior Member
Flag Karachi
Thanks Meter: 73
 
More
Quote:
Originally Posted by MishaalRahman

You are correct. To make the Javascriptlet work globally, you would need to do the following (this is from the Redditor that came up with the Javascript):

Can someone edit the script and provide me for global? I am in Pakistan and its not showing accurate drop pin.
9th March 2016, 01:01 PM |#11  
Member
Thanks Meter: 4
 
More
This is the link it is giving me: https://www.google.com/maps/place/-3...70.6200612,14z

No marker and the address is not accurate.

Edit: Address was not accurate because of where I was (office) went outside and it worked perfectly, still there is no pointer in the map.
Post Reply Subscribe to Thread

Guest Quick Reply (no urls or BBcode)
Message:
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes