Greenhouse Gas Emissions Hexagbin Heatmap from MapBox to CartoDB

Version Française

In my last post (Données ouvertes et les émissions de Gaz à effet de serre au Canada) I explained how I convert a CSV data file (from opendata.gc.ca) on greenhouse gases emissions in Canada to build a map. So I produced a tiled map of this project with TileMill deployed on my own server with Wax API.  You can try it now !

I tried to show two things 1) the density of facilities producing those emissions 2) the distribution of GHG emissions in Canada. of course I could used a "Heatmap" to show the density of those value.  But, I tried to produce this density map using a hexagonal grid.

The idea of ​​presenting the amount of GHGs produced in Canada in a points clustered grid came wit this example (Point Clustering) made ​​by the CartoDB developers. More recently, @elcep also proposed a similar approach in his blog. This concept was perfect to illustrate the distribution of greenhouse gases in a 300km x 300km virtual grid.  I builded my layer with this SQL in PostGIS:

SELECT max(install_ges_p.gid) AS gid, sum(install_ges_p.emis_ges) AS gazemis,     st_snaptogrid(install_ges_p.the_geom, 0::double precision, 0::double precision, 300000::double precision, 300000::double precision) AS the_geom_gr FROM install_ges_p GROUP BY st_snaptogrid(install_ges_p.the_geom, 0::double precision, 0::double precision, 300000::double precision, 300000::double precision); I loaded the data from my local "PostgreSQL / PostGIS" into my CartoDB account.  This tool is cool because it's faster to deploy and doesn't require a tiled map production as everything is dynamic.  All we must do is load the table and carto style into your CartoDB account.
@opac_grid:0.1;
@color_gris: #4F1891;
@opac_marker:0.3;
#gridemisgestot[gazemi_nb>0][zoom>=3]{
 marker-fill:@color_gris;
 marker-opacity:@opac_grid;
 marker-line-color:@color_gris;
 marker-line-opacity:@opac_marker;
 marker-allow-overlap:true;
 text-name:"[gazemis]";
 text-face-name:"DejaVu Sans Book";
 text-allow-overlap:true;
 text-halo-radius:1.5;
 text-halo-fill:rgba(255,255,255,0.50);
 text-placement:point;
 [zoom=3]{marker-width:7.5;text-size:4;}
 [zoom=4]{marker-width:15;text-size:9;}
 [zoom=5]{marker-width:30;text-size:18;}
 [zoom=6]{marker-width:60;text-size:36;}
 [zoom=7]{marker-width:120;text-size:36;}
}
Then you can 1) use this API

2) or use the small 'embed_map' provided by CartoDB layer by layer.

https://smercier.cartodb.com/tables/hex_gazemis_cnt/embed_map?sql=SELECT * FROM hex_gazemis_cnt' width='100%' height='480'

Mon premier test avec CartoDB

Dernièrement la firme Vizzuality de Madrid (maintenant aussi a New York) lance son programme CartoDB Beta pour donner un accès à PostGIS dans la Cloud via un API.  J'ai assisté à la présentation du produit au FOSS4G de Denver et je m'étais promis de l'essayer à sa sortie.   Justement hier soir suite aux élections en Espagne un des fondateurs de la firme (@saleiva) à fait ce petit démo avec cartodb pour visualiser les résultats 

Le produit est interessant et pourra aider très rapidement les développeurs désirant avec accès à des données géographiques via Postgresql / PostGIS.  En gros c'est un API genre Google fusion table  qui permet d'interagir avec une BD (select, insert, update, delete)  géo directement via un URL.  C'est assez bien fait à mon avis, et permettra d'éviter l'utilisation des services OGC plus lourd à implanter et supporter pour certaines catégories d'applications Web.

 

On a un problème de sécurité (SQL Injection) vous allez dire? Et oui c'est possible si vous ne protéger pas votre table de données.  Un billet d'un collègue Bills Dollins du Maryland a soulevé ce point le mois dernier et un développeur de CartoDB a répondu :

" ... the security model around CartoDB is based on public/private tables. When you make a table public what you are essentially doing is giving read permissions to a “public” user. That means that anybody can fire requests to your table, but they will hit PostgreSQL security if they try to modify something. So yeah, SQL injection as you want, as soon as you try to write, it will fail. You can actually try manually by taking the URL bill is calling on the example and run it directly."

