Skip to main content

Spotfire Geo Capabilities Using your browser geo location


With the new rich HTML text area in Spotfire it is possible to get the user location while the user is looking at the analysis in a consumer or business author mode (basically in a browser that supports location)
With the geo location you could now create a calculated column which calculates distance between you and your datapoints like stores, wells, clinics, etc

Spotfire 6.0 has a new function GreatCircleDistance() that makes this easy. E.g.:
DistanceInMiles = 3959 * GreatCircleDistance(${AppGeoLatitude},${AppGeoLongitude},[Latitude],[Longitude])


This is especially great for people in the field and are interested in analysing data around them geographically.


To get this feature in the regular browser we will do following series of steps
1) (${AppGeoLatitude} and ${AppGeoLongitude} are two reserved properties that can be used by Ipad app to set the location to. So for the purpose of this exercise we will use the same properties, so go ahead and define them in your analysis.
These are document properties and can be added from Edit>> Document Properties>> Properties(Tab) and then Add
2) Then create  a text area and add some button that can trigger to get location.


<input id="getLocation" onclick="getmylocation()" >Get My Location</input>

3) Unfortunately at this point there is no way to set document properties using JS directly. So we do a little trick
4) We add two spotfire input field controls, mapping one of them to your AppGeoLatitude and other AppGeoLongitude
5) This will show up as two Spotfire controls (input fields)
6) Now if you don't really want to show the fields in the text area then wrap it around with a Div tag and use style visibility:hidden

So for e.g the html should show something like this
<input id="getLocation" onclick="getmylocation()" >Get My Location</input>
<div style="visibility:hidden">
<DIV id=mylatitude><SpotfireControl id="1a6f119726374d7f94c5b6951f5e6daa" /> </DIV>
<DIV id=mylongitude><SpotfireControl id="2d38a9e7d8b740b39b4e3554c5ba78b2" /> </DIV>

7) Now comes the javascript part
8) We will write that in the getmylocation() function The code is as follows.

function getmylocation()
{
   if (navigator.geolocation)
    {
    navigator.geolocation.getCurrentPosition(showPosition);
    }
  else{x.innerHTML = "Geolocation is not supported by this browser.";}
}

function showPosition(position)
{
$("#mylatitude input").first().val(position.coords.latitude);
  $("#mylatitude input").first().blur();
  
  $("#mylongitude input").first().val(position.coords.longitude);

  $("#mylongitude input").first().blur();
}

The getmylocation function gets the latitude and longitude for you,
Then when we do $("#mylatitude input").first() it looks for the first input tag inside if mylatitude div.
(Internally spotfire input field control basically generates a input field. So i use that logic to set the value using .val()

Then to trigger the actually property update you call the blur function.

Now basically this should get you the location and if there is a calculated column that uses the properties to calculate distance they should  be automatically recalculated generating a distance for you which you can now use to filter.

Cheers!!!

Comments

Popular posts from this blog

Calendar Chart in Spotfire

I recently had a colleague asking me to show him the data in a calendar format.. Something like this I basically used a scatterplot for this.  You can check out the original DXP here  http://bit.ly/spotcalendar Some key settings to make it a calendar. Please note Order date is the date of interest here These expressions are out of the box expressions, no need to handcode them, but select them in the axis value  X Axis    <BinByDateTime([Order Date],"DayOfWeek",0)> Y Axis    Week([Order Date]) Trellis into panels   <BinByDateTime([Order Date],"Year.Quarter.Month",2)> Manual layout 4 X 3 Labels  UniqueConcatenate(DayOfMonth([Order Date])) Shape Tiled Markers Marker by   <UniqueConcatenate([Order Date])> Happy plotting your calendar!!!

Using Accordions in Spotfire Text Areas

Spotfire 6.0 provides great tools for quickly building your dashboard, but here we will learn to spice up things with the help of new 6.0 text area. If you are not aware the new 6.0 Text area supports HTML, Javascript and CSS. This opens up possibilities for doing a lot more with the text area. Some of the basic stuff can be seen here http://spotfire.tibco.com/qrt/UBSAN/presentation.html?pcode=100044   One of the cool things you can do is build an accordion panel in the text area for better utilization of the valuable screen real estate and helping the overall experience.(Watch the 0:15 second video below to see how accordion works - Sorry for the jitter in the video. The screen recorder does not record fast enough) Here is the html behind the text area : Please note that Spotfire controls are automatically created when you add text area controls, like filters, drop down lists etc. <DIV id="myaccordion"> <H3>Analysis Details</...

Spotfire Writing back to a database

Lot of time users need to write back to a database. Spotfire provides different ways to do this, Without going thru the code I am going to talk thru the different options available. But if you need detailed instructions, please leave some comments and will try to provide one 1) Stored Procedures. Advantages : Complex logic is easy to encapuslate in procedures. Also you are not storing username/passwords anywhere  Spotfire can execute stored procedures and these procedures could be fetching data, or can be procedures that can be run Pre or Post running a query. You can then use procedures that basically update your database table or even inserts new rows in tables. When using Spotfire information model it allows you to use these procedures which you can repurpose for updating your database. Spotfire also understands inputs to a procedure and they can be mapped to your marked rows/filtered rows/ properties/constants etc from your analytics. Steps to do that would be ...