Beyond Googlemaps - Andrew Turner

8,182
-1

Published on

Slides from Andrew Turner's presentation "Beyond Googlemaps" at the Future of Web Apps Expo 2008

Published in: Technology, News & Politics
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
8,182
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
159
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

Beyond Googlemaps - Andrew Turner

  1. 1. Beyond GoogleMaps Andrew Turner, Mapufacture & FortiusOne
  2. 2. or...
  3. 3. or... Evolved Maps, desconstructed
  4. 4. A Brief History of Mapping * *IANAH
  5. 5. StoryMapping
  6. 6. Emphemeral Maps http://maps.google.com
  7. 7. Meaning
  8. 8. Meaning
  9. 9. Navigation
  10. 10. Compass
  11. 11. 1492 - Columbus sails the ocean blue
  12. 12. Cartographic Renaissance
  13. 13. So geographers, in Afric maps, With savage pictures fill their gaps, And o’er unhabitable downs Place elephants for want of towns. - Jonathan Swift
  14. 14. Ortelius Atlas
  15. 15. Exploration
  16. 16. Travel Guides
  17. 17. Driving Guides
  18. 18. GIS
  19. 19. Internet Maps
  20. 20. 2005 - Google slips the map
  21. 21. urban renewal participatory web 2005 - Google slips the map mobile computing GPS becomes ubiquitous
  22. 22. HousingMaps http://housingmaps.com
  23. 23. Slippy Maps & Spinny Globes
  24. 24. GoogleMaps http://maps.google.com
  25. 25. Interactivity http://maps.google.com
  26. 26. Design
  27. 27. Usability
  28. 28. http://maps.google.com/maps?f=q&hl=en&geocode=&q=Cape+Town&ie=UTF8&ll=-33.938803,18.486214&spn=0.182293,0.331306&z=12 Data Coverage and Quality
  29. 29. http://maps.google.com/maps?f=q&hl=en&geocode=&q=Cape+Town&ie=UTF8&ll=-33.938803,18.486214&spn=0.182293,0.331306&z=12 Data Coverage and Quality http://openstreetmap.org/?lat=-33.9377&lon=18.4745&zoom=12&layers=B000FTF
  30. 30. Brighton, UK
  31. 31. Brighton, UK
  32. 32. Data Ownership and Access
  33. 33. Data Ownership and Access
  34. 34. Technology Limitations
  35. 35. Technology Limitations
  36. 36. Where Next? http://flickr.com/photos/loupiote/25426957
  37. 37. Storage
  38. 38. id name rating lat lon 10045 Vibe Bar 4.3 52.81 0.295 10046 Half Moon 3.8 53.432 0.312 Pub 10047 Windmill 2.6 50.982 0.256 10048 Marquess 1.7 51.023 1.24 oAnglesey Grange 10049 4.5 52.110 0.4562 Pub Coopers 10050 3.5 50.862 0.821 Arms Old 10051 3.2 52.591 0.312 Queens Oxo 10052 1.3 51.93 -0.351 Head Tower 10053 Riverside 3.9 52.18 0.62
  39. 39. id name rating lat lon 10045 Vibe Bar 4.3 52.81 0.295 10046 Half Moon 3.8 53.432 0.312 Pub 10047 Windmill 2.6 50.982 0.256 10048 Marquess 1.7 51.023 1.24 oAnglesey Grange 10049 4.5 52.110 0.4562 Pub Coopers 10050 3.5 50.862 0.821 Arms Old 10051 3.2 52.591 0.312 Queens Oxo 10052 1.3 51.93 -0.351 Head Tower 10053 Riverside 3.9 52.18 0.62
  40. 40. SELECT name,latitude,longitude, acos(SIN( PI()* 40.7383040 /180 )*SIN( PI()*latitude/180 ) )+(cos(PI()* 40.7383040 /180)*COS( PI()*latitude/180) *COS(PI()*longitude/180-PI()* -73.99319 /180) )* 3963.191 AS distance FROM allcountries WHERE 3963.191 * ACOS( (SIN(PI()* 40.7383040 /180)*SIN(PI() * latitude/180)) + (COS(PI()* 40.7383040 /180)*cos(PI()*latitude/180)*COS(PI() * longitude/180-PI()* -73.99319 /180)) ) < = 1.5 ORDER BY 3963.191 * ACOS( (SIN(PI()* 40.7383040 /180)*SIN(PI()*latitude/180)) + (COS(PI()* 40.7383040 /180)*cos(PI()*latitude/180)*COS(PI() * longitude/180-PI()* -73.99319 /180)) )
  41. 41. SELECT the_geom FROM geom_table WHERE ST_Distance(the_geom, GeomFromText('POINT(0.02839 51.50807)', -1)) < 100
  42. 42. SELECT the_geom FROM geom_table WHERE the_geom && 'BOX3D(0.02 51,0.03 52)'::box3d AND ST_Distance(the_geom, GeomFromText('POINT(0.02839 51.50807)', -1)) < 100
  43. 43. SpatiaLite SQLite + Spatial Types http://www.gaia-gis.it/spatialite/
  44. 44. GeoHash http://geohash.org/
  45. 45. GeoHash http://geohash.org/
  46. 46. GeoHash SELECT name FROM pubs WHERE geohash LIKE quot;GCPUV%quot; http://geohash.org/
  47. 47. GeoHash SELECT name FROM pubs WHERE geohash LIKE quot;GCPUVR%quot; OR geohash LIKE quot;GCPVJ2%quot; http://geohash.org/
  48. 48. Data
  49. 49. GeoNames http://geonames.org
  50. 50. GeoNames http://geonames.org
  51. 51. Implicit GeoData http://geocodr.net
  52. 52. Implicit GeoData http://geocodr.net
  53. 53. OpenStreetMap http://openstreetmap.org
  54. 54. OpenStreetMap London http://openstreetmap.org
  55. 55. Wiki for the World
  56. 56. Flickr OSM http://www.flickr.com/map? &fLat=39.9227&fLon=116.4694&zl=6
  57. 57. OpenAerialMap http://openaerialmap.org
  58. 58. GeoCommons Finder! http://geocommons.com
  59. 59. GeoCommons Finder! http://finder.geocommons.com
  60. 60. Mapufacture http://mapufacture.com
  61. 61. Sharing
  62. 62. GeoRSS
  63. 63. GeoRSS
  64. 64. GeoRSS +
  65. 65. GeoRSS <georss:point> + 45.256 -71.92 </georss:point>
  66. 66. GeoRSS <georss:point> + 45.256 -71.92 </georss:point>
  67. 67. GeoRSS <georss:point> + 45.256 -71.92 </georss:point>
  68. 68. RSS / Atom <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <feed xml:lang=quot;en-USquot; xmlns:dc=quot;http://purl.org/dc/elements/1.1/quot; xml:base=quot;http://grwifi.net/feedquot; xmlns=quot;http://www.w3.org/2005/Atomquot;> <title>Grand Rapids WiFi: News, Updated Hotspot Locations, and Comments</title> <id>http://grwifi.net/atom/locations</id> <link href=quot;http://grwifi.net/feedquot; rel=quot;selfquot; type=quot;application/atom+xmlquot;/> <rights>Creative Commons Attribution-NonCommercial-ShareAlike 2.0 http://creativecommons.org/licenses/by-nc-sa/2.0/ </rights> <updated>2007-03-28T17:31:33+00:00</updated> <entry> <id>http://grwifi.net/location/view/skelletones#comment3862</id> <title>Grand Rapids WiFi: Comment on The Euclid</title> <link href=quot;http://grwifi.net/location/view/skelletones#comment3862quot; rel=quot;alternatequot; type=quot;text/htmlquot;/> <category term=quot;The Euclidquot;/> <author><name>mari</name></author> <content type=quot;xhtmlquot;><p>i know a local band in kalamazoo called rising vacancy. i was wondering how …/p></content> <published>2007-03-28T17:31:33+00:00</published> </entry> <entry> <id>http://grwifi.net/location/view/bk-east-paris#comment3855</id> <title>Grand Rapids WiFi: Comment on Burger King - East Paris</title> <link href=quot;http://grwifi.net/location/view/bk-east-paris#comment3855quot; rel=quot;alternatequot; type=quot;text/htmlquot;/> <category term=quot;Burger King - East Parisquot;/> <author><name>Brandino</name></author> <content type=quot;xhtmlquot;><p>I love burger king </p></content> <published>2007-03-21T16:38:19+00:00</published> </entry> <entry> <id>http://grwifi.net/location/view/common-ground#comment3843</id> <title>Grand Rapids WiFi: Comment on Common Ground Coffee Shop</title> <link href=quot;http://grwifi.net/location/view/common-ground#comment3843quot; rel=quot;alternatequot; type=quot;text/htmlquot;/> <category term=quot;Common Ground Coffee Shopquot;/> <author> <name>Rex Cowan</name> </author> <content type=quot;xhtmlquot;> <div xmlns=quot;http://www.w3.org/1999/xhtmlquot;><p>Common Ground is a welcoming place with a warm atmosphere, the clerk I talked to had …</p></ content> <published>2007-03-17T01:45:59+00:00</published> </entry> </feed>
  69. 69. GeoRSS <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <feed xml:lang=quot;en-USquot; xmlns:dc=quot;http://purl.org/dc/elements/1.1/quot; xml:base=quot;http://grwifi.net/feedquot; xmlns:georss=quot;http://www.georss.org/georssquot; xmlns=quot;http:// www.w3.org/2005/Atomquot;> <title>Grand Rapids WiFi: News, Updated Hotspot Locations, and Comments</title> <id>http://grwifi.net/atom/locations</id> <link href=quot;http://grwifi.net/feedquot; rel=quot;selfquot; type=quot;application/atom+xmlquot;/> <rights>Creative Commons Attribution-NonCommercial-ShareAlike 2.0 http://creativecommons.org/licenses/by-nc-sa/2.0/ </rights> <updated>2007-03-28T17:31:33+00:00</updated> <entry> <id>http://grwifi.net/location/view/skelletones#comment3862</id> <title>Grand Rapids WiFi: Comment on The Euclid</title> <link href=quot;http://grwifi.net/location/view/skelletones#comment3862quot; rel=quot;alternatequot; type=quot;text/htmlquot;/> <category term=quot;The Euclidquot;/> <author><name>mari</name></author> <georss:point>42.960126 -85.667997</georss:point> <content type=quot;xhtmlquot;><p>i know a local band in kalamazoo called rising vacancy. i was wondering how …/p></content> <published>2007-03-28T17:31:33+00:00</published> </entry> <entry> <id>http://grwifi.net/location/view/bk-east-paris#comment3855</id> <title>Grand Rapids WiFi: Comment on Burger King - East Paris</title> <link href=quot;http://grwifi.net/location/view/bk-east-paris#comment3855quot; rel=quot;alternatequot; type=quot;text/htmlquot;/> <category term=quot;Burger King - East Parisquot;/> <author><name>Brandino</name></author> <georss:point>42.911495 -85.568665</georss:point> <content type=quot;xhtmlquot;><p>I love burger king </p></content> <published>2007-03-21T16:38:19+00:00</published> </entry> <entry> <id>http://grwifi.net/location/view/common-ground#comment3843</id> <title>Grand Rapids WiFi: Comment on Common Ground Coffee Shop</title> <link href=quot;http://grwifi.net/location/view/common-ground#comment3843quot; rel=quot;alternatequot; type=quot;text/htmlquot;/> <category term=quot;Common Ground Coffee Shopquot;/> <author> <name>Rex Cowan</name> </author> <georss:point>42.962927 -85.637179</georss:point> <content type=quot;xhtmlquot;> <div xmlns=quot;http://www.w3.org/1999/xhtmlquot;><p>Common Ground is a welcoming place with a warm atmosphere, the clerk I talked to had …</p></content> <published>2007-03-17T01:45:59+00:00</published> </entry> </feed>
  70. 70. GeoNames GeoRSS http://www.geonames.org/rss-to-georss-converter.html
  71. 71. KML <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <kml xmlns=quot;http://earth.google.com/kml/2.2quot;> <Placemark> <name>Simple placemark</name> <description>Attached to the ground. Intelligently places itself at the height of the underlying terrain.</description> <Point> <coordinates>-122.0822035425683,37.42228990140251,0</coordinates> </Point> </Placemark> </kml>
  72. 72. KML Extended Data <ExtendedData id=quot;roomsquot;> <name>Rooms</name> <value>3</value> </ExtendedData>
  73. 73. KML Network Links </NetworkLink> <NetworkLink> <name><![CDATA[Pubs in London]]></name> <Link> <href>http://maker.geocommons.com/maps/839/overlays/1</href> </Link> </NetworkLink>
  74. 74. GeoJSON { quot;typequot;: quot;Pointquot;, quot;coordinatesquot;: [100.0, 0.0] }
  75. 75. GeoJSON { quot;blogquot;: { quot;postsquot;: [ { quot;typequot;: quot;atom:itemquot;, quot;atom:summaryquot;: quot;post 1quot;, quot;atom:descriptionquot;: quot;i love bloggingquot; }, { quot;typequot;: quot;atom:itemquot;, quot;atom:summaryquot;: quot;post 2 from CAquot;, quot;atom:descriptionquot;: quot;geoblogging in Californiaquot; quot;geometryquot;: { quot;typequot;, quot;Pointquot;, quot;coordinatesquot;: [-120, 40] } }, ], quot;geometryquot;: { quot;typequot;: quot;Polygonquot;, quot;coordinatesquot;: [[[-121, 39], [-119, 39], [-119, 41], [-121, 41], [-121, 39]]] } } }
  76. 76. GeoWeb
  77. 77. Resources • /places • /places/89 • /places/89.atom • /places/89.kml
  78. 78. Web Aligned http://highearthorbit.com/a-proposal-georss-kml
  79. 79. Formats HTML : RSS
  80. 80. Formats HTML : RSS ::
  81. 81. Formats HTML : RSS :: KML : GeoRSS
  82. 82. Formats HTML : RSS :: KML : GeoRSS Visualization : Syndication
  83. 83. Visualization
  84. 84. Mapstraction
  85. 85. Mapstraction API <script src=quot;http://maps.google.com/maps?file=api&v=2&key=YOUR_KEYquot; type=quot;text/javascriptquot;> </script> <script type=quot;text/javascriptquot; src=quot;mapstraction.jsquot;></script> <div id=quot;mapstractionquot; style=quot;width: 400px; height: 400px;quot;></div> <script type=quot;text/javascriptquot;> var mapstraction = new Mapstraction('mapstraction','google'); var myPoint = new LatLonPoint(37.4041, -122.0081); mapstraction.setCenterAndZoom(myPoint, 10); mapstraction.addControls({ pan: true, zoom: 'small', map_type: true }); </script>
  86. 86. Power of the Swap var mapstraction = new Mapstraction(‘map’, ‘google’);
  87. 87. Power of the Swap mapstraction.swap(‘mapstraction’, ‘yahoo’);
  88. 88. Power of the Swap mapstraction.swap(‘mapstraction’, ‘microsoft’);
  89. 89. Power of the Swap mapstraction.swap(‘mapstraction’, ‘openstreetmap’);
  90. 90. Overlays mapstraction.addImageOverlay (quot;overquot;,file,opacity,west,south,east,north); mapstraction.addImageOverlay(quot;overquot;,quot;images/ santodomingo.pngquot;,50,-70.01544, 18.39777, -69.80567, 18.563517);
  91. 91. Filters mapstraction.removeAllFilters(); mapstraction.addFilter('category', 'eq', 10 ); mapstraction.doFilter();
  92. 92. Filters mapstraction.removeAllFilters(); mapstraction.addFilter('category', 'eq', 10 ); mapstraction.doFilter(); mapstraction.toggleFilter('category', 'eq', 10 );
  93. 93. Sliders
  94. 94. OpenLayers http://openlayers.org
  95. 95. map = new OpenLayers.Map(quot;mapquot;, { maxResolution: 360/512, projection: quot;EPSG:4326quot; , numZoomLevels: 20, minZoomLevel: 0, maxZoomLevel: 19, controls: [ new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanPanel(), new OpenLayers.Control.ZoomPanel() ] }); var wms = new OpenLayers.Layer.WMS( quot;worldquot;, quot;/cgi-bin/tilecache/tilecache.cgi?quot;, {layers: 'world'} ); map.addLayers([wms]); map.setCenter(new OpenLayers.LonLat(0, 32), 7);
  96. 96. map = new OpenLayers.Map(quot;mapquot;, { maxResolution: 360/512, projection: quot;EPSG:4326quot; , numZoomLevels: 20, minZoomLevel: 0, maxZoomLevel: 19, controls: [ new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanPanel(), new OpenLayers.Control.ZoomPanel() ] }); var wms = new OpenLayers.Layer.WMS( quot;worldquot;, quot;/cgi-bin/tilecache/tilecache.cgi?quot;, {layers: 'world'} ); map.addLayers([wms]); map.setCenter(new OpenLayers.LonLat(0, 32), 7);
  97. 97. <link rel=quot;stylesheetquot; href=quot;../themes/gray.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;gray smallmapquot;></div>
  98. 98. <link rel=quot;stylesheetquot; href=quot;../themes/gray.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;gray smallmapquot;></div> div.gray .olControlZoomPanel { top: 14px; left: 14px; } div.gray .olControlZoomPanel div { background-image: url(img/gray/gray_zoom_horiz.png); height: 18px; width: 18px; } div.gray .olControlZoomPanel .olControlZoomInItemInactive { top: 0px; left: 25px; background-position: 18px 0px; } div.gray .olControlZoomPanel .olControlZoomToMaxExtentItemInactive { top: 0px; left: 0px; background-position: 0px -18px; } div.gray .olControlZoomPanel .olControlZoomOutItemInactive { top: 0px; left: 0px; background-position: 0px 0px; }
  99. 99. <link rel=quot;stylesheetquot; href=quot;../themes/gray.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;gray smallmapquot;></div> div.gray .olControlZoomPanel { top: 14px; left: 14px; } div.gray .olControlZoomPanel div { background-image: url(img/gray/gray_zoom_horiz.png); height: 18px; width: 18px; } div.gray .olControlZoomPanel .olControlZoomInItemInactive { top: 0px; left: 25px; background-position: 18px 0px; } div.gray .olControlZoomPanel .olControlZoomToMaxExtentItemInactive { top: 0px; left: 0px; background-position: 0px -18px; } div.gray .olControlZoomPanel .olControlZoomOutItemInactive { top: 0px; left: 0px; background-position: 0px 0px; }
  100. 100. <link rel=quot;stylesheetquot; href=quot;../themes/hearts.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;hearts smallmapquot;></div>
  101. 101. <link rel=quot;stylesheetquot; href=quot;../themes/hearts.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;hearts smallmapquot;></div> .hearts .olControlZoomPanel div { background-image: url(img/hearts/hearts-zoom.png); } .hearts .olControlPanPanel div { background-image: url(img/hearts/hearts-panel.png); }
  102. 102. <link rel=quot;stylesheetquot; href=quot;../themes/hearts.cssquot; type=quot;text/cssquot; media=quot;screenquot; /> <div id=quot;mapquot; class=quot;hearts smallmapquot;></div> .hearts .olControlZoomPanel div { background-image: url(img/hearts/hearts-zoom.png); } .hearts .olControlPanPanel div { background-image: url(img/hearts/hearts-panel.png); }
  103. 103. Accessibility
  104. 104. ModestMaps
  105. 105. package { public class ModestMapsSample extends Sprite { private var map:Map; public function ModestMapsSample() { map = new TweenMap(stage.stageWidth - 2 * PADDING, stage.stageHeight - 2 * PADDING, true, new MicrosoftRoadMapProvider(), new MapExtent(37.829853, 37.700121, -122.212601, -122.514725)); map.addChild(new MapControls(map)); map.addChild(new ZoomSlider(map)); addChild(map); } } }
  106. 106. London2012 http://london2012.co.uk
  107. 107. Hurricane Tracking http://hurricanewiki.org
  108. 108. Analysis
  109. 109. WalkScore http://walkscore.com
  110. 110. MySociety House Price http://www.mysociety.org/2007/more-travel-maps/ vs. Travel Time
  111. 111. pgRouting http://pgrouting.postlbs.org/
  112. 112. Safe Routing http://www.ridethecity.com
  113. 113. Fuel Efficiency Routing
  114. 114. Bakery Routing
  115. 115. Cartography
  116. 116. NeoCartography
  117. 117. wrp.geothings.net
  118. 118. BurningManEarth http://earth.burningman.org
  119. 119. Maps for Farmers http://serveyourcountryfood.com
  120. 120. Mapnik
  121. 121. <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> <!DOCTYPE Map> <Map bgcolor=quot;#b5d0d0quot; srs=quot;+proj=latlong +datum=WGS84quot;> <Style name=quot;worldquot;> <Rule> <MaxScaleDenominator>250000000000</MaxScaleDenominator> <MinScaleDenominator>6000000</MinScaleDenominator> <PolygonSymbolizer> <CssParameter name=quot;fillquot;>#f2efe9</CssParameter> </PolygonSymbolizer> <LineSymbolizer> <CssParameter name=quot;strokequot;>#b5d0d0</CssParameter> <CssParameter name=quot;stroke-widthquot;>0.5</CssParameter> </LineSymbolizer> </Rule> </Style> <Layer name=quot;worldquot; status=quot;onquot; srs=quot;+proj=latlong +datum=WGS84quot;> <StyleName>world</StyleName> <Datasource> <Parameter name=quot;typequot;>shape</Parameter> <Parameter name=quot;filequot;>/Users/ajturner/Projects/mapnik/world_borders</Parameter> </Datasource> </Layer> </Map> Mapnik http://mapnik.com
  122. 122. OpenCycleMap http://opencyclemap.org
  123. 123. OpenCycleMap http://opencyclemap.org
  124. 124. Shenzen Maps
  125. 125. example.mml example.mss <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> * { <!DOCTYPE Map> line-width: 1; <Map bgcolor=quot;#b5d0d0quot; srs=quot;...quot;> line-color: #999; <Stylesheet> polygon-fill: #fff; Map { map-bgcolor: #ccc; } } </Stylesheet> <Stylesheet src=quot;example.mssquot;/> *[zoom>=6][zoom<12] { <Layer name=quot;worldquot; status=quot;onquot; srs=quot;...quot;> line-color: #f90; <StyleName>world</StyleName> } <Datasource> #world-borders[zoom<10] NAME <Parameter name=quot;typequot;>shape</Parameter> { <Parameter name=quot;filequot;>...</Parameter> text-fill: #333; </Datasource> } </Layer> </Map> Cascadenick http://code.google.com/p/mapnik-utils/
  126. 126. Tiles
  127. 127. Tiles
  128. 128. Tiles
  129. 129. TileCache TileCache http://tilecache.org
  130. 130. Image WMS Mapnik TileCache Image CRS TileCache http://tilecache.org
  131. 131. Image WMS TMS Mapnik TileCache 900913 Image (google) CRS TileCache http://tilecache.org
  132. 132. Mapstraction Tiles mapstraction.addTileLayer(quot;http://oakland-1950s.s3.amazonaws.com/{Z}-r{Y}-c{X}.jpgquot;, 80);
  133. 133. New Orleans http://maps.thinknola.com
  134. 134. EveryBlock http://everyblock.com
  135. 135. Mobile
  136. 136. Mobline Placemarking
  137. 137. uLocate WHERE
  138. 138. uLocate WHERE
  139. 139. Android Innovations cab4me
  140. 140. Ambient Location OmniFocus
  141. 141. UrbanSpoon
  142. 142. API Dash http://dash.net
  143. 143. PocketMaps
  144. 144. PocketMaps height = 11 width = 8.5 margin = .25 dpi = 144 bbox = (45.482882,-73.619899,45.532687,-73.547801) zoom = 16 out = quot;montreal_pocketmmap.pdfquot; pm = pocketMMap(height, width, margin, dpi) pm.load_provider('OPEN_STREET_MAP') pm.draw(bbox, zoom) pm.save(out) ruby: http://github.com/ajturner/pocketmaps python: http://aaronland.info/python/pocketMMap
  145. 145. Geolocation
  146. 146. W3C Geolocation http://dev.w3.org/geo/api/spec-source.html
  147. 147. navigator.geolocation.getCurrentPosition(function(pos) { alert( pos.latitude + quot;, quot; + pos.longitude ); })
  148. 148. interface Geolocation { readonly attribute Position lastPosition; void getCurrentPosition(in PositionCallback successCallback); int watchPosition(in PositionCallback successCallback); void clearWatch(in int watchId); };
  149. 149. PlundrDS
  150. 150. Crowd Sourced Crisis Information
  151. 151. FireEagle http://fireeagle.com
  152. 152. geotagging pacers M T W Th
  153. 153. geotagging pacers M T W Th 1 23 4
  154. 154. geotagging pacers M T W Th 1 23 4
  155. 155. geotagging pacers M T W Th 1 23 4
  156. 156. geotagging pacers M T W Th 1 23 4
  157. 157. BBC Bangladesh Boat Journey
  158. 158. Nonline
  159. 159. AtomPub
  160. 160. AtomPub atom client http://atompub.org/
  161. 161. AtomPub resource atom client http://atompub.org/
  162. 162. AtomPub resource atom client edit http://atompub.org/
  163. 163. Workspace <service xmlns:atom=quot;http://www.w3.org/2005/atomquot; xmlns=quot;http://www.w3.org/2007/appquot;> <workspace> <atom:title>Main Site</atom:title> <collection href=quot;http://example.com/maps.atomquot;> <atom:title>Example Maps</atom:title> <accept>application/vnd.google-earth.kml+xml</accept> <accept>application/atom+xml</accept> </collection> <collection href=quot;http://example.com/places.atomquot;> <atom:title>Example Places</atom:title> <accept>application/atom+xml</accept> </collection> <collection href=quot;http://example.com/users.atomquot;> <atom:title>Example Users</atom:title> <accept>application/atom+xml</accept> </collection> </workspace> </service>
  164. 164. places.atom <feed xmlns:georss=quot;http://www.georss.org/georssquot; xmlns=quot;http://www.w3.org/2005/Atomquot;> <title>Places</title> <id>http://example.com/places</id> <link type=quot;application/atom+xmlquot; rel=quot;selfquot; href=quot;http://example.com/places.atomquot;/> <link type=quot;application/vnd.google-earth.kml+xmlquot; rel=quot;alternatequot; href=quot;http://example.com/places.kmlquot;/> <link type=quot;text/htmlquot; rel=quot;alternatequot; href=quot;http://example.com/placesquot;/> <updated>2008-03-13T21:30:10Z</updated> ... </feed>
  165. 165. Creating a Resource user@host:/tmp$ curl -i -X POST -H quot;Authorization: Basic YWRtaW46OGZjOGFkZmM=quot; -H quot;Content-Type: application/atom+xml;type=entryquot; -H quot;Slug: 600 N Sherwoodquot; -d@test.atom http://example.com/places
  166. 166. Creating a Resource user@host:/tmp$ curl -i -X POST -H quot;Authorization: Basic YWRtaW46OGZjOGFkZmM=quot; -H quot;Content-Type: application/atom+xml;type=entryquot; -H quot;Slug: 600 N Sherwoodquot; -d@test.atom http://example.com/places HTTP/1.1 201 Created Date: Fri, 14 Mar 2008 04:32:33 GMT Server: Twisted/2.5.0 TwistedWeb/[twisted.web2, version 0.2.0] Content-Length: 744 Accept-Ranges: bytes Location: http://example.com/places/600-n-sherwood Content-Type: application/atom+xml;type=entry
  167. 167. New Resource <?xml version=quot;1.0quot; encoding=quot;utf-8quot;?> <entry xmlns=quot;http://www.w3.org/2005/Atomquot; xmlns:georss=quot;http://www.georss.org/georssquot; xmlns:gml=quot;http://www.opengis.net/gmlquot;> <title>Test</title> <link href=quot;http://example.com/places/600-n-sherwood.atomquot; type=quot;application/atom+xml;type=entryquot; rel=quot;editquot;/> <link href=quot;http://example.com/places/600-n-sherwoodquot; type=quot;text/htmlquot; rel=quot;alternatequot;/> <id>urn:uuid:dfa47428-e9ce-41b4-9f42-c2a3cad9037a</id> <updated>2008-03-14T04:32:33Z</updated> <summary>Testing placemark</summary> <georss:where> <gml:Point> <gml:pos>-105.084251 40.594463</gml:pos> </gml:Point> </georss:where> </entry>
  168. 168. Updating a Resource sean@lenny:/tmp$ curl -i -X PUT -H quot;Authorization: Basic YWRtaW46OGZjOGFkZmM=quot; -H quot;Content-Type: application/atom+xml;type=entryquot; -d@test-edit.atom http://example.com/places/600-n-sherwood.atom
  169. 169. Updating a Resource sean@lenny:/tmp$ curl -i -X PUT -H quot;Authorization: Basic YWRtaW46OGZjOGFkZmM=quot; -H quot;Content-Type: application/atom+xml;type=entryquot; -d@test-edit.atom http://example.com/places/600-n-sherwood.atom HTTP/1.1 200 OK
  170. 170. AtomPub kml client atom atom json
  171. 171. AtomPub resource kml client atom atom json
  172. 172. AtomPub resource kml edit client atom atom json
  173. 173. AtomPub resource kml edit client atom atom json
  174. 174. AtomPub resource kml edit client atom atom json
  175. 175. AtomPub resource kml edit client atom atom json
  176. 176. AtomPub p1 kml p2 atom p{1,2,3,4} aggregator client p3 atom p4 json
  177. 177. AtomPub p1 kml p2 atom p{1,2,3,4} aggregator client p3 edit p1 atom p4 json
  178. 178. AtomPub p1 kml p2 atom p{1,2,3,4} aggregator client p3 edit p1 atom p4 json
  179. 179. Public Geodata Repository
  180. 180. Metadata, Statistics, Open Data
  181. 181. GeoData Visualization
  182. 182. Thematic Styling
  183. 183. Classification
  184. 184. Styling
  185. 185. Base Data
  186. 186. Comparative Analysis http://maker.geocommons.com/maps/839
  187. 187. Inspect the Data
  188. 188. Styled KML
  189. 189. GeoWeb We’re Hiring Help build the GeoWeb
  190. 190. Asante sana! andrew@highearthorbit.com highearthorbit.com twitter.com/ajturner

×