C'est donc la responsabilité du programmeur d'inclure une sécurité via authentification "OAuth" pour protéger la table de données s'il le désire. Reste que l'API offre de belles options on peut par exemple visualiser rapidement les données d'une table via un petite app "embed_map"
On pourra aussi ajuster l'affichage des données on modifiant la thématique complexe via CartoCSS ou plus simplement via un contrôle manuel:
On aurra aussi quelques options pour configurer le fond de carte par défaut de votre API.  Pour l'instant on doit utiliser Google Maps mais j'imagine qu'on pourra éventuellement faire pointer la table sur le dépôt d'une carte tuilée:
Je n'ai pas fait une petite application pour tester l'API, mais j'ai fait quelques essais avec des requêtes.  Comme par exemple, un SQL "st_intersects" avec un Linestring en WKT.  Cette requête SQL retourne un segment dans le secteur du Vieux-Québec directement dans la carte configurée de mon compte:
Pour les amateurs de Geojson je dirais ceci:

Le potentiel est bon et on peut tester le service avec un maximum de 100 MB pour l'instant.  On peut imaginer qu'on aura un plan payable au mois, pour acheter plus d'espace ... On ne peut pas télécharger CartoDB et l'installer sur votre serveur.  À moins que le projet ne devienne Open Source mais rien ne transpire pour l'instant.  On peut télécharcher le projet sur Github (Merci a Alan Boudreault - mapgears.com).  En passant, le site pour charger et gérer les tables PostGIS est vraiment bien fait et est monté en Ruby on rails.

Un essai sérieux avec TileMill

Le 16 février 2011 la firme de developmentseed (Washington, DC) très impliqué dans les projets développement international, a lancé TileMill un nouveau produit de conception de cartes interactives pour le Web.  Je classerais cette boîte très branchée dans la même lignée que la firme de design Web Stamen (San Francisco) avec son API Polymap .  Ces deux firmes sont très actives actuellement dans le développement de projets Open source en Web GIS.

Il est vrai qu'il s'agit d'une solution toute jeune qui devra faire ses preuves, mais à mon avis, elle révolutionne un peu nos façons de faire en Web mapping. Cette plate-forme s’adresse une nouvelle clientèle du Web mapping, celle des codeurs et designers Web puisqu'elle utilise un scripting de carte(Carto) basé sur les CSS ( Map CSS, juillet 2009, GeoServer et son module CSSGSS de Cartogen ).   Pour l'instant, peu de formats de données sources sont supportés (shapefiles, Postgis, SQLite) par contre depuis la version 0.4, on a accès à tous les systèmes de références EPSG.

L'outil TileMill permet donc à des habitués des CSS de construire une carte très rapidement, de la 'tuiler' dans un fichier SQLite( MBTiles)et de la diffuser avec TileStream Server et l'API Wax tool.

J’ai donc installé et testé TileMill et TileStream Server ( plate-forme node.js). Je dois avouer que beaucoup de plaisir à construire mes premières cartes.

Pour ceux qui seront du FOSS4g 2011 à Denver, il y aura un Workshop sur le sujet donné entre autre par @springmeyer.  J'y serai sans faute!

Projet à suivre...

SharpMap 0.9

SharpMap is an easy-to-use mapping library for use in web and desktop applications. It provides access to many types of GIS data, enables spatial querying of that data, and renders beautiful maps. The engine is written in C# and based on the .Net 2.0 framework. SharpMap is released under GNU Lesser General Public License. A new release of SharpeMap was shipped Oct 22, 2009

GeoDjango the GIS branch Python framework Django

GeoDjango the GIS branch of Djengo "intends to be a world-class geographic web framework. Our goal is to make it as easy as possible to build GIS web applications and harness the power of spatially enabled data." This API can be use between Data (PostGIS, MySQL, Oracle,  or with  API GDAL, GEOS and PROJ.4) and interface like OpenLayers or Google Maps. In this pdf presentation, we can read that
  • Django is a high-level Python framework that encourages rapid development and clean, pragmatic design.  Django is use by many organisation such as Google, Nasa, Washington post, Apple, IBM and much more...
  • Goal of GeoDjango is to make it as easy as possible to build GIS web applications and harness the power of spatially enabled data.
Here's some example of web site using GeoDjango: http://www.everyblock.com/ http://prototype.nytimes.com/represent/ http://projects.latimes.com/mapping-la/neighborhoods/ http://marinemap.org/