Tuesday, January 15, 2013

What's new with JavaScript and geospatial - wrapup from the js.geo event

The past couple of days I've been at the js.geo event in Denver, which was a small informal conference focused on JavaScript and geospatial, organized by Chris Helm, Steve Citron-Pousty and Brian Timoney. I've been head down on customer projects and product development the past few months, so it was great to get out and see what's going on in the broader world. As usual with this type of event I was blown away by how much cool new stuff people are doing - it's definitely a tough job to keep up with everything that's going on these days! The attendees included a great cross-section of people involved with the major geospatial JavaScript projects. I've said this before, but increasingly I find that informal "unconference" style events, which are either free or very cheap (this one had a registration fee of $11.54!) provide an experience that is just as good as, if not better than, the larger, more expensive and more organized conferences.

My brain is overflowing at the end of the two days, and I have lots of things I want to look into more. This post is mainly a list of items I found interesting with some links. Apologies in advance to anyone / anything I missed out! Without further ado ...

D3

D3 is a very cool general purpose JavaScript interactive visualization library, developed by Mike Bostock, that includes some good (mainly vector) geospatial capabilities. This was probably the hottest topic at the conference, lots of people talking about it and incorporating it into demos. Here's a blog post from CartoDB with some examples. D3 supports a new format called TopoJSON, which is similar to geoJSON, but supports topology to eliminate redundancy. For polygon data this can reduce data volumes by around 80% (compared to regular geoJSON). It also lends itself to robust simplification of polygons


Leaflet

Several presentations, including this one by Aaron Ogle, confirmed the impression I had that the Leaflet JavaScript mapping API has great momentum. Matt Priour in his presentation on OpenLayers acknowledged as much with his pitch that OpenLayers was "almost as convenient as Leaflet and twice as powerful". One of the key selling points of Leaflet is its simplicity. Matt said that in discussions about OpenLayers 3 there were proponents of just moving to adopt Leaflet instead of doing a major redevelopment of OpenLayers, but it was decided for various reasons that OpenLayers 3 was needed - you can see further discussion on its aims here. It's important to be aware that OpenLayers 3 will not be compatible with OpenLayers 2, it's going to be a fresh start. We are looking seriously at using Leaflet for a future version of our Ubisense myWorld application.


CartoDB

I continue to be very impressed with CartoDB. They first launched the product at FOSS4G in Denver in 2011, and released Version 2 in November 2012, with lots of cool new features. These include a new system called Torque which does beautiful spatio-temporal visualizations, and new density maps using either hexagons or squares. I definitely plan to work on including CartoDB in the solutions that we're offering. Check out Andrew Hill's presentation.


Mapstraction

Andrew Turner gave a lightning talk about Mapstraction, a library that provides an abstraction layer for the major mapping APIs. Last time I looked at this I had the impression it wasn't being very actively developed, but it seems I was misinformed! This is something I want to investigate further too. There's a nice sandbox demo site here.

MapBox 

The folks at MapBox also continue to do a whole range of interesting things, from their TileMill map rendering product to a range of map sharing tools at Mapbox.com to their iPad application. A little while ago I did a simple demo with some utility data using various bits of MapBox infrastructure, borrowing heavily from this example (you'll probably need a browser other than Internet Explorer for these to work). As well as giving a workshop, Will White talked about their server side architecture which uses node.js (JavaScript on the server).

Ubisense myWorld

I did a short presentation and demo on what we're up to with Ubisense myWorld, building web applications for utilities and telecoms using Google Maps and various open source products. I'll do a longer post soon on what we've been up to recently, but we got some good interest in what we've done with Google Street View, including the overlay of linear objects like gas pipes, and also in work we did to help a customer with recovery efforts after Hurricane Sandy. Thanks to Steve Citron-Pousty for his summary:



WebGL

Brendan Kenny from Google gave an interesting talk on WebGL, which brings high performance 3D (and 2D) graphics to (most) web browsers (no prizes for guessing which one is the main exception!). He did a really impressive demo that involved displaying very large numbers of points in the browser with dynamic charts based on the current map window and dynamic filtering tools.

Miscellaneous other links

In no particular order ...

npm is "Node Packaged Modules" which was highly recommended by Will White for managing either server side or client side JavaScript Code.

openweathermap.org is a cool resource for free and open weather data.

Backbone.js and Marionette.js, which builds on top of Backbone, were highly recommended by Dave Bouwman as frameworks for building complex JavaScript applications. I definitely plan to look more at these for what we're doing. Ember.js was also mentioned as an alternative.

Max Ogden's geoJSON utilities got several mentions, a lightweight JavaScript library that supports some core spatial operations like point in polygon, distance and more on geoJSON data.

The Google Visualization API looks like a nice library for visualizing data tables and charts.

PhantomJS is a headless webkit browser that is useful for various things including browser screen capture and testing. This blog post talks about using it to implement a web map printing tool. Alfred Sawatzky talked about how he used this to capture periodic screen shots of his company iFactor's outage maps during the Hurricane Sandy recovery.

Rickshaw.js is a JavaScript toolkit for creating interactive time series graphs.

The ESRI CityEngine Web Viewer is a cool application for viewing 3D city models in a browser without any plugins. You can see various examples here, press the play button at the bottom left for an automated tour of a model. This one in Philadelphia is impressive.

Simtable are doing interesting things with projecting animated data onto 3D models.

MongoDB is a scalable open source NoSQL database that provides geospatial support - up until now just for points, but about to have support for any geoJSON geometry and operations like point in polygon etc. Steve Citron-Pousty ran a workshop on this which I would have liked to have gone to, but I went to the MapBox / CartoDB one instead.

So, lots of things to research and absorb!!

Update: Tyler Burgett also shared some excellent detailed notes, and Steve C-P has posted a good summary too.