[OpenLayers-Users] Using OpenLayers to Map Realtime Data

Tyler Mitchell tylermitchell at shaw.ca
Sun May 28 09:46:29 CDT 2006


Christopher,
Very cool and encouraging.  Thanks for sharing.

Tyler

----- Original Message -----
From: Christopher Schmidt <crschmidt at crschmidt.net>
Date: Saturday, May 27, 2006 1:48 pm
Subject: [OpenLayers-Users] Using OpenLayers to Map Realtime Data

> Earlier today, I had the 'joy' of taking a plane trip from Boston to
> Chicago. However, despite the cramped seat, I was able to use the time
> to make a pretty neat demo of OpenLayers capabilities that I might not
> otherwise have been able to.
> 
> While flying, I set my bluetooth GPS (A Royaltek RBT-3000 -- I highly
> recommend this GPS, as it alwyas seems to get much better 
> reception than
> my Etrex Legend) in the window of the plane. I connected to it and
> redirected the raw NMEA data to a file on the local machine.
> 
> I then created a cgi script which would return the decimal 
> latitude and
> longitude of my current location. This was actually a combination 
> of two
> scripts: I was doing this for speed, not cleanliness. 
> 
> The cgi script was simple:
> #!/bin/sh
> echo -e "Content-Type: text/plain\r\n\r\n"
> python /Users/crschmidt/flying/lat2dec.py `tail -n 50 \
>  /Users/crschmidt/flying.txt | grep "GPGGA" | tail -n 1`
> 
> "Find the last GPGGA sentence in the tracklog, and send it into
> lat2dec.py" (not really appropriately named, as you'll see in a 
> second).The python script was designed to convert from a GPGGA 
> sentence to a
> decimal lat/lon: the code is attached.
> 
> Once I had that, I opened up my local OpenLayers instance: this
> OpenLayers is specifically designed for times when I don't have 
> internetaccess, so instead of talking to the octo.metacarta.com 
> WMS server, it
> talks to localhost, and the WMS serves up a couple layers:
> 
> http://nationalatlas.gov/mld/road00l.html -- North American Roads
> http://nationalatlas.gov/mld/bound0m.html -- Political Boundaries
> http://mappinghacks.com/data/ -- World borders
> 
> (There may be some overlap in the second two.)
> 
> So, the next step was to add the ability to add markers based on my
> current location. The code that did this is here:
> 
> function addMarker() {
>  var handler = XMLrequest();
>  handler.onreadystatechange=function() {
>    if (handler.readyState == 4 && handler.status == 200)
>      var lonlat = handler.responseText;
>      lonlat = lonlat.split(',');
>      if (lonlat[1]) {
>        var loc = new OpenLayers.LonLat(lonlat[0],lonlat[1]);
>        markers.addMarker(new OpenLayers.Marker(loc, icon));
>      }
>    }
>  }
>  handler.open("GET", "/cgi-bin/loc.cgi", true);
>  handler.send('');
>  setTimeout(addMarker, '1000');
> }
> 
> 'markers' in this case is a OpenLayers.Layer.Markers layer, and 
> icon is
> an OpenLayers.icon object.
> 
> After this, all I had to do was add a single call to addMarker() 
> at the
> end of the main init() in the example OpenLayers file, and I had a 
> livedisplay of my current location on a map, moving at 450 mph.
> 
> The coolest thing about this? Even if I *had* had internet, this 
> kind of
> activity is forbidden by the ToS of the Google-Yahoo-Microsoft. 
> This is
> a hack that you would not be able to do in the current mapping APIs.
> 
> Say what you will, but this kind of thing is the reason that I 
> want to
> have OpenLayers take over the world: I want to be able to do what 
> I want
> with my data, and get cool things out of it, withotu worrying that 
> somecorporation will shut me down to protect their data license. I 
> don'tneed street level data for this task: free data that I can 
> set up on my
> own covers it, and provides a really nifty visual effect, without any
> cost, and without worrying about licensing concerns.
> 
> 
> If there's more details wanted, or help setting up something similar,
> feel free to ask/reply and I can go into more detail.
> 
> -- 
> Christopher Schmidt
> Web Developer
> 


More information about the Users mailing list