FME: Tester on published parameters + composite test

I just discovered a very cool feature in FME. In the past, when I wanted to test a published parameter, I had to use a ParameterFetcher, than a Tester. I found it pretty annoying. Yeah, I know, I’m a lazy person. Ask my wife. So, I wanted the Tester to have the capability of testing published parameters. Well, it seems Safe Software read my mind! In FME2010 – and maybe also in the previous versions, I didn’t check – you can now use the Tester transformer to check the value of published parameters. Plus, there is a new powerful way of combining many tests in only one transformer: the Composite Test criteria! Here’s the easy way of doing all this.

1- Suppose you have a bunch of published parameters – strings, integers, and so on – that you want to test.

2- Use the good old Tester transformer, right click on a field, choose “Set to published parameter”, then select the parameter you want to test.

3- Select the “Composite Test” option in the “Pass Criteria” field. You can then put whatever logic you want in the Test Expression field.

Tadam! Enjoy!

Ecosia… or how searching the web can help save the rainforests!

Imagine saving the rainforests, just by searching the internet! That’s what Ecosia is trying to achieve. Ecosia is a green search engine which donates at least 80% of its advertising revenue to a rainforest protection programm run by the WWF. Each search at Ecosia contributes to the protection of the rainforests. It is powered by Bing and Yahoo search engines.

So far, 223 340 CAD$ have been donated to support WWF’s work in the Amazon. I’ve been so impressed by their work that I couldn’t help it but share this wonderful initiative with you! This is the kind of work that makes me believe that maybe we can work something out to save our beautiful [GIS] planet…

Here is how it works:

  1. You search with Ecosia.
  2. Perhaps you click on an interesting sponsored link.
  3. The sponsoring company pays Bing or Yahoo for the click.
  4. Bing or Yahoo gives the bigger chunk of that money to Ecosia.
  5. Ecosia donates at least 80% of this income to support WWF’s work in the Amazon.

Wanna know more? Visit their web page: http://ecosia.org/how.php

Good luck Ecosia!

Geospatial Revolution Project | Episode Two

What is GIS? How can geographic information help makes this world better?

Very cool maps wallpaper

Hey everyone! Hope you’re doing fine. If you work with GIS – and if you’re like me – you probably love maps! Here is a link to a website that offers beautiful maps of all kinds.

Website here: http://wall.alphacoders.com/index.php?s=Earth&su=Map&page=1

Enjoy!

Google Maps script: Live step by step directions

I’v just seen a very cool application of Google Maps integrated with Javascript in an HTML page. The code has been developed by a guy named Shreerang Patwardhan (don’t ask me to pronounce :P ) and can be found on this blog: http://shreerangpatwardhan.blogspot.com/2010/11/drive-along-cool-coding.html

I’m copying the code here, in case the blog in no longer accessible. Just copy the following code in an HTML file.

<html>
<head>
<meta http-equiv=”content-type” content=”text/html; charset=UTF-8″/>
<title>
Drive Along
</title>

<script src=”http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=ABQIAAAAu3HXU_hLdVPTFGqLed_FCxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQbblEPYBGNoRsuuSU9aBfSq4VAZA” type=”text/javascript”>
</script>

<script src=”http://econym.org.uk/gmap/epoly.js” type=”text/javascript”>
</script>

</head>

<body onunload=”GUnload()”>

<div id=”controls”>
<form onsubmit=”start();return false” action=”#”>
Enter start and end addresses.<br />
<input type=”text” size=”80″ maxlength=”200″ id=”startpoint” value=” ” />
<br />
<input type=”text” size=”80″ maxlength=”200″ id=”endpoint” value=” ” />
<br />
<input type=”submit” value=”Start”  />
</form>
</div>

<div id=”map” style=”width: 700px; height: 500px”>
</div>
<div id=”step”>&nbsp;
</div>
<div id=”distance”>Miles: 0.00
</div>

<script type=”text/javascript”>
if (GBrowserIsCompatible())
{
var map = new GMap2(document.getElementById(“map”));
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(0,0),2);
var dirn = new GDirections();
var step = 5; // metres
var tick = 100; // milliseconds
var poly;
var eol;
var car = new GIcon();
car.image=”http://www.freeiconsweb.com/Freeicons/Car_icon/Dodge%20Viper%20SRT-10.png”
car.iconSize=new GSize(28,28);
car.iconAnchor=new GPoint(16,9);
var marker;
var k=0;
var stepnum=0;
var speed = “”;

function animate(d)
{
if (d>eol)
{
document.getElementById(“step”).innerHTML = “<b>Trip completed<\/b>”;
document.getElementById(“distance”).innerHTML =  “Miles: “+(d/1609.344).toFixed(2);
return;
}
var p = poly.GetPointAtDistance(d);
if (k++>=180/step)
{
map.panTo(p);
k=0;
}
marker.setPoint(p);
document.getElementById(“distance”).innerHTML =  “Miles: “+(d/1609.344).toFixed(2)+speed;
if (stepnum+1 < dirn.getRoute(0).getNumSteps())
{
if (dirn.getRoute(0).getStep(stepnum).getPolylineIndex() < poly.GetIndexAtDistance(d))
{
stepnum++;
var steptext = dirn.getRoute(0).getStep(stepnum).getDescriptionHtml();
document.getElementById(“step”).innerHTML = “<b>Next:<\/b> “+steptext;
var stepdist = dirn.getRoute(0).getStep(stepnum-1).getDistance().meters;
var steptime = dirn.getRoute(0).getStep(stepnum-1).getDuration().seconds;
var stepspeed = ((stepdist/steptime) * 2.24).toFixed(0);
step = stepspeed/2.5;
speed = “<br>Current speed: ” + stepspeed +” mph”;
}
}
else
{
if (dirn.getRoute(0).getStep(stepnum).getPolylineIndex() < poly.GetIndexAtDistance(d))
{
document.getElementById(“step”).innerHTML = “<b>Next: Arrive at your destination<\/b>”;
}
}
setTimeout(“animate(“+(d+step)+”)”, tick);
}

GEvent.addListener(dirn,”load”, function()
{
document.getElementById(“controls”).style.display=”none”;
poly=dirn.getPolyline();
eol=poly.Distance();
map.setCenter(poly.getVertex(0),17);
map.addOverlay(new GMarker(poly.getVertex(0),G_START_ICON));
map.addOverlay(new GMarker(poly.getVertex(poly.getVertexCount()-1),G_END_ICON));
marker = new GMarker(poly.getVertex(0),{icon:car});
map.addOverlay(marker);
var steptext = dirn.getRoute(0).getStep(stepnum).getDescriptionHtml();
document.getElementById(“step”).innerHTML = steptext;
setTimeout(“animate(0)”,2000);  // Allow time for the initial map display
});

GEvent.addListener(dirn,”error”, function()
{
alert(“Location(s) not recognised. Code: “+dirn.getStatus().code);
});

function start()
{
var startpoint = document.getElementById(“startpoint”).value;
var endpoint = document.getElementById(“endpoint”).value;
dirn.loadFromWaypoints([startpoint,endpoint],{getPolyline:true,getSteps:true});
}

}
</script>
</body>
</html>

Follow

Get every new post delivered to your Inbox.