Hi guys !
I’m happy to tell you that we have just released the first component of Galigeo for SAP Design Studio.
It was a challenge made possible thanks to a team full of knowledge in the SAP world.
So, what is this component about ?
The answer is Location Analytics.
For all the readers who might be interested of digging up what is Location Analytics in details, here’s two articles that will definitively get you into it :
- Location Analytics: The Missing Component in Retail’s use of Business Intelligence and Analytics
- Why Location Intelligence Improves Marketing Effectiveness
And for all who want to test the Map Component right now, or who don’t like reading, here’s the link to download the package :
- Package (click Try Now, then chose Trial For SAP BO Design Studio)
Note : The component is not meant to be open-sourced.
Info : The component also exists for SAP Lumira, check there for more information
Also, note that the plug-in exists in two versions : freemium and premium. The freemium version has all features available, but is limited to 50 polygons / 100 points per map (and of course it’s free as its name indicates it). The premium version has no limitation but implies licencing.
The plug-in supports versions 1.3, 1.4, 1.5 and 1.6 (including mMode) of Design Studio.
It also supports Chrome, Firefox, and IE 10+ (it should work on IE 9 but you might have some issues with opacity).
At first sight, developing a Location Analytics Component (I will call it Map for more convenience) for Design Studio seems not to be an easy thing. Indeed, unlike Charts, Maps needs more parameters to be ready for use. Fortunately, Design Studio SDK offers possibilities to achieve what I wanted in an flexible way.
Anyway, don’t be scared, the aim of this post is not be technical, but to present the current implemented features, give easy examples of how to use it, and also give an overview of what’s coming next at the end.
I might do a more technical post in the future, for SDK developers or everyone who’s interested anyway.
Presentations have been made, it’s now time for the Component to present itself !
First, let’s suppose you have downloaded and installed the package linked above. You are now ready to use the plug-in.
The plug-in appears in the Galigeo Components tab, named as Galigeo Map.
Like any other component, you drag-&-drop it to your view and you are ready to go.
Firstly, you should see an empty map, and a message above it telling you to bind a data source to the component.
(Note that the first basemap you’ll see may differs that the one in the below screenshot, but you can change it in the Additional Properties anyway).
If you click on the component, and then go to the Additional Properties panel, you’ll see that you already have some options to configure your map. For example, you can select a different basemap than the one selected by default.
Note : If you don’t see the Additional Properties panel by default, you can show it by going in View > Additional Properties in the Design Studio top-menu.
You can change the basemap, yes, but without binding any data you won’t be going anywhere. Basically, you can bind any Data Source to the component, like a basic Crosstab or Chart component.
Note : I’ve not tested the component with all SDK Custom DataSource, but it’s working with CSV DataSource if you want to try it.
Let’s take a basic Data Source.
Figure 4. (note that the Data Source is bigger than only this screenshot).
In this example, we have three Rows Dimensions : State, State Postal Code and City ; and three Measures : Longitude, Latitude and Forecast.
The Longitude and Latitude have been created in a Universe using the centroid of each city, and the Forecast is just a simple thematic I created. All the cities are aggregated by state/state postal code.
In brief, this is a standard Data Source view. However, the Map Component has been designed to accept the largest type of Data Source configuration, for example if the Measures are also aggregated by another Measure (such as a date).
Note : I’m going to make another post I think, where I’ll detail this part a bit more.
Once you’ve binded your Data Source to the Map Component (the same way you bind it to standard component such as Chart), the message on the map will disapear.
It’s time to create your first layer 🙂
Note : If you see another message saying “Please Edit Initial View”, that means your Data Source exists but is not configured. In this case, right-click on your Data Source and chose “Edit Initial View”.
We saw that in our Data Source, we have two Measures called Longitude and Latitude (see figure 4.), both owning coordinates as values. These can be used to create an XY Layer, ie a layer built from longitude and latitude coordinates.
Begin the creation by clicking on the XY button, right below where you selected your basemap.
Below the Layer Setting header, a new panel appears. This is the panel you’ll use to configure your XY Layer. To make it work, you’ll just have to select the correct Longitude field and Latitude field (see figure 5.). Anyhow, just remember than anytime you have to map something coming from the Data Source, you’ll have the choice to use Measures or Row Dimensions. For example, if Latitude was not a Measure but a Row Dimension, you would still be able to use it in the Latitude field.
Whatever, once you’ve done it, you’ll see points displaying on the map.
Here it is, you’ve created your first map, and it took only few clicks.
You can change the Renderer (a.k.a the style/color/thematic/…) of your points by clicking on the Pencil, on the left of your layer’s panel.
In this tab, you can change the Classification type of your points.
The current classifications available are :
- Standard (all the points have the same color)
- Classbreaks (each points have a different color according to a thematic value you’ll define and the number of breaks you want to see)
- Heatmap (per point density or per thematic value you’ll define)
For each classification, you can chose a color for your points (or even a start and an end color in case you use Classbreaks or Heatmap), the size of your points, their shape, their opacity, and a clustering distance (meaning that if two points are too closed, they’ll be both included in a cluster).
For example, here I modified the shape, the size and the cluster distance :
And here, I’ve chosen an Heatmap classification and changed start and end color :
With thus said, to create this layer, you first clicked on XY Layer. By keeping with this logic, that means you can create several layers on each map and superimpose them at your leisure.
If you chose to create another XY Layer, you’ll be able to define another layer with new properties independently from the first one.
Note : you can create up to five layers per map. This is not really due to technical reasons, but mainly for performance one’s.
For example, you’ll be able to superimpose Heatmap on one thematic and Classbreaks on another one (I’ve picked another Data Source for this example, for more convenience) :
Or you could also superimpose two Heatmaps on different thematics (here Point Density and Forecast, look at Figure 4. for Data Source definition) :
Then it’s up to you to play on opacity, radius size, points size, points shape to achieve the clearest map for your data.
I think I enough introduced XY Layer. And now you might wondering, there is also a Dimension button right to the XY one.
So, what is the Dimension button about ?
The Dimension Layer allows you to map your data on an external feature service. In our example (see Figure 4.), if you remember correctly, we had a Row Dimension containing State Name. We can take advantage of it by using a feature service that also owns the same State Names. This is where Dimension Layer becomes useful. Let’s click on Dimension button, a new panel appear.
By default you’ll have an URL pointing on a map service. You can use your own (as long as it respects the ESRI feature service implementation) to map whatever data with a service. In the example above, the URL has returned me its fields available for mapping. We see a field called STATE_NAME. We could map it with the State Dimension of my Data Source.
Nice, it worked ! Now you can map your data on geographical shapes coming from outside Design Studio. Like XY Layer, you can click on the Pencil of the Dimension Layer panel and its renderer. For Dimension Layer, only Classbreaks is available for now. You can still modify the number of breaks, the start and color, the opacity, and so on… and of course chose which Measure or Row Dimension will be used for thematic.
And then, you might wonder (if you don’t I won’t blame you), in my case, how can the State use a Measure when this last one is supposed to be aggregated by City ?
This is where the Aggregated field comes in. By defining it, the component will look for Total field (see figure 14.), so it will be able to use the aggregated result of Forecast per State for example :
If the Aggregated field is not defined, then all Data Source lines will be taken into account. In our example, this could be used if we wanted to map City with a feature service.
Now, let’s combined both layer’s type of the same map
Of course, you can combined Dimension Layer and XY Layer on the same map, or Dimension Layer with other Dimension Layer.
What about API’s ?
The Map Component offers also several API’s in order to let a bit of control for the end-user over the map.
For example, suppose you want to allow him to hide/show layer dynamically. You can use the setLayerVisibility method of the Component to allow that.
But the more useful API I think is what is called Map To BI. It allows you to filter a Data Source from the map.
To activate this feature, let’s click on the Hand on the left side of a layer panel :
Once you’ve checked the Activate Selection checkbox, you’ll see new options appearing. A new button (with a Pencil icon in it) will also be displayed on the top-right of the map :
This new “Pencil” button, is nothing less than a selection tool that will let you draw selections on the map by clicking on features directly or draw random shapes to select multiple features in only one trip.
The Filtering field defines which Dimension will be used for the filter. The Selection Script button opens a ScriptText dialog.
In this example, after a selection is going to be made on the map, the Data Source will be filtered accordingly to the selected Filtering field. Note that this selection option is available for each layer created per map. That means you could also script something else for each created layer, and thus emulate drill-down drill-up combined with Data Source filtering for example. The possibilities are infinite as long as you keep your imagination up.
I think we’re at it. The presentation is already quite long, and I don’t want to lose you after a sleepless night reading all of this 😉 . I could keep on detail the Map Component by giving more complex examples (which I might do, but in another post), or more advanced scripting. But I think that the best thing right for you would be to download the package, install it and familiarize with it. It’s really simple to create valuable maps within few minutes.
To end this, I hope you enjoyed the presentation and also that you’ll enjoy using the Component !
For what is suppose to coming next, here’s few points from the roadmap :
- More Classification methods, such as individual values, quantiles, geobubbles…
- More API’s, to allow zoom synchronisation between two maps for example
- The possibility to use custom basemaps from an URL
Anyhow, if you have any feedback, ideas, or even criticism regarding this Component or its use, feel free to leave a comment, or directly send me a private message !
A big thanks to everyone who read this post until the end 🙂 , and also this great community which helped me when I was struggling within the development.