From f270c99427235c959de84fea46d1deee239424cc Mon Sep 17 00:00:00 2001 From: Richard Fairhurst Date: Sat, 30 May 2009 17:24:08 +0000 Subject: [PATCH] basic POI rendering support --- halcyon.tmproj | 16 ++++--- net/systemeD/halcyon/Map.as | 8 ++-- net/systemeD/halcyon/POI.as | 26 ++++++++++++ .../halcyon/styleparser/ImageLoader.as | 9 ++++ net/systemeD/halcyon/styleparser/RuleSet.as | 42 +++++++++++++++++-- 5 files changed, 90 insertions(+), 11 deletions(-) create mode 100644 net/systemeD/halcyon/styleparser/ImageLoader.as diff --git a/halcyon.tmproj b/halcyon.tmproj index a01c864a..8dc29637 100644 --- a/halcyon.tmproj +++ b/halcyon.tmproj @@ -8,37 +8,43 @@ filename net/systemeD/halcyon/AMFConnection.as lastUsed - 2009-05-30T10:52:22Z + 2009-05-30T13:59:09Z filename net/systemeD/halcyon/Connection.as + lastUsed + 2009-05-30T13:59:04Z filename net/systemeD/halcyon/Globals.as + lastUsed + 2009-05-30T15:21:19Z filename net/systemeD/halcyon/Map.as lastUsed - 2009-05-30T10:43:34Z + 2009-05-30T15:21:19Z filename net/systemeD/halcyon/Node.as lastUsed - 2009-05-30T08:37:45Z + 2009-05-30T13:59:07Z filename net/systemeD/halcyon/POI.as + lastUsed + 2009-05-30T15:09:53Z filename net/systemeD/halcyon/Way.as lastUsed - 2009-05-30T10:43:35Z + 2009-05-30T15:16:50Z expanded @@ -54,7 +60,7 @@ filename halcyon.mxml lastUsed - 2009-05-30T10:52:25Z + 2009-05-30T15:21:19Z selected diff --git a/net/systemeD/halcyon/Map.as b/net/systemeD/halcyon/Map.as index 6aa469e0..5caa1b5e 100755 --- a/net/systemeD/halcyon/Map.as +++ b/net/systemeD/halcyon/Map.as @@ -63,13 +63,15 @@ package net.systemeD.halcyon { public function Map() { - for (var l:int=0; l<11; l++) { // 11 layers (10 is +5, 0 is -5) + for (var l:int=0; l<13; l++) { // 11 layers (10 is +5, 0 is -5) var s:Sprite=new Sprite(); s.addChild(new Sprite()); // [layer][0]=fill, [1]=stroke, [2]=names s.addChild(new Sprite()); s.addChild(new Sprite()); addChild(s); } + s=new Sprite(); addChild(s); // 11 - POIs + s=new Sprite(); addChild(s); // 12 - shields connection=new AMFConnection( "http://127.0.0.1:3000/api/0.6/amf/read", @@ -177,9 +179,9 @@ package net.systemeD.halcyon { } for each (var p:Array in pointlist) { - i=w[0]; v=w[4]; + i=p[0]; v=p[4]; if (pois[i] && pois[i].version==v) { continue; } - pois[i]=new POI(i,v,w[1],w[2],w[3],this); + pois[i]=new POI(i,v,p[1],p[2],p[3],this); } addDebug("waylist is "+waylist); diff --git a/net/systemeD/halcyon/POI.as b/net/systemeD/halcyon/POI.as index 8907c86b..fddb8b46 100644 --- a/net/systemeD/halcyon/POI.as +++ b/net/systemeD/halcyon/POI.as @@ -3,6 +3,7 @@ package net.systemeD.halcyon { public class POI extends Object { import flash.display.*; + import flash.events.*; import flash.text.TextField; import flash.text.TextFormat; import net.systemeD.halcyon.styleparser.*; @@ -25,12 +26,37 @@ package net.systemeD.halcyon { this.id=id; this.version=version; this.map=map; + if (tags==null) { tags=new Object(); } this.tags=tags; +map.addDebug("POI "+id); if (map.nodes[id]) { // ** already exists - do stuff if it's moved, or in a way } else { map.nodes[id]=new Node(id,lon,map.lat2latp(lat),tags,version); } + + // place icon on map + var styles:Array=map.ruleset.getStyle(true,tags,map.scale); + var ps:PointStyle=styles[1]; + + if (ps) { +map.addDebug("pointstyle found"); + if (ps.icon && ps.icon!='') { +map.addDebug("placing "+ps.icon); + var loader:Loader = new Loader(); + loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadedIcon); + loader.loadBytes(map.ruleset.images[ps.icon]); + } + } + } + + private function loadedIcon(event:Event):void { +map.addDebug("loadedIcon"); + var bitmap:Bitmap = Bitmap(event.target.content); + var l:DisplayObject=map.getChildAt(11); + bitmap.x=map.lon2coord(map.nodes[id].lon); + bitmap.y=map.latp2coord(map.nodes[id].latp); + Sprite(l).addChild(bitmap); } // redraw diff --git a/net/systemeD/halcyon/styleparser/ImageLoader.as b/net/systemeD/halcyon/styleparser/ImageLoader.as new file mode 100644 index 00000000..35ac41da --- /dev/null +++ b/net/systemeD/halcyon/styleparser/ImageLoader.as @@ -0,0 +1,9 @@ +package net.systemeD.halcyon.styleparser { + + import flash.events.*; + import flash.net.*; + + public class ImageLoader extends URLLoader { + public var filename:String; + } +} \ No newline at end of file diff --git a/net/systemeD/halcyon/styleparser/RuleSet.as b/net/systemeD/halcyon/styleparser/RuleSet.as index 131f1957..3e85a172 100644 --- a/net/systemeD/halcyon/styleparser/RuleSet.as +++ b/net/systemeD/halcyon/styleparser/RuleSet.as @@ -3,10 +3,12 @@ package net.systemeD.halcyon.styleparser { import org.as3yaml.*; import flash.events.*; import flash.net.*; + import net.systemeD.halcyon.Globals; public class RuleSet { public var rules:Array=new Array(); // list of rules + public var images:Object=new Object(); // loaded images // variables for name, author etc. @@ -19,8 +21,8 @@ package net.systemeD.halcyon.styleparser { for each (var rule:* in rules) { if ( isPoint && rule is ShapeRule) { continue; } if (!isPoint && rule is PointRule) { continue; } - if (scale>rule.minScale) { continue; } - if (scalerule.minScale && !isPoint) { continue; } + if (scale