/**
* Simple example application of the NoncontiguousCartogram class.
* Shows how to use shp/dbf data to create the cartogram.
*
* By Zachary Forest Johnson
* indiemaps.com/blog
*
*/
package
{
import com.indiemaps.mapping.cartograms.noncontiguous.NoncontiguousCartogram;
import com.indiemaps.mapping.cartograms.utils.CartogramUtils;
import com.indiemaps.mapping.projections.LambertConformalConic;
import com.indiemaps.mapping.utils.ShpDbfLoader;
import flash.display.Sprite;
import flash.events.Event;
[SWF(backgroundColor='#cccccc', width='1000', height='500')]
/**
* A very simple example of the NoncontiguousCartogram class.
* Loads geometry and attributes from a shapefile and creates a cartogram based on 2008 general election turnout.
*
*/
public class USStatesCartogramExample extends Sprite
{
protected var shapefileLocation:String = 'data/shp/STATES2';
protected var attributeField:String = 'VOTERS_08';
protected var anchorPercentile:Number = .9;
protected var maxWidthOfCartogram:Number = 1000;
protected var maxHeightOfCartogram:Number = 500;
protected var combinedArrayForCartogram:Array = [];
protected var cartogram:NoncontiguousCartogram;
protected var cartogramContainer:Sprite = new Sprite();
public function USStatesCartogramExample()
{
var shpDbfLoader:ShpDbfLoader = new ShpDbfLoader(shapefileLocation + '.shp', shapefileLocation + '.dbf');
shpDbfLoader.addEventListener(ShpDbfLoader.DATA_LOADED, onShpDbfDataLoaded);
addChild(cartogramContainer);
}
protected function onShpDbfDataLoaded(e:Event):void {
var shpDbfLoader:ShpDbfLoader = e.target as ShpDbfLoader;
combinedArrayForCartogram = CartogramUtils.createCombinedArrayFromShpDbf(shpDbfLoader.shpRecords, shpDbfLoader.dbfRecords, multiPolygonConversionFunction);
createCartogram();
}
protected function multiPolygonConversionFunction(multiPolygon:Array):Array {
var standardParallel1_degrees:Number = 33;
var standardParallel2_degrees:Number = 45;
var latitudeOrigin_degrees:Number = 23;
var longitudeOrigin_degrees:Number = -96;
var geometry:Array = LambertConformalConic.projectMultiPolygon(multiPolygon, NaN, NaN, NaN, NaN, standardParallel1_degrees, standardParallel2_degrees, latitudeOrigin_degrees, longitudeOrigin_degrees);
return geometry;
}
protected function createCartogram():void {
cartogram = new NoncontiguousCartogram(combinedArrayForCartogram, maxWidthOfCartogram, maxHeightOfCartogram, attributeField, anchorPercentile);
cartogramContainer.addChild(cartogram);
}
}
}