package
{
import flash.display.DisplayObjectContainer;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display.Graphics;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.text.TextFieldType;
import flash.events.Event;
import flash.events.SecurityErrorEvent;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.geom.Rectangle;
import org.vanrijkom.far.*;
import org.vanrijkom.shp.*;
import org.vanrijkom.dbf.*;
[SWF(width="800",height="600", frameRate="30", backgroundColor="0xFFFFFF")]
public class far_shape_1 extends Sprite
{
private var status : TextField;
private var far : FarStream;
private var states : FarItem;
private var rivers : FarItem;
private var roads : FarItem;
private var cities : FarItem;
private var citiesdb: FarItem;
private var z: Number = 50;
private var s: Sprite = new Sprite();
private var g: Graphics = s.graphics;
public function far_shape_1() {
init();
}
private function init():void {
far = new FarStream();
states = far.item("mexico/states.shp");
rivers = far.item("mexico/rivers.shp");
roads = far.item("mexico/roads.shp");
cities = far.item("mexico/cities.shp");
citiesdb= far.item("mexico/cities.dbf");
states.addEventListener(Event.COMPLETE, drawStates);
far.addEventListener(Event.COMPLETE, drawOthers);
far.load(new URLRequest("mexico.far"));
}
public function drawStates(e: Event):void {
g.lineStyle(0.01,0xA0A0A0);
var shp: ShpHeader = ShpTools.drawPolyShpFile(states.data,g,z);
addChild(s);
scaleToFitCanvas(s,shp,z);
}
public function drawOthers(e: Event): void {
g.lineStyle(0.01,0xFF);
ShpTools.drawPolyShpFile(rivers.data,g,z);
g.lineStyle(0.01,0xFF0000);
ShpTools.drawPolyShpFile(roads.data,g,z);
var shp: ShpHeader = new ShpHeader(cities.data);
var dbf: DbfHeader = new DbfHeader(citiesdb.data);
drawDbfLabelsAtShpPoints
( s, z , cities.data , shp , citiesdb.data , dbf , "NAME" );
}
public function drawDbfLabelsAtShpPoints
( t: DisplayObjectContainer, zoom: Number
, ptdata: ByteArray, shp: ShpHeader
, lbldata: ByteArray, dbf: DbfHeader, field: String
): void
{
if (shp.shapeType != ShpType.SHAPE_POINT)
throw(new Error("Shape doesn't carry Point records"));
var ptrecords: Array = ShpTools.readRecords(ptdata);
for (var i: uint = 0; i<ptrecords.length; i++) {
var label: TextField = createLabel(8);
var pt: ShpPoint = ptrecords[i].shape as ShpPoint;
label.x = pt.x * z;
label.y = -pt.y * z;
var dr: DbfRecord = DbfTools.getRecord
( lbldata , dbf , i );
label.text = dr.values[field];
t.addChild(label);
}
}
public function createLabel(size: Number): TextField {
var format: TextFormat = new TextFormat();
format.font = "Verdana";
format.color = 0x00;
format.size = size;
format.underline = false;
format.bold = true;
var label: TextField = new TextField();
label.autoSize = TextFieldAutoSize.LEFT;
label.background = false;
label.border = false;
label.type = TextFieldType.DYNAMIC;
label.selectable = false;
label.defaultTextFormat = format;
return label;
}
public function scaleToFitCanvas(t: DisplayObject, shp: ShpHeader, zoom: Number): void {
var r: Rectangle = getBounds(t);
var f: Number = Math.min
( stage.stageHeight / r.height
, stage.stageWidth / r.width
);
if (f!=Infinity)
t.scaleX = t.scaleY = f;
t.x = -shp.boundsXY.left * zoom * f;
t.y = (shp.boundsXY.bottom-shp.boundsXY.top) * zoom * f;
}
}
}