Tags:
create new tag
view all tags

Ducky Info Vis Presentation outline

Problem statement: lots of GIS data available for free, but looking at it is tough. In particular, while Canadian census bureau data is copyrighted by The Crown, US government data -- by statute -- has no copyright. There is an incredible amount of data, but it's hard to look at. You need to either buy an expensive GIS system called ArcInfo, wade through the mire of open source software and understanding the byzantine formats of the data, or write your own visualizer.

Not gonna happen for Joe Consumer.

On the other hand, there are a handful of mapping services on the Web that will let you use their API to display your data. Many have been very successful. (start parade of screenshots) One thing that you will notice, however, in these screenshots, is that they are almost all point based, plotting markers at individual points. There are only two or three that I could find that are line based, like this run distance calculator. Census bureau data is fundamentally area-based, with a bunch of information aggregated to one number for a given region. It's time to do area-based data, so I decided to work on displaying population data inside Google Maps.

The first issue that I ran into was color scale. I originally tried to do a yellow-blue scale based on a scale from Color Brewer, but that was a disaster. So I dropped to monochrome red, with the opacity being a function of the population density.

Once I started actually plotting the data though, I ran into a huge issue: dynamic range. The population density in California ranges from basically zero per square mile to one tract that has 150K per square mile. (That happens to be San Quentin State Prison.) Here's a map of CA with colors varying between 0 and 100K/mile, with San Quentin maxing out. With the resolution of videotape, you probably won't see squat. You can make it look a little better by clipping the range to 20K, so that anything at 20K or above is solid red and using the rest of the range for stuff between 0 and 20K. But to really make the CA-wide image look good, you have to clip down to ONE HUNDRED people per square mile.

That clipping might be fine for looking at the whole state, but then you can't see anything in urban areas. Here's SF clipped at 100K. You can see how different neighborhoods are arranged. Now look at clipped at 20K. Nothing useful.

This told me that you really want the range clipping to be user-selectable. It also told me that you really don't want to try to aggregate information. I can see San Quentin on the big California map. If I aggregated it with its neighbors, I wouldn't be able to see it.

This means that performance is a really tricky issue. While I could at least think about the 1 terabyte of data that it would take to cache all the information at various zoom levels, I can't think about it for 100 different

It also showed me don't want to aggregate polygons into bigger polygons at higher zoom levels. I can see San Quentin even on the pale map. If I aggregated, I wouldn't.

This means it's going to be slow to draw all those polygons when zoomed out. What can I do about that?

  • First, I can prefetch the data. In fact, if I am clever about it or at least read enough documentation on blogs, I can get Google to prefetch for me. Score!
  • Second, I want to use focus+context intelligently. I want to be able to move around on a map to get to the place I'm interested in, then show a lot of data.
  • Third, I need to be clever about how I cache. More on that in a second, so you can see a demo.

Here's what I've got. The census information is in the center window. You can drag on it or you can drag on the underlying layer to move things around. Once you've gotten to where you want to go, you can click on Census up here to show the whole thing. You can also select map, sattellite, or hybrid information for the underlayer. You can zoom in, or zoom out. I might cut some of the wait time from the video to make things go faster.


Here's the demo. ... what are the issues?
Topic revision: r1 - 2005-12-12 - DuckySherwood
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback