<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>indiemaps.com/blog</title>
	<atom:link href="http://indiemaps.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://indiemaps.com/blog</link>
	<description>the notebook of cartographer zachary forest johnson</description>
	<pubDate>Tue, 02 Sep 2008 04:58:56 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>SpatialKey: insanely good geovisualization</title>
		<link>http://indiemaps.com/blog/2008/08/spatialkey-insanely-good-geovisualization/</link>
		<comments>http://indiemaps.com/blog/2008/08/spatialkey-insanely-good-geovisualization/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 09:38:05 +0000</pubDate>
		<dc:creator>zach'ry</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[geovisualization]]></category>

		<category><![CDATA[heatmap]]></category>

		<category><![CDATA[neocartography]]></category>

		<category><![CDATA[spatialkey]]></category>

		<category><![CDATA[symbology]]></category>

		<category><![CDATA[universal mind]]></category>

		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://indiemaps.com/blog/?p=62</guid>
		<description><![CDATA[I&#8217;m a little late on this, so I hope it&#8217;s old news to most readers that Universal Mind, where I&#8217;ve worked for the past 2 months, just launched a technology preview of the SpatialKey visualization system.  This is a big deal.

Andrew Powell, Doug McCune, and Brandon Purcell have already posted great introductions to SpatialKey, so [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a little late on this, so I hope it&#8217;s old news to most readers that <a href="http://universalmind.com">Universal Mind</a>, where I&#8217;ve worked for the past 2 months, just launched a technology preview of the <a href="http://spatialkey.com">SpatialKey visualization system</a>.  This is a big deal.</p>
<p class="centerIMG"><img src="/images/skProstitution.png" alt="" /></p>
<p><a href="http://www.infoaccelerator.net/blog/post.cfm/universal-mind-introduces-spatialkey">Andrew Powell</a>, <a href="http://dougmccune.com/blog/2008/08/06/announcing-spatialkey-geographic-information-without-limits/">Doug McCune</a>, and <a href="http://www.bpurcell.org/blog/index.cfm?mode=entry&amp;entry=1112">Brandon Purcell</a> have already posted great introductions to SpatialKey, so I won&#8217;t go through all that here.  But just so&#8217;s you know: SpatialKey is a visualization system for geotemporal (location + time) data, developed primarily in Flex, that lets you filter and render thousands of points very quickly, all client-side in your browser.</p>
<p>This is not a formal release.  We&#8217;re in a technology preview for now, which means you just get to see some sweet examples, but soon we&#8217;ll release a version, SpatialKey Personal, into which you can load and visualize your own data.  Here are links to three of my favorite examples (for more, check out our <a href="http://www.spatialkey.com/spatialkey/www/gallery/gallery_home.cfm">Gallery page</a>, or <a href="http://blog.spatialkey.com/2008/08/spatialkey-technology-preview/">this post</a> on the <a href="http://blog.spatialkey.com/">SpatialKey blog</a>).</p>
<ul>
<li><a href="http://www.spatialkey.com/spatialkey/fms/skclient/index.cfm#dataset=sanAntonioProstitution;template=aggregate">where prostitutes are arrested in San Antonio</a></li>
<li><a href="http://www.spatialkey.com/spatialkey/fms/skclient/index.cfm#dataset=sacbeeBig;template=comparison">the housing slump in Sacramento</a></li>
<li><a href="http://www.spatialkey.com/spatialkey/fms/skclient/index.cfm#dataset=walmartPlus;template=playback">the radial spread of Wal-Mart</a></li>
</ul>
<p>As I said, <a href="http://www.infoaccelerator.net/blog/post.cfm/universal-mind-introduces-spatialkey">other</a> <a href="http://dougmccune.com/blog/2008/08/06/announcing-spatialkey-geographic-information-without-limits/">better</a> <a href="http://www.bpurcell.org/blog/index.cfm?mode=entry&amp;entry=1112">introductions</a> have been written on SpatialKey; I just want to focus on a few of my favorite features or attributes.</p>
<h3>not a single, do-it-all application</h3>
<p>SpatialKey is based around a collection of visualization templates.  Each offers a unique view of the data, with specialized visualizations, filters, and UI controls.  Since the templates are specialized, each one is pretty easy to learn and begin using.</p>
<p>The examples linked above demonstrate the <a href="http://spatialkey.com/spatialkey/www/gallery/gallery_home.cfm#1">animation</a>, <a href="http://spatialkey.com/spatialkey/www/gallery/gallery_home.cfm#3">map comparison</a>, and <a href="http://spatialkey.com/spatialkey/www/gallery/gallery_home.cfm#2">drill down</a> templates.  The fourth template we&#8217;re showing off now is the <a href="http://spatialkey.com/spatialkey/www/gallery/gallery_home.cfm#4">temporal heat index</a> template (here&#8217;s an example of that: <a href="http://www.spatialkey.com/spatialkey/fms/skclient/index.cfm#dataset=sacramentoResidenceBurglary2006;template=heat">Sacramento residential burglaries</a>).</p>
<h3>chorodot symbolization</h3>
<p>You don&#8217;t see these much, but I think they&#8217;re really effective.  The &#8220;heat grid&#8221; symbolization in SpatialKey is a modern implementation of a technique put forth by Alan MacEachren and David DiBiase in 1991.</p>
<p>Aggregating points to arbitrary but regularly-shaped polygons, or binning, was an extant graphical practice at the time, but the geographic application and their particular methods created an effective cartographic symbology.  Other than SpatialKey, I haven&#8217;t seen this symbolization in a  geographic visualization context, but I think it&#8217;s very effective at presenting large datasets that require aggregation.  The heat grid symbolization in SpatialKey extends the approach by allowing grid renderings of attributes of the data (like house prices or temperature) in addition to aggregation of the count of points.</p>
<p class="centerIMG"><img class="alignnone" src="/images/chorodot.jpg" alt="chorodot of AIDS cases in Pennsylvania" /></p>
<p class="caption">MacEachran and DiBiase&#8217;s example chorodot map of AIDS in Pennsylvania (image from J.B. Krygier&#8217;s <a href="http://cc.owu.edu/~jbkrygie/krygier_html/geog_353/geog_353_lo/geog_353_lo08.html">lecture notes</a>)</p>
<p class="centerIMG"><img class="alignnone" src="/images/spatialKeyGrid.png" alt="grid symbology in SpatialKey, implementation of the chorodot cartographic symbology" /></p>
<p class="caption">SpatialKey grid symbolization showing a data attribute (average home prices) in Sacramento county</p>
<h3>small multiples / map comparison</h3>
<p>I&#8217;ve always been a fan of the <a href="http://en.wikipedia.org/wiki/Small_multiple">small multiples</a> depiction of change, illustrated so well by Edward Tufte in <em>The Visual Display of Quantitative Information</em> and <em>Envisioning Information</em>.  Though the SpatialKey Map Comparison template shows <em>two</em> multiples, it qualifies (and we can easily plug in more maps for specialized templates).</p>
<p class="centerIMG"><img class="alignnone" src="/images/spatialKeyMapComparison.png" alt="" /></p>
<p class="caption">D.C. construction in the SpatialKey Map Comparison template</p>
<p>Both the maps and the time charts are live-linked.  Mousing over an area on one of the maps or a bar on one of the time charts reveals the tooltip for both displays, allowing you to easily retrieve specifics for different time periods or areas.</p>
<p class="centerIMG"><img class="alignnone" src="/images/liveLinkedMaps.png" alt="" /></p>
<h3>complex temporal filtering and focusing via the heat index chart</h3>
<p>The time chart, shown in the first screenshot above, is great for revealing linear temporal trends in a dataset, and for enabling linear filtering.  But some datasets evince more complex temporal trends &#8212; for example, some crimes may be more common on a certain day of the week <em>and</em> at a certain time of day.  Such trends are lost when data is aggregated in a linear fashion to, say, days or weeks.</p>
<p class="centerIMG"><img class="alignnone" src="/images/heatIndexSexCrimes.png" alt="" /></p>
<p class="caption">sex crime arrests in Sacramento</p>
<p>The temporal heat index chart reveals such complex trends and allows filtering by multiple temporal aspects simultaneously (for example, showing only prostitution arrests on Tuesdays between 3 and 4 am).</p>
<h3>in closing</h3>
<p>I was late to the game on this one, joining Universal Mind in June.  SpatialKey was developed by the brilliant team of Doug McCune, Ben Stucki, and Andrew Powell, led by Brandon Purcell and Tom Link, with product manager Mike Connor.  It&#8217;s a privilege working with such a talented crew.</p>
<p>Our goals for this technology preview are modest (blowing minds, getting feedback), but we&#8217;re excited to continue developing SpatialKey and SpatialKey Law Enforcement.  And we&#8217;ll be releasing updates, new examples, and SpatialKey Personal in the near future.  So stay tuned to the <a href="http://blog.spatialkey.com">SpatialKey blog</a>, and please <a href="feedback@spatialkey.com">contact us</a> if you have any feedback on our technology preview.</p>
]]></content:encoded>
			<wfw:commentRss>http://indiemaps.com/blog/2008/08/spatialkey-insanely-good-geovisualization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>seeing the plate</title>
		<link>http://indiemaps.com/blog/2008/06/seeing-the-plate/</link>
		<comments>http://indiemaps.com/blog/2008/06/seeing-the-plate/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 21:06:42 +0000</pubDate>
		<dc:creator>zach'ry</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[baseball]]></category>

		<category><![CDATA[pitch location]]></category>

		<category><![CDATA[sportsviz]]></category>

		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://indiemaps.com/blog/?p=47</guid>
		<description><![CDATA[I&#8217;m really digging the Boston Globe&#8217;s recent visualization tracking Manny Ramirez&#8217;s hunt for 500 home runs (reached on May 31st).  

This cool app answers seemingly every question about when and how Manny hit his home runs&#8230;except for the one I&#8217;m most interested in: where on the plate is Manny most likely to hit a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m really digging the <em>Boston Globe</em>&#8217;s recent <a href="http://www.boston.com/sports/baseball/redsox/extras/manny_500_homeruns/">visualization tracking Manny Ramirez&#8217;s hunt for 500 home runs</a> (reached on May 31st).  </p>
<p class="centerIMG"><a href="http://www.boston.com/sports/baseball/redsox/extras/manny_500_homeruns/"><img src="http://indiemaps.com/images/manny.png" alt="manny ramirez's 500 home runs (from Boston.com)" /></a></p>
<p>This cool app answers seemingly every question about when and how Manny hit his home runs&#8230;except for the one I&#8217;m most interested in: where on the plate is Manny most likely to hit a home run?  I&#8217;ve seen a few visualizations recently that do this sort of thing, so I thought I&#8217;d share this view of current practices in the area of <em>pitch location v. batting performance</em> visualization.  </p>
<p>ESPN will often show you a 1D view (showing only the <em>x</em> dimension of the pitch location) during games, dividing the plate into three horizontal segments (in this case showing the number of home runs  this year by Vladimir Guerrero):</p>
<p class="centerIMG"><img src="http://indiemaps.com/images/espn.png" alt="espn screenshot showing home runs by pitch location" /></p>
<p>A more advanced, 2D view of the same is used often on ESPN&#8217;s <em>Baseball Tonight</em>:</p>
<p class="centerIMG"><img src="http://indiemaps.com/images/espn2.png" alt="espn screenshot showing batting average by pitching location" /></p>
<p>For a while now, ESPN.com&#8217;s <a href="http://scores.espn.go.com/mlb/scoreboard">baseball Gamecasts</a> have shown real-time pitch locations, including whether the ball was called a strike (red) or a ball (green). </p>
<p class="centerIMG"><img src="http://indiemaps.com/images/gamecast.png" alt="espn gamecast screenshot showing pitch locations" /></p>
<p>Turning on &#8220;Hit Zones&#8221; reveals a very cool diverging blue-to-red <a href="http://en.wikipedia.org/wiki/Heat_map">heatchart</a>-style graphic of batting performance in the 9 segments of the plate&#8217;s plane.</p>
<p class="centerIMG"><img src="http://indiemaps.com/images/gamecast3.png" alt="espn gamecast screenshot showing pitch locations and heatchart of batting averages" /></p>
<p>The above is apparently a common method of showing this statistic.  These heatcharts differ in 1) how many segments the plate is divided into and 2) whether a sequential or diverging color scheme is used.  Here&#8217;s one &#8212; with many more segments and a high swing zone &#8212; for Ted Williams, from the <a href="http://www.tedwilliams.com/_data/hzone.htm">Official Ted Williams Website</a>.</p>
<p class="centerIMG"><img src="http://indiemaps.com/images/tedwilliams.png" alt="Ted Williams' batting averages by pitch location" /></p>
<p>And a very cool report in the <a href="http://baseballanalysts.com/archives/2006/11/generalities_in.php">Baseball Analysts</a> shows batting averages with 20 pitch location squares, aggregated over two seasons, and divided into the four types of batter-pitcher matchups.  For example, the image below shows the greyscale heatchart for the matchup, Left-handed pitcher vs. Left-handed batter.</p>
<p class="centerIMG"><img src="http://indiemaps.com/images/grids.png" alt="pitch locations and batting averages" /></p>
<p>MLB.com&#8217;s <a href="http://www.mlb.com/mlb/gameday/">Gameday</a> does a better job, methinks, of showing pitch locations relative to the batter and the plate.  But they don&#8217;t give any indication of the particular batter&#8217;s performance with different pitch locations:</p>
<p class="centerIMG"><img src="http://indiemaps.com/images/gameday.png" alt="pitch visualization in MLB.com's Gameday" /></p>
<p>I also like the above because it at least suggests the <a href="http://en.wikipedia.org/wiki/Strike_(baseball)">3d nature of the strike zone</a>: pitches with movement will not leave the space above the plate at the same position as they entered it.  The heatcharts shown above do a good job of showing pitch locations in the <em>x</em> and <em>z</em> dimensions.  A pitch visualization notable for showing these <em>x</em> and <em>z</em> locations at various points in <em>y</em> space is Lokesh Dhakar&#8217;s <a href="http://www.lokeshdhakar.com/2007/09/20/baseball-pitches/">Baseball Pitches Illustrated</a> (shown below is the slider), though this too is concerned only with pitching.  </p>
<p class="centerIMG"><img src="http://indiemaps.com/images/slider.png" alt="pitch visualization" /></p>
<p>Thanks to the <a href="http://webusers.npl.uiuc.edu/~a-nathan/pob/pitchtracker.html">PITCHf/x system</a>, there is a ton of pitch location data available.  Currently, though, there have been few attempts to flexibly visualize this data.  One app, the <a href="http://baseball.bornbybits.com/php/combined_tool.php">PITCHf/x tool by Josh Kalk</a>,  is quite flexible, but the charts themselves leave something to be desired (below for Ben Sheets).</p>
<p class="centerIMG"><img src="http://indiemaps.com/images/pitchfx.png" alt="Ben Sheets' pitch location visualized" /></p>
<p>I&#8217;m thinking more of a tool like <a href="http://www.visual-io.com/baseball/">Visual i|o&#8217;s baseball visualization tool</a>, or the <em>Boston Globe</em> app linked above, that would take advantage of this rich data, but allow it to be manipulated and filtered in real-time.  For example, I&#8217;d love to just look at <em>called</em> strikes or balls, and be able to filter that down by ballpark, or perhaps even by individual umpire, and visualize it by the ratio of strikes-to-balls, to get a better idea of the true strike zone.  And, it&#8217;s worth noting that there&#8217;s no reason this information need be aggregated to grid squares; it could also be shown with a continuous density representation like <a href="http://indiemaps.com/blog/2008/06/this-is-not-a-heat-map/">this style of heatmap</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://indiemaps.com/blog/2008/06/seeing-the-plate/feed/</wfw:commentRss>
		</item>
		<item>
		<title>isolining package for ActionScript 3</title>
		<link>http://indiemaps.com/blog/2008/06/isolining-package-for-actionscript-3/</link>
		<comments>http://indiemaps.com/blog/2008/06/isolining-package-for-actionscript-3/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 06:15:48 +0000</pubDate>
		<dc:creator>zach'ry</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[isolines]]></category>

		<category><![CDATA[mapping]]></category>

		<category><![CDATA[symbology]]></category>

		<guid isPermaLink="false">http://indiemaps.com/blog/?p=43</guid>
		<description><![CDATA[A week or so back I wrote about a package I ported/modified to create the Delaunay triangulation in Flash with a few AS3 classes.  As I noted there, such a triangulated irregular network (TIN) allows us to interpolate isolines — lines of constant value (aka isarithms, commonly called contours).
So, given a field of points [...]]]></description>
			<content:encoded><![CDATA[<p>A week or so back <a href="http://indiemaps.com/blog/2008/05/delaunay-triangulation-in-actionscript-3/">I wrote about</a> a package I ported/modified to create the Delaunay triangulation in Flash with a few AS3 classes.  As I noted there, such a <a href="http://en.wikipedia.org/wiki/Triangulated_irregular_network">triangulated irregular network</a> (TIN) allows us to interpolate <a href="http://en.wikipedia.org/wiki/Isoline">isolines</a> — lines of constant value (aka isarithms, commonly called contours).</p>
<p>So, given a field of points (weather stations, say)&#8230; </p>
<p><img src="http://indiemaps.com/images/weatherStations.png" alt="weather stations" /></p>
<p>&#8230;with one or more attributes attached (temperature, say)&#8230;</p>
<p><img src="http://indiemaps.com/images/weatherStations2.png" alt="weather stations for interpolation" /></p>
<p>&#8230;a TIN can be constructed.</p>
<p><img src="http://indiemaps.com/images/tin.png" alt="triangulated irregular network" /></p>
<p>With the above TIN, values can be interpolated along each edge between the points of known values (<em>control points</em>).  The interpolation is strictly linear (that is, the value 50 would be interpolated halfway along an edge whose control points were valued 48 and 52).</p>
<p><img src="http://indiemaps.com/images/interpolatedPoints.png" alt="interpolated points for isolining" /></p>
<p>With a given <a href="http://en.wikipedia.org/wiki/Contour_interval">contouring interval</a> (I&#8217;m using 4 degrees F here), we can connect some of these interpolated points, creating our contour lines.</p>
<p><img src="http://indiemaps.com/images/isolinesRigid.png" alt="rigid isolines, ready for smoothing" /></p>
<p>With the previous steps stripped away, this creates a passable isoline map.</p>
<p><img src="http://indiemaps.com/images/isolinesRigidMasked.png" alt="masked isolines" /></p>
<p>The lines are rigid, though, and should be smoothed for presentation.  I allow two methods for this.  You can use the &#8220;simple&#8221; method, which just uses the built-in graphics method curveTo between the midpoint of each isoline segment (below with the isoline interval decreased to 3 degrees).</p>
<p><img src="http://indiemaps.com/images/simpleCurve.png" alt="simple curves for isolining" /></p>
<p>The above looks alright, but the curves are not continuous, closed loops can still have hard corners, and the isolines no longer pass through the interpolated points (we have therefore generalized an already-inaccurate interpolation).  My compatriot Andy Woodruff, author of the glorious new <a href="http://cartogrammar.com/blog">Cartogrammar blog</a>, offered to write a nice continuous curve method that ensured isolines would still pass through the interpolated values.  You can read about the method in <a href="http://www.cartogrammar.com/blog/continuous-curves-with-actionscript-3/">his post</a>.  Here she blows:</p>
<p><img src="http://indiemaps.com/images/continuousCurve.png" alt="continuous curves for isolining" /></p>
<p>Bringing it all together, then, and incorporating the only <em><strong>extra</strong></em> feature I wrote (tinting of isolines), here&#8217;s a nice finished isoline map of temperature across the U.S.</p>
<p><img src="http://indiemaps.com/images/isolineFinished.png" alt="finished isoline map of U.S. temperature" /></p>
<p>My new isolining package for Flash/ActionScript3 accomplishes all of the above, requiring only an array of point data with attribute values attached.  The above example, was accomplished with the following lines of code (after drawing the U.S. states from a shapefile).</p>
<div class="codecolorer-container actionscript"><div class="codecolorer" style="font-family: monospace;"><span class="co1">//first, generate the array of triangles (ITriangle objects) from the point data</span><br />
<span class="kw2">var</span> triangles:<span class="kw3">Array</span> = Delaunay.<span class="me1">triangulate</span><span class="br0">&#40;</span>points<span class="br0">&#41;</span>;<br />
Delaunay.<span class="me1">drawDelaunay</span><span class="br0">&#40;</span>triangles, points, triClip, <span class="kw2">false</span><span class="br0">&#41;</span>; <span class="co1">//comment this out if you don't want to draw the triangulation</span><br />
<span class="co1">//generate an array of isolines (isoline objects)</span><br />
<span class="kw2">var</span> isos:<span class="kw3">Array</span> = IsoUtils.<span class="me1">isoline</span><span class="br0">&#40;</span>triangles, points, triClip, <span class="nu0">3</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
<span class="co1">//create color and class arrays for tinting the isolines</span><br />
<span class="kw2">var</span> classesArray:<span class="kw3">Array</span> = <span class="kw2">new</span> <span class="kw3">Array</span><span class="br0">&#40;</span><span class="nu0">40</span>, <span class="nu0">44</span>, <span class="nu0">48</span>, <span class="nu0">52</span>, <span class="nu0">56</span>, <span class="nu0">60</span>, <span class="nu0">64</span>, <span class="nu0">68</span>, <span class="nu0">72</span>, <span class="nu0">76</span><span class="br0">&#41;</span>;<br />
<span class="kw2">var</span> colorsArray:<span class="kw3">Array</span> = <span class="kw2">new</span> <span class="kw3">Array</span><span class="br0">&#40;</span>0x051CFD, 0x4602FD, 0x6D0EEB, 0x8400FF, 0xC400FF, 0xEA00FF, 0xFF00E2, 0xFF0095, 0xFF0030, 0xFF0015, 0xFB3507<span class="br0">&#41;</span>;<br />
<span class="co1">//then, actually draw them, using a continuous curve</span><br />
IsoUtils.<span class="me1">drawIsolines</span><span class="br0">&#40;</span>isos, triClip, <span class="st0">&quot;continuous&quot;</span>, colorsArray, classesArray, .<span class="nu0">5</span>, .<span class="nu0">95</span><span class="br0">&#41;</span>;</div></div>
<p>The full example is included in the .zip distribution.  Get that here:</p>
<ul>
<li><a href="http://indiemaps.com/code/isolinesAS3.zip">the full .zip thing</a> (in addition to my <span class="incode">isolines</span> class and an example, the archive includes my <a href="http://indiemaps.com/blog/2008/05/delaunay-triangulation-in-actionscript-3/"><span class="incode">delaunay</span> triangulation package</a>, Andy Woodruff&#8217;s <a href="http://www.cartogrammar.com/blog/continuous-curves-with-actionscript-3/"><span class="incode">cubicBezier</span> class</a>, and a slightly modded version of Edvin van Rijkom&#8217;s <a href="http://shp.riaforge.org/"><span class="incode">shp</span> classes</a>, which are used to draw the shapefile in the example .fla)</li>
<li>or, for you browsers, the main <a href="http://indiemaps.com/code/IsoUtils.as.txt"><span class="incode">IsoUtils.as</span> class</a></li>
</ul>
<p>Keep in mind: triangulation is just one interpolation method, and is many ways the least technical (and accurate).  More accurate interpolation techniques include <a href="http://www.ncgia.ucsb.edu/pubs/spherekit/inverse.html">inverse-distance</a> and <a href="http://www.nbb.cornell.edu/neurobio/land/OldstudentProjects/cs490-94to95/clang/kriging.html">kriging</a>.  ***If you&#8217;re having trouble, and your isoline interval is not an integer, check out the comment at line 171 of <a href="http://indiemaps.com/code/IsoUtils.as.txt"><span class="incode">isoUtils.as</span></a>.  Please fix that, BTW.</p>
<p>I meant to add other features, but since I started work this past week, I&#8217;m posting the package as-is, and invite others to modify.  On my wishlist:</p>
<ul>
<li><a href="http://blogs.esri.com/Support/blogs/mappingcenter/archive/2008/05/09/hypsometric-tinting.aspx">hypsometric tinting</a>, or color between the lines, would allow for more effective terrain or temperature mapping</li>
<li>support for projections and other coordinate conversions in the <span class="incode">drawIsolines</span> method.  I have packages for converting lat/long to a number of map projections, but currently the drawIsolines method doesn&#8217;t have support for passing a point coordinate conversion method.</li>
<li>an animated demo.  This thing&#8217;s lightning-fast, so why not?</li>
<li>something that would be <em><strong>super wicked</strong></em> would be if someone would implement <a href="http://www.nagt.org/files/nagt/jge/abstracts/Kennelly_v50n4p428.pdf">Tanaka&#8217;s illuminated contours [pdf]</a> method, that thickens/thins and darkens/lightens lines like so&#8230;<br />
<img src="http://indiemaps.com/images/tanaka1.png" alt="tanaka method" /><br />
&#8230;creating beautiful relief maps like the one below<br />
<img src="http://indiemaps.com/images/tanaka2.png" alt="tanaka illuminated contours" />
</ul>
<p>If you add anything to the package, feel free to post a link to your revised version in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://indiemaps.com/blog/2008/06/isolining-package-for-actionscript-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>oh hey WordPress</title>
		<link>http://indiemaps.com/blog/2008/06/oh-hey-wordpress/</link>
		<comments>http://indiemaps.com/blog/2008/06/oh-hey-wordpress/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 04:27:15 +0000</pubDate>
		<dc:creator>zach'ry</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[admin]]></category>

		<category><![CDATA[blosxom]]></category>

		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://indiemaps.com/blog/?p=42</guid>
		<description><![CDATA[Yeah I switched to WordPress, after being a (sometimes) proud Blosxom (specifically Blosxom.PHP) user for half a year.  It wasn&#8217;t an easy decision, especially as it required porting all my posts and comments, mostly manually, to WordPress, but after using it for just a few days I can tell it will be worth it.
Now there&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Yeah I switched to WordPress, after being a (sometimes) proud <a href="http://www.blosxom.com/">Blosxom</a> (specifically <a href="http://js.hu/package/blosxom.php/">Blosxom.PHP</a>) user for half a year.  It wasn&#8217;t an easy decision, especially as it required porting all my posts and comments, mostly manually, to WordPress, but after using it for just a few days I can tell it will be worth it.</p>
<p>Now there&#8217;s nothing wrong with Blosxom (well&#8230;), nor with other minimal blogware, but I gradually grew weary of the quirks (for example, it took me a weekend to debug the commenting functionality) and I began to feel like it was taking away from my writing.</p>
<p>What does this mean for you?</p>
<ul>
<li>I&#8217;ve likely lost a lot of indie cred in your books.</li>
<li>If you subscribe, you&#8217;ll want to update your feed to <a href="http://indiemaps.com/blog/feed/">this</a>.</li>
<li>Outside links to individual blog posts won&#8217;t work. I can hopefully fix or redirect these eventually, but for now we&#8217;re all screwed.</li>
</ul>
<p>On the bright side, you&#8217;re here, which means something&#8217;s working.</p>
]]></content:encoded>
			<wfw:commentRss>http://indiemaps.com/blog/2008/06/oh-hey-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>this is not a heat map</title>
		<link>http://indiemaps.com/blog/2008/06/this-is-not-a-heat-map/</link>
		<comments>http://indiemaps.com/blog/2008/06/this-is-not-a-heat-map/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 06:39:03 +0000</pubDate>
		<dc:creator>zach'ry</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[cartographic theory]]></category>

		<category><![CDATA[choropleth]]></category>

		<category><![CDATA[heat map]]></category>

		<category><![CDATA[neocartography]]></category>

		<category><![CDATA[symbology]]></category>

		<guid isPermaLink="false">http://indiemaps.com/blog4/?p=40</guid>
		<description><![CDATA[
The term &#8220;heat map&#8221; has become increasingly confused.  Perhaps it doesn&#8217;t matter, but for the record the above map is a choropleth map.  It&#8217;s been branded by Google (as one of the Google Gadgets) with the sexier label &#8220;heat map&#8221;, and this (mis)usage is catching on.  The term heat map is already [...]]]></description>
			<content:encoded><![CDATA[<p><img class="inimg" src="http://indiemaps.com/images/notheatmap.png" alt="" /></p>
<p>The term &#8220;heat map&#8221; has become increasingly confused.  Perhaps it doesn&#8217;t matter, but for the record the above map is a <a href="http://en.wikipedia.org/wiki/Choropleth">choropleth map</a>.  It&#8217;s been <a href="http://www.google.com/ig/directory?url=www.google.com/ig/modules/heatmap.xml">branded by Google</a> (as one of the <a href="http://www.google.com/ig/directory?type=gadgets">Google Gadgets</a>) with the sexier label &#8220;heat map&#8221;, and this (mis)usage is catching on.  The term heat map is already equivocal.  First, as a non-geographic, non-map representation, the heat map is a treemap-like graphical technique used to represent a two-dimensional array of data.</p>
<p><img src="http://indiemaps.com/images/treeheatmap.png" alt="" /></p>
<p>As a cartographer, though, I&#8217;ve always (well, ok, for a year or so anyway) taken heat maps to be a <em>thematic mapping technique in which a (typically) diverging, (usually) thermal-like color scheme is used to represent density in a continuous fashion</em>.  Like the following (from <a href="http://homeless.cartifact.com/">Cartifact&#8217;s Downtown L.A. homeless map</a>).</p>
<p><img src="http://indiemaps.com/images/laheatmap.png" alt="" /></p>
<p>This technique holds the use of color (well, value or lightness really, not <em>hue</em>) in common with choropleth mapping.  That is, they share the same <a href="http://www.infovis-wiki.net/index.php?title=Visual_Variables"><em>visual variable</em></a> (though, as noted, heat maps almost always utilize a diverging color scheme, in which both hue and value/lightness are varied).  The difference is that choropleth maps represent data by enumeration units (countries, states, counties, blocks) while the heat map technique is continuous and not aggregated to enumeration units.</p>
<p>As I say, perhaps it doesn&#8217;t matter, and I&#8217;m not really advocating that Google Gadgets users (and others) learn the term &#8220;choropleth map&#8221;.  Indeed, I&#8217;d be just as happy with the also-misleading term &#8220;color map&#8221;, as at least it does not already stand for two different symbologies.</p>
]]></content:encoded>
			<wfw:commentRss>http://indiemaps.com/blog/2008/06/this-is-not-a-heat-map/feed/</wfw:commentRss>
		</item>
		<item>
		<title>delaunay triangulation in ActionScript 3</title>
		<link>http://indiemaps.com/blog/2008/05/delaunay-triangulation-in-actionscript-3/</link>
		<comments>http://indiemaps.com/blog/2008/05/delaunay-triangulation-in-actionscript-3/#comments</comments>
		<pubDate>Sun, 25 May 2008 04:40:34 +0000</pubDate>
		<dc:creator>zach'ry</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[Delaunay]]></category>

		<category><![CDATA[triangulation]]></category>

		<guid isPermaLink="false">http://indiemaps.com/blog4/?p=39</guid>
		<description><![CDATA[update: for a cool usage of Delaunay triangulation, see my isolining package for ActionScript 3





The Delaunay triangulation was invented in 1934 by Boris Delaunay.  According to Paul Bourke, 

The Delaunay triangulation is closely related geometrically to the Direchlet tesselation also known as the Voronoi or Theissen tesselations. These tesselations split the plane into a [...]]]></description>
			<content:encoded><![CDATA[<p><strong>update</strong>: for a cool usage of Delaunay triangulation, see my <a href="http://indiemaps.com/blog/2008/06/isolining-package-for-actionscript-3/">isolining package for ActionScript 3<br />
</a></p>
<p>
<img src="http://upload.wikimedia.org/wikipedia/commons/c/c9/Delaunay_circumcircles.png" alt="" width="352.5px" height="360.75px" />
</p>
<p>
The <a href="http://local.wasp.uwa.edu.au/~pbourke/papers/triangulate/">Delaunay triangulation</a> was invented in 1934 by Boris Delaunay.  According to Paul Bourke, </p>
<blockquote><p>
The Delaunay triangulation is closely related geometrically to the Direchlet tesselation also known as the Voronoi or Theissen tesselations. These tesselations split the plane into a number of polygonal regions called tiles. Each tile has one sample point in its interior called a generating point. All other points inside the polygonal tile are closer to the generating point than to any other. The Delauney triangulation is created by connecting all generating points which share a common tile edge. Thus formed, the triangle edges are perpendicular bisectors of the tile edges.
</p></blockquote>
<p>
What all that means is that the resultant triangles will be <em>as equilateral as possible</em>.  The triangular mesh has the advantage of minimizing the distance over which interpolations must take place.
</p>
<p>
Go ahead, try it out.
</p>

<object	type="application/x-shockwave-flash"
			data="http://indiemaps.com/flash/clickTest_v1.swf"
			width="350"
			height="350">
	<param name="movie" value="http://indiemaps.com/flash/clickTest_v1.swf" />
</object>
<p>
With the idea of creating client-side <a href="http://en.wikipedia.org/wiki/Isoline">isolines</a> and inspired in part by the spirit of <a href="http://www.bit-101.com/blog/">Keith Peters&#8217;</a> ongoing MathWorld Problem of the Week, I set out to write an AS3 class to create the above triangulation.  After an hour of hacking, I gave up, and decided to just port the algorithm from another language.  I chose <a href="http://local.wasp.uwa.edu.au/~pbourke/papers/triangulate/triangulate.java">Florian Jenett&#8217;s Java version</a>, itself a port of <a href="http://local.wasp.uwa.edu.au/~pbourke/papers/triangulate/triangulate.c">Paul Bourke&#8217;s original C</a>.  The port was easy, and makes it a cinch to create a triangulation of, say, selected weather stations in the U.S.</p>
<p>
<img src="http://indiemaps.com/images/usaTri.png" alt="" />
</p>
<p class="caption">
(sorry - unprojected)
</p>
<p>
Of course, this triangulation isn&#8217;t really interesting in its own right, but rather for what it allows us to do, at run-time, with near real-time data, in Flash.  On that, check this out.
</p>
<p>
<img src="http://indiemaps.com/images/usaLines.png" alt="" />
</p>
<p class="caption">
(a temperature isoline map generated in Flash from a field of only 50 or so weather stations of the form <em>lat</em>, <em>lon</em>, <em>temp</em>)
</p>
<p>
I&#8217;ll release a full isolining package &#8212; complete with smoothing and hypsometric tinting &#8212; soon.  For now, here&#8217;s the source code to the Delaunay triangulation in AS3.
</p>
<ul>
<li><a href="http://indiemaps.com/code/delaunay.zip">Full .zip</a> with necessary classes and example .fla</li>
<li>For browsing, the <a href="http://indiemaps.com/code/Delaunay.as">main Delaunay.as file</a></li>
</ul></p>
]]></content:encoded>
			<wfw:commentRss>http://indiemaps.com/blog/2008/05/delaunay-triangulation-in-actionscript-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>filling the void</title>
		<link>http://indiemaps.com/blog/2008/05/filling-the-void/</link>
		<comments>http://indiemaps.com/blog/2008/05/filling-the-void/#comments</comments>
		<pubDate>Thu, 08 May 2008 04:38:42 +0000</pubDate>
		<dc:creator>zach'ry</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[personal]]></category>

		<guid isPermaLink="false">http://indiemaps.com/blog4/?p=38</guid>
		<description><![CDATA[



I defend my thesis next Tuesday, so have been staying away from here lately.  I will return soon.


&#8220;Map&#8221; above is the USGS Rozel Point SW Quadrangle.
]]></description>
			<content:encoded><![CDATA[<p>
<img src="http://indiemaps.com/images/gsl.png" alt="Great Salt Lake quad" />
</p>
<p>
I defend my thesis next Tuesday, so have been staying away from here lately.  I will return soon.
</p>
<p>
&#8220;Map&#8221; above is the USGS Rozel Point SW Quadrangle.</p>
]]></content:encoded>
			<wfw:commentRss>http://indiemaps.com/blog/2008/05/filling-the-void/feed/</wfw:commentRss>
		</item>
		<item>
		<title>how tag clouds work</title>
		<link>http://indiemaps.com/blog/2008/04/how-tag-clouds-work/</link>
		<comments>http://indiemaps.com/blog/2008/04/how-tag-clouds-work/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 04:36:15 +0000</pubDate>
		<dc:creator>zach'ry</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[neocartography]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[scaling]]></category>

		<category><![CDATA[tag cloud]]></category>

		<guid isPermaLink="false">http://indiemaps.com/blog4/?p=37</guid>
		<description><![CDATA[I like tag clouds.  They look cool, and they work.
3d visualization cartography climate change geographic information science geographic visualization geovisualization gis giscience interactive map modeling self-organizing maps uncertainty visual analytics visualization
Tag clouds use the visual variable of size to convey information.  As a cartographer, then, my first instinct was to compare tag clouds [...]]]></description>
			<content:encoded><![CDATA[<p>I like tag clouds.  They look cool, and they <em>work</em>.</p>
<p class="cloud"><a style="font-size: 14px" title="size: 14 , occurrences: 3" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=3d visualization">3d visualization</a> <a style="font-size: 21px" title="size: 21 , occurrences: 7" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=cartography">cartography</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=climate change">climate change</a> <a style="font-size: 27px" title="size: 27 , occurrences: 10" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geographic information science">geographic information science</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geographic visualization">geographic visualization</a> <a style="font-size: 25px" title="size: 25 , occurrences: 9" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geovisualization">geovisualization</a> <a style="font-size: 27px" title="size: 27 , occurrences: 10" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=gis">gis</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=giscience">giscience</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=interactive">interactive</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=map">map</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=modeling">modeling</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=self-organizing maps">self-organizing maps</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=uncertainty">uncertainty</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=visual analytics">visual analytics</a> <a style="font-size: 55px" title="size: 55 , occurrences: 25" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=visualization">visualization</a></p>
<p>Tag clouds use the <a href="http://www.infovis-wiki.net/index.php?title=Visual_Variables">visual variable</a> of size to convey information.  As a cartographer, then, my first instinct was to compare tag clouds to proportional and graduated symbol maps.</p>
<p class="centeredImage"><img src="http://indiemaps.com/images/bwProp.png" alt="" /></p>
<p>When viewed in this light, tag cloud scaling begins to seem quite haphazard &#8212; font point sizes, not areas, are modified to communicate the data.  Thus, two tags of varying character length (<em>GIS</em> vs. <em>Geographic Information Science</em>, for example) but equal incidence will have very different visual presence (though their font point size will be equalized, the area will not).</p>
<p class="blackcloud"><a style="font-size: 14px" title="size: 14 , occurrences: 3" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=3d visualization">3d visualization</a> <a style="font-size: 21px" title="size: 21 , occurrences: 7" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=cartography">cartography</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=climate change">climate change</a> <a style="font-size: 27px" title="size: 27 , occurrences: 10" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geographic information science">geographic information science</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geographic visualization">geographic visualization</a> <a style="font-size: 25px" title="size: 25 , occurrences: 9" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geovisualization">geovisualization</a> <a style="font-size: 27px" title="size: 27 , occurrences: 10" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=gis">gis</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=giscience">giscience</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=interactive">interactive</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=map">map</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=modeling">modeling</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=self-organizing maps">self-organizing maps</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=uncertainty">uncertainty</a> <a style="font-size: 12px" title="size: 12 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=visual analytics">visual analytics</a> <a style="font-size: 55px" title="size: 55 , occurrences: 25" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=visualization">visualization</a></p>
<p>Sixteen hours into my <a href="http://indiemaps.com/blog/2008/04/aag-post-0/">30 hour train trip</a> from Boston South Station to Chicago Union Station, I got the hairbrained idea that <em>tags could be more accurately scaled</em> &#8212; each one can be thought of as a rectangle, and a point size can be calculated for each tag such that its rectangle&#8217;s area is proportional to its incidence.<sup>1</sup> I call this the <em>Amtrak method</em>.  I wrote first an as3 class, then a <a href="http://indiemaps.com/code/amtrakCloud.txt">somewhat hacky PHP script</a> to generate the pseudo area-scaled tag clouds.  I say it&#8217;s hacky b/c the areas aren&#8217;t really exact &#8212; I don&#8217;t have a method for exactly figuring the bound area of rendered html text.  So instead, I estimate it based on character length.  Specifically, I estimate the area of a rendered tag to be:</p>
<p class="formula"><span class="incode">tagarea</span> = <span class="incode">taglength</span> * <span class="incode">fontsize</span><sup>2</sup> / 2</p>
<p>A simplification to be sure, but based on some tests in Flash, not too inaccurate (for my Helv anyway).  This gives us the formula for the font size of each tag.</p>
<p class="formula"><span class="incode">fontsize</span> = sqrt( 2 * <span class="incode">tagarea</span> / <span class="incode">taglength</span> )</p>
<p>In the above, <span class="incode">tagarea</span> is determined by dividing the tag&#8217;s occurrence value by the maximum number of occurrences among all the tags and multiplying this percentage by a predetermined <span class="incode">maxarea</span> value (I use 12,000, natch).  So for each tag:</p>
<p class="formula"><span class="incode">tagarea</span> = <span class="incode">occ</span> / <span class="incode">maxocc</span> * <span class="incode">maxarea</span></p>
<p>This generates the following, based on the same data as the above two clouds.</p>
<p class="bwcloud"><a style="font-size: 13.416407865px" title="size: 13.416407865 , occurrences: 3" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=3d visualization">3d visualization</a> <a style="font-size: 24.7165752261px" title="size: 24.7165752261 , occurrences: 7" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=cartography">cartography</a> <a style="font-size: 11.7108008754px" title="size: 11.7108008754 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=climate change">climate change</a> <a style="font-size: 17.88854382px" title="size: 17.88854382 , occurrences: 10" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geographic information science">geographic information science</a> <a style="font-size: 8.94427191px" title="size: 8.94427191 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geographic visualization">geographic visualization</a> <a style="font-size: 23.2379000772px" title="size: 23.2379000772 , occurrences: 9" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geovisualization">geovisualization</a> <a style="font-size: 56.5685424949px" title="size: 56.5685424949 , occurrences: 10" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=gis">gis</a> <a style="font-size: 14.6059348668px" title="size: 14.6059348668 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=giscience">giscience</a> <a style="font-size: 13.2115651815px" title="size: 13.2115651815 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=interactive">interactive</a> <a style="font-size: 25.2982212813px" title="size: 25.2982212813 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=map">map</a> <a style="font-size: 15.4919333848px" title="size: 15.4919333848 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=modeling">modeling</a> <a style="font-size: 9.79795897113px" title="size: 9.79795897113 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=self-organizing maps">self-organizing maps</a> <a style="font-size: 13.2115651815px" title="size: 13.2115651815 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=uncertainty">uncertainty</a> <a style="font-size: 10.9544511501px" title="size: 10.9544511501 , occurrences: 2" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=visual analytics">visual analytics</a> <a style="font-size: 42.9668924424px" title="size: 42.9668924424 , occurrences: 25" href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=visualization">visualization</a></p>
<p>Leave it to a grad student to create a problem where none exists.  Looking at my new Amtrak tag clouds, I don&#8217;t think they communicate the data more clearly.  As I say at the beginning, <em>tag clouds work</em>. <em>Existing</em> tag clouds work.  And they work for a reason.  Font point size is a measure of the height of the text, the distance &#8220;from the top of the capital letter to the bottom of the lowest descender, plus a small buffer space&#8221; (Ellen Lupton&#8217;s <em>Thinking With Type</em>).</p>
<p class="centeredImage"><img src="http://indiemaps.com/images/ptSize.png" alt="" /></p>
<p>Thus, tag clouds employ the specific size variable, height (or <em>length</em>).  This is most similar to proportional symbol maps using a bar symbology.</p>
<p class="centeredImage"><img src="http://indiemaps.com/images/barMap.png" alt="" /></p>
<p>But it isn&#8217;t that simple.  The symbols in a tag cloud also vary in width.  The important data is encoded in height, the width is simply related to font size and tag character length, and it must be temporarily ignored by readers to determine the tag&#8217;s number of occurrences.  This is most similar to a bivariate technique in cartography where the width and height of a bar are varied independently to show two different variables.</p>
<p class="centeredImage"><img src="http://indiemaps.com/images/barMap2.png" alt="" /></p>
<p>In such maps, as in tag clouds, the user is expected to <em>attend to and separate</em> the visual dimensions of width and height.  Is attending to the height of a symbol, while ignoring its width, a realistic task?  Or, in the speak of the discipline, is length a <em>separable</em> or an <em>integral</em> dimension?  If it is separable, it can be attended to selectively.  If it is integral, then it cannot be ignored.</p>
<p>There is no definitive answer to the question of size (or length) selectivity; existing evidence is mixed.  Bertin considered size to be dissociative, or integral (in <em>Semiology of Graphics</em>).  Alan MacEachren cites numerous studies of selectivity of visual variables (in <em>How Maps Work</em>) and my own thesis research has required a survey of the bivariate symbol literature.  It appears that size-size has a configural relationship, which is somewhere between integral and separable (selectivity appears to be a continuum).  Though not a sparkling recommendation, this at least suggests that people can, with little work, separate perceptually the width and height of a symbol.  In doing so, they can estimate the number of occurrences of a tag, while ignoring the tag&#8217;s overall visual presence (esp. it&#8217;s width).</p>
<p><span class="footnote"><br />
<strong>1</strong> OK, I suppose another way of thinking about the <em>area</em> of the text is to look at the amount of ink on the page.  But this would be much harder to determine, and will correlate with character length.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://indiemaps.com/blog/2008/04/how-tag-clouds-work/feed/</wfw:commentRss>
		</item>
		<item>
		<title>cartogram design</title>
		<link>http://indiemaps.com/blog/2008/04/cartogram-design/</link>
		<comments>http://indiemaps.com/blog/2008/04/cartogram-design/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 04:34:35 +0000</pubDate>
		<dc:creator>zach'ry</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[cartograms]]></category>

		<category><![CDATA[map design]]></category>

		<category><![CDATA[symbology]]></category>

		<guid isPermaLink="false">http://indiemaps.com/blog4/?p=36</guid>
		<description><![CDATA[
I study cartogram design.  Cartograms are thematic maps in which the  enumeration units (states, countries) are resized based on a particular attribute (population, carbon emissions).  There are dozens of types/designs of cartogram and many methods/algorithms for cartogram production.

These have gotten a lot of attention lately (uses the Gastner-Newman diffusion-based algorithm).




Some cartographers manually [...]]]></description>
			<content:encoded><![CDATA[<p>
I study cartogram design.  Cartograms are thematic maps in which the  enumeration units (states, countries) are resized based on a particular attribute (population, carbon emissions).  There are dozens of types/designs of cartogram and many methods/algorithms for cartogram production.
</p>
<p>These have gotten a lot of attention lately (uses the <a href="http://www-personal.umich.edu/~mejn/cart/">Gastner-Newman diffusion-based algorithm</a>).</p>
<p>
<a href="http://www-personal.umich.edu/~mejn/election/countycartlinearlarge.png"><img src="http://indiemaps.com/images/gnewman.png" alt="" /></a>
</p>
<p>
Some cartographers manually tweak their automatically generated cartograms to better preserve shape or topology (from the Dutch company <a href="http://mappingworlds.com">Mapping Worlds</a>).
</p>
<p>
<a href="http://mappingworlds.org/world2005.html"><img src="http://indiemaps.com/images/mworlds.png" alt="" /></a></p>
<p>
Some preserve shape completely (from the <a href="http://devdata.worldbank.org/atlas-mdg/">Online Atlas of the Millennium Development Goals</a> also by <a href="http://mappingworlds.com">Mapping Worlds</a>).</p>
<p>
<a href="http://devdata.worldbank.org/atlas-mdg/"><img src="http://indiemaps.com/images/noncon.png" alt="" /></a></p>
<p>
Others abstract enumeration units to geometric primitives (generated by <a href="http://indiemaps.com/blog/2008/02/i-got-better/">my Python script</a>, based on Daniel Dorling&#8217;s algorithm).
</p>
<p>
<a href="http://indiemaps.com/blog/2008/02/i-got-better/"><img src="http://indiemaps.com/images/dorling.png" alt="" /></a></p>
<p>
And of course many other designs can be found between these extremes (redrawn from the <em>NY Times</em>&#8216; <a href="http://www.nytimes.com/ref/washington/2006ELECTIONGUIDE.html">2006 election results app</a>).</p>
<p>
<a href="http://www.nytimes.com/ref/washington/2006ELECTIONGUIDE.html"><img src="http://indiemaps.com/images/blockcart.png" alt="" /></a></p>
<p>
The standard approach to cartogram design is to classify them as either contiguous or noncontiguous (with some adding a pseudo-contiguous category).  As the small gallery above illustrates, this is inadequate.  It seems to me that cartogram designs vary along three dimensions, and that variation along each dimension is continuous.
</p>
<ol>
<li><em>Shape preservation</em> &#8212; how much the original shapes are preserved on the transformed cartogram (can be quantified with local angles and edge length ratios)</li>
<li><em>Topology preservation</em> &#8212; how well adjancencies are preserved</li>
<li><em>Density equalization</em> &#8212; how accurately unit size represents the chosen attribute</li>
</ol>
<p>
The latter requires perhaps more explanation.  <em>Isn&#8217;t size on a cartogram supposed to perfectly reflect the chosen attribute?</em>  Sure, but some recent cartogram algorithms (Gastner-Newman slightly, Kocmoud-House somewhat more) have chosen to allow for some inaccuracy in order to better preserve shape or topology.  Since readers can&#8217;t accurately estimate area anyway, this seems like a fair tradeoff.
</p>
<p>
To show these continua, and better portray the tradeoffs involved in preserving individual properties, I drafted the Cartogram Cube.  It has helped me think through some of these issues while writing my thesis.
</p>
<h3>
Cartogram<sup>3</sup></p>
</h3>
<p>
<img src="http://indiemaps.com/images/cartcube.png" alt="Cartogram Cube" />
</p>
<p>
<em>Does any of the above matter?</em>  Well, only to the extent that it helps us make better maps.  But I believe cartogram effectiveness has a lot to do with these design characteristics, and depends largely on the property tradeoffs made in cartogram design (for manual and algorithmically-produced cartograms).  Indeed, this is precisely what my thesis results &#8212; to be defended on May 13 &#8212; indicate.
</p>
<p>
More on my actual results later.</p>
]]></content:encoded>
			<wfw:commentRss>http://indiemaps.com/blog/2008/04/cartogram-design/feed/</wfw:commentRss>
		</item>
		<item>
		<title>aag post 0</title>
		<link>http://indiemaps.com/blog/2008/04/aag-post-0/</link>
		<comments>http://indiemaps.com/blog/2008/04/aag-post-0/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 04:32:01 +0000</pubDate>
		<dc:creator>zach'ry</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[aag]]></category>

		<category><![CDATA[tag cloud]]></category>

		<guid isPermaLink="false">http://indiemaps.com/blog4/?p=35</guid>
		<description><![CDATA[


Tomorrow, two of my fellow UW cartographers and I board a train in Chicago for our 24-hour ride to the Annual Meeting of the Association of American Geographers in Boston.  I&#8217;ll present a paper, Cartograms for Political Cartography: A Question of Design, on Saturday, but I&#8217;m more excited about the visualization and cartography talks [...]]]></description>
			<content:encoded><![CDATA[<p>
<img src="http://indiemaps.com/images/route.png" alt="" />
</p>
<p>Tomorrow, two of my fellow UW cartographers and I board a train in Chicago for our 24-hour ride to the <a href="http://www.aag.org/annualmeetings/2008/index.htm">Annual Meeting of the Association of American Geographers</a> in Boston.  I&#8217;ll present a paper, <a href="http://communicate.aag.org/eseries/aag_org/program/AbstractDetail.cfm?AbstractID=20171">Cartograms for Political Cartography: A Question of Design</a>, on Saturday, but I&#8217;m more excited about the visualization and cartography talks throughout the week.
</p>
<p>
To see what I can look forward to, I worked up a quick tag cloud of the keywords used by presentations <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=Visualization">marked &#8216;visualization&#8217;</a> in the <a href="http://communicate.aag.org/eseries/aag_org/program/index.cfm?mtgID=53">AAG Preliminary Program</a>.
</p>
<p class="cloud">
<a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=3d visualization" style="font-size: 14px" title="3 presentations with the keyword '3d visualization' AND 'visualization'">3d visualization</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=cartography" style="font-size: 21px" title="7 presentations with the keyword 'cartography' AND 'visualization'">cartography</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=climate change" style="font-size: 12px" title="2 presentations with the keyword 'climate change' AND 'visualization'">climate change</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geographic visualization" style="font-size: 12px" title="2 presentations with the keyword 'geographic visualization' AND 'visualization'">geographic visualization</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geovisualization" style="font-size: 25px" title="9 presentations with the keyword 'geovisualization' AND 'visualization'">geovisualization</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=gis" style="font-size: 27px" title="10 presentations with the keyword 'gis' AND 'visualization'">gis</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=giscience" style="font-size: 12px" title="2 presentations with the keyword 'giscience' AND 'visualization'">giscience</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=interactive" style="font-size: 12px" title="2 presentations with the keyword 'interactive' AND 'visualization'">interactive</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=map" style="font-size: 12px" title="2 presentations with the keyword 'map' AND 'visualization'">map</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=modeling" style="font-size: 12px" title="2 presentations with the keyword 'modeling' AND 'visualization'">modeling</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=self-organizing maps" style="font-size: 12px" title="2 presentations with the keyword 'self-organizing maps' AND 'visualization'">self-organizing maps</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=uncertainty" style="font-size: 12px" title="2 presentations with the keyword 'uncertainty' AND 'visualization'">uncertainty</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=visual analytics" style="font-size: 12px" title="2 presentations with the keyword 'visual analytics' AND 'visualization'">visual analytics</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=visualization" style="font-size: 55px" title="25 presentations with the keyword 'visualization' AND 'visualization'">visualization</a> </p>
<p>
And for my fellow cartophiles, a cloud of the keywords used by presentations <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=Cartography">marked &#8216;cartography&#8217;</a>.
</p>
<p class="cloud">
<a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=animation" style="font-size: 13px" title="3 presentations with the keyword 'animation' AND 'cartography'">animation</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=art" style="font-size: 13px" title="3 presentations with the keyword 'art' AND 'cartography'">art</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=atlas" style="font-size: 12px" title="2 presentations with the keyword 'atlas' AND 'cartography'">atlas</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=cartograms" style="font-size: 12px" title="2 presentations with the keyword 'cartograms' AND 'cartography'">cartograms</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=cartography" style="font-size: 55px" title="52 presentations with the keyword 'cartography' AND 'cartography'">cartography</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=cinema" style="font-size: 12px" title="2 presentations with the keyword 'cinema' AND 'cartography'">cinema</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=computer mapping" style="font-size: 12px" title="2 presentations with the keyword 'computer mapping' AND 'cartography'">computer mapping</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=critical cartography" style="font-size: 15px" title="6 presentations with the keyword 'critical cartography' AND 'cartography'">critical cartography</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=education" style="font-size: 13px" title="3 presentations with the keyword 'education' AND 'cartography'">education</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geographic education" style="font-size: 12px" title="2 presentations with the keyword 'geographic education' AND 'cartography'">geographic education</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=geology" style="font-size: 12px" title="2 presentations with the keyword 'geology' AND 'cartography'">geology</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=gis" style="font-size: 21px" title="13 presentations with the keyword 'gis' AND 'cartography'">gis</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=hazards" style="font-size: 12px" title="2 presentations with the keyword 'hazards' AND 'cartography'">hazards</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=historical cartography" style="font-size: 12px" title="2 presentations with the keyword 'historical cartography' AND 'cartography'">historical cartography</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=historical geography" style="font-size: 13px" title="3 presentations with the keyword 'historical geography' AND 'cartography'">historical geography</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=history of cartography" style="font-size: 12px" title="2 presentations with the keyword 'history of cartography' AND 'cartography'">history of cartography</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=map" style="font-size: 14px" title="4 presentations with the keyword 'map' AND 'cartography'">map</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=map use" style="font-size: 12px" title="2 presentations with the keyword 'map use' AND 'cartography'">map use</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=mapping" style="font-size: 12px" title="2 presentations with the keyword 'mapping' AND 'cartography'">mapping</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=maps" style="font-size: 13px" title="3 presentations with the keyword 'maps' AND 'cartography'">maps</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=navigation" style="font-size: 12px" title="2 presentations with the keyword 'navigation' AND 'cartography'">navigation</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=political cartography" style="font-size: 12px" title="2 presentations with the keyword 'political cartography' AND 'cartography'">political cartography</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=political geography" style="font-size: 12px" title="2 presentations with the keyword 'political geography' AND 'cartography'">political geography</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=propaganda maps" style="font-size: 12px" title="2 presentations with the keyword 'propaganda maps' AND 'cartography'">propaganda maps</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=remote sensing" style="font-size: 13px" title="3 presentations with the keyword 'remote sensing' AND 'cartography'">remote sensing</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=united states" style="font-size: 14px" title="4 presentations with the keyword 'united states' AND 'cartography'">united states</a> <a href="http://communicate.aag.org/eseries/aag_org/program/SearchKeywords.cfm?Keyword=visualization" style="font-size: 15px" title="6 presentations with the keyword 'visualization' AND 'cartography'">visualization</a> </p>
<p>
When I return, I&#8217;ll probably follow up this post with one or two more.  My angle?&#8211; <em>visualization in contemporary academic geography</em>.
</p>
<p>
BTW, the map above is from Alex Tait &#038; Erik Steiner&#8217;s actually quite cool <a href="http://www.amtrak.com/servlet/ContentServer?pagename=Amtrak/am2Copy/Title_Image_Copy_Page&#038;cid=1093554048998&#038;c=am2Copy&#038;ssid=42">Amtrak Route Atlas</a>.  Oh, and the reason our route stops in Albany is because of track repairs &#8212; from there we hop on a bus to Boston.  Bring it on Amtrak!</p>
]]></content:encoded>
			<wfw:commentRss>http://indiemaps.com/blog/2008/04/aag-post-0/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
