Presentation is loading. Please wait.

Presentation is loading. Please wait.

GIS Tool in Drupal PNW Drupal Summit - Seattle October 20th, 2012 Mack Hardy & Tom

Similar presentations


Presentation on theme: "GIS Tool in Drupal PNW Drupal Summit - Seattle October 20th, 2012 Mack Hardy & Tom"— Presentation transcript:

1 GIS Tool in Drupal PNW Drupal Summit - Seattle October 20th, 2012 Mack Hardy & Tom Nightingale @AffinityBridge

2 History of Maps with Drupal Tools

3 Location Module, proximity and filter

4

5

6 Storage and Import

7 Storage - GeoField Where do we store data in drupal? A common field format for geodata WKT Lat Lon Bounding

8

9 Spatial Import How do we import data from external sources? Shapefiles KML files Uses GeoPHP and ogr2ogr Spatial module -> Saves as WKT -> Geofield http://drupal.org/project/spatial

10 ogr2ogr Wrapper module for the GDAL ogr2ogr library - Spatial module calls ogr2ogr - Converts data from source formats to WKT http://drupal.org/project/ogr2ogr

11 Query

12 Sync_PostGIS Module Allows drupal to query PostGIS as a spatial query service, much in the way SOLR is used for search Syncs data from Drupal entities with geofields to PostGIS Provides query methods for testing intersection, within, buffer conditions http://drupal.org/project/sync_postgis

13 Sync_PostGIS Module

14 What does sync_postgis tell us? Intersections with other data points Within a buffer of 5km

15 Testing for Intersection function geoquery_intersects($item1, $item2) { $params = array($item1, $item2); foreach ($params as &$param) { if (is_scalar($param)) { $param = array('entity_type' => 'node', 'eid' => $param); } if ($connection = sync_postgis_get_postgis_connection()) { $geo_query = new syncPgQuery($connection); return $geo_query->booleanRelQuery('intersects', $params[0], $params[1])->execute(); }

16 Testing for Buffer Distance function geoquery_dwithin($item1, $item2, $distance = 0, $srid = 4326) { $params = array($item1, $item2); foreach ($params as &$param) { if (is_scalar($param)) { $param = array('entity_type' => 'node', 'eid' => $param); } if ($connection = sync_postgis_get_postgis_connection()) { $geo_query = new syncPgQuery($connection, $srid); return $geo_query->booleanRelQuery('dwithin', $params[0], $params[1], $distance)->execute(); }

17 Displaying the results With the results from the PostGIS backend, we can show the user useful information In this case they know that - target is in the protected area - target intersects 2 traplines - target is within a 5 km buffer of 4 other nodes of interest

18 Scaling

19 Beyond Vector Based Maps We want to show huge datasets, the vector model requires "painting" the data onto the map, which is computationally expensive Pre-rendering the dataset onto a tile, means the client can load the data quickly, and tiles are easy to cache Obvious downside of caching, is that it doesn't work well with frequently changing data Tilemill has been great for creating base tiles, but regenerating the entire tileset when the data changes is hard and time consuming

20 Comparing Vector vs MB Tiles Vector - 2.30 MB of transfer - Client side render Tiles - 529 kB of transfer - Server side render

21 Tilestache Python application for serving tiles tilestache takes inputs of : --- mbtiles which are pre-generated --- mapnik configuration (to generate tiles on the fly) --- vector (geojson, arcjson) --- combinations of these inputs as composite We are generating using mapnik with PostGIS as a datasource - provides a caching layer for serving tiles

22 Composite maps from PostGIS Data base map satellite images tilestache provides the data layers from PostGIS via mapnik leaflet map definition points to layers in the layer switcher Image credit http://mike.teczno.com/notes/tilestache.html

23 WAX interactivity parcel data with tiles in JSON on mouseover and on click behaviours need to pre-cache WAX styling

24 WAX interactivity

25 Demo

26 WAX interactivity How UTF8 grid works http://mapbox.com/demo/visiblemap/

27 Random Tools

28 Leaflet Draw

29 Leaflet Paste

30 Search API Next we want to be able to return data items from SOLR to a map Search on non-geographic facets - just like a view Search on geographic facets - facet controls pull data from PostGIS, or use SOLRs spatial extensions http://drupal.org/project/search_api_location

31 Discussion mack@affinitybridge.com http://affinitybridge.com


Download ppt "GIS Tool in Drupal PNW Drupal Summit - Seattle October 20th, 2012 Mack Hardy & Tom"

Similar presentations


Ads by Google