Transcript
Page 1: Fast Map Interaction without Flash

Fast Map Interaction Without Flash

Tom MacWright @tmcw from MapBox @mapbox

Wednesday, April 20, 2011

Page 2: Fast Map Interaction without Flash

Solutions That Aren’t

Wednesday, April 20, 2011

Page 3: Fast Map Interaction without Flash

Flash is a dead end

• Hopefully this goes without saying

• Maps are especially mobile

• We don’t tolerate closed-source components

Wednesday, April 20, 2011

Page 4: Fast Map Interaction without Flash

Vectors aren’t there yet

• Internet Explorer still owns 45% of the market

• Polymaps is working on IE9

• Even bleeding-edge browsers are still in early stages of optimization

• Passable for points, but rendering OpenStreetMap in-browser?

Wednesday, April 20, 2011

Page 5: Fast Map Interaction without Flash

Polygons in-Browser

• GeoJSON is nifty but bandwidth-inefficient

• Browser APIs are weak (VML?)

• Calculating polygon collisions is code-heavy and slow

• Simplifying polygons to speed up browsers doesn’t cut it

Wednesday, April 20, 2011

Page 6: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 7: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 8: Fast Map Interaction without Flash

WMS GetFeatureInfo

Wednesday, April 20, 2011

Page 9: Fast Map Interaction without Flash

WMS GetFeatureInfo

• Not cacheable: requires a running web server

• Hover interaction near-impossible

• Just as friendly and great as WMS itself

Wednesday, April 20, 2011

Page 10: Fast Map Interaction without Flash

“Designing Around It”

• Zooming out makes points disappear?

• Clustering for performance reasons?

• Restricting panning?

Wednesday, April 20, 2011

Page 11: Fast Map Interaction without Flash

Inspiration: Google

Wednesday, April 20, 2011

Page 12: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 13: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 14: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 15: Fast Map Interaction without Flash

• Awesome idea!

• Undocumented

• Only supports points

• A single type of data

Wednesday, April 20, 2011

Page 16: Fast Map Interaction without Flash

UTFGridhttp://bit.ly/utfgrid

Wednesday, April 20, 2011

Page 17: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 18: Fast Map Interaction without Flash

Rasterized Tiles+

Pixel-Driven Interaction

Wednesday, April 20, 2011

Page 19: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 20: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 21: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 22: Fast Map Interaction without Flash

JSON, in the nick of time!

Wednesday, April 20, 2011

Page 23: Fast Map Interaction without Flash

where am I, in this tile?

Wednesday, April 20, 2011

Page 24: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 25: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 26: Fast Map Interaction without Flash

letters are numbers after all

Wednesday, April 20, 2011

Page 27: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 28: Fast Map Interaction without Flash

application-specific formatting

Wednesday, April 20, 2011

Page 29: Fast Map Interaction without Flash

Hooray!

Wednesday, April 20, 2011

Page 30: Fast Map Interaction without Flash

• One UTF-8 character per feature

• 256px / 256px tiles

• 2x2 pixel grid (users aren’t pixel-precise)

• gzip

Size Optimizations

Wednesday, April 20, 2011

Page 31: Fast Map Interaction without Flash

Upper bound

Lower bound

(256

2)2 ∗ 1kb

1024b∗ 2 = 32kb

(256

2)2 ∗ 1kb

1024b= 16kb

Wednesday, April 20, 2011

Page 32: Fast Map Interaction without Flash

0

0.75

1.5

2.25

3

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

non-scientific survey of observed file size(aka, thanks, gzip)

in kb

#req

Wednesday, April 20, 2011

Page 33: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 34: Fast Map Interaction without Flash

• Grid size is limited by the number of pixel blocks, so zooming out to the US actually can work

• The grid also works for points, and lines too

Wednesday, April 20, 2011

Page 35: Fast Map Interaction without Flash

13k points

Wednesday, April 20, 2011

Page 36: Fast Map Interaction without Flash

Speed

• Once you have the grid, the mouse coordinate, and the tile coordinate, there are no loops required to find the grid feature, if any.

• Grid computations are typically outweighed by the time taken to display tooltips

• Once a grid is generated, it doesn’t need to change. It could be a file sitting on S3.

Wednesday, April 20, 2011

Page 37: Fast Map Interaction without Flash

... about that ‘application specific formatting’

• Designed to be usable outside of a browser

• And much more than just tooltips

• You get ‘just data’ from the server, not HTML

Wednesday, April 20, 2011

Page 38: Fast Map Interaction without Flash

// Bring your own JavaScriptfunction (options, data) { ... return formatted_output;}

Wednesday, April 20, 2011

Page 39: Fast Map Interaction without Flash

function (options, data) { if (options.format == 'teaser') { return '<h1>' + data.NAME + '</h1>'; } else if (options.format == 'full') { return '<h1>' + data.NAME + '</h1>' + data.AREA; }}

Wednesday, April 20, 2011

Page 40: Fast Map Interaction without Flash

“The Implementation”

Wednesday, April 20, 2011

Page 41: Fast Map Interaction without Flash

• Mapnik is everyone’s favorite world-beating open source map renderer

• Initially we rendered the map, and then queried a 642 grid. It was slow.

• Dane Springmeyer has been writing a grid renderer deep in AGG which is way faster.

Generating: Mapnikhttp://mapnik.org/

Wednesday, April 20, 2011

Page 42: Fast Map Interaction without Flash

Parsing: APIs

•Google Maps API v3

•OpenLayers

•Modest Maps

http://github.com/mapbox/wax

Wednesday, April 20, 2011

Page 43: Fast Map Interaction without Flash

• (let’s do it!)

Wednesday, April 20, 2011

Page 44: Fast Map Interaction without Flash

(sidenote: APIs)

• Grids reduce the role of mapping APIs: their parsing task is reduced to <200 lines

• Do one thing, and do it well: provide a tiling interface

• Thus, for our usage,Modest Maps > OpenLayers.

Wednesday, April 20, 2011

Page 45: Fast Map Interaction without Flash

Making Grids:TileMill

http://tilemill.com/

Wednesday, April 20, 2011

Page 46: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 47: Fast Map Interaction without Flash

Wednesday, April 20, 2011

Page 48: Fast Map Interaction without Flash

Using GridsTileStream, iPad, & Wax

Wednesday, April 20, 2011

Page 49: Fast Map Interaction without Flash

Or, make your own?

• Grid implementation in Mapnik core - with bindings to nodejs and Python (LGPL & BSD licensed)

• Grid reader implementations in Wax, supporting Google Maps, OpenLayers, and Modest Maps (BSD licensed)

Wednesday, April 20, 2011

Page 50: Fast Map Interaction without Flash

• No seriously, it’s open source.

Wednesday, April 20, 2011

Page 51: Fast Map Interaction without Flash

URLS!

• http://mbtiles.org/ (read the full spec)

• http://tilemill.com/

• http://github.com/mapbox/

Wednesday, April 20, 2011

Page 52: Fast Map Interaction without Flash

Rough Edges!

• Can’t highlight features yet

• More APIs! (except Bing, because of TOS)

• Formatter spec needs security spec - currently relies on trust

• Contributions welcome!

Wednesday, April 20, 2011

Page 53: Fast Map Interaction without Flash

Thanks!

@mapbox

@tmcw Tom MacWright

Wednesday, April 20, 2011


Top Related