package com.esri.overlay { import com.esri.ags.Map; import com.esri.ags.geometry.Geometry; import com.esri.ags.geometry.MapPoint; import com.esri.ags.symbol.Symbol; import flash.display.Bitmap; import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.geom.Matrix; import flash.net.URLRequest; import flash.system.Capabilities; import flash.system.LoaderContext; import mx.controls.Label; public class OverlaySymbol extends Symbol { private const m_matrix:Matrix = new Matrix(); private var m_bitmap:Bitmap; private var m_source:Object; private var m_width:Number = 0; private var m_height:Number = 0; private var m_rotation:Number = 0; private var m_iname:String = ""; private var m_alpha:Number = 1; public function OverlaySymbol(source:String=null, width:Number=0, height:Number=0, rotation:Number=0, alpha:Number=1) { m_source = source; m_width = width; m_height = height; m_rotation = rotation; m_alpha = alpha; } [Bindable] public function get source():Object { return m_source; } public function set source(value:Object):void { if (value != m_source) { m_bitmap = null; m_source = value; dispatchEventChange(); } } [Bindable] public function get rotation():Number { return m_rotation; } public function set rotation(value:Number):void { if (value != m_rotation) { m_rotation = value; dispatchEventChange(); } } [Bindable] public function get width():Number { return m_width; } public function set width(value:Number):void { if (value != m_width) { m_width = value; dispatchEventChange(); } } [Bindable] public function get height():Number { return m_height; } public function set height(value:Number):void { if (value != m_height) { m_height = value; dispatchEventChange(); } } [Bindable] public function get alpha():Number { return m_alpha; } public function set alpha(value:Number):void { if (value != m_alpha) { m_alpha = value; dispatchEventChange(); } } override public function clear(sprite:Sprite):void { sprite.graphics.clear(); } override public function draw(sprite:Sprite, geometry:Geometry, attributes:Object, map:Map):void { if (geometry is MapPoint) { drawOverlay(sprite, MapPoint(geometry), map); } } private function drawOverlay(sprite:Sprite, mapPoint:MapPoint, map:Map):void { if (m_bitmap == null) { if (m_source is Class) { m_bitmap = new m_source(); drawBitmap(sprite, mapPoint, map); } else if (m_source is String) { var url : String = String(m_source); if( Capabilities.isDebugger == true ) { url = url + (url.indexOf("?") > -1 ? "&debug=true" : "?debug=true"); } const loaderContext:LoaderContext = new LoaderContext(); loaderContext.checkPolicyFile = true; const loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoaderError ); loader.load(new URLRequest(url), loaderContext); function completeHandler(event:Event):void { const loaderInfo:LoaderInfo = event.target as LoaderInfo; m_bitmap = loaderInfo.content as Bitmap; drawBitmap(sprite, mapPoint, map); } function onLoaderError(evt:Event):void { //do nothing } } } else { drawBitmap(sprite, mapPoint, map); } } private function drawBitmap(sprite:Sprite, mapPoint:MapPoint, map:Map):void { const width2:Number = m_width / 2.0; const height2:Number = m_height / 2.0; const xmin:Number = toScreenX(map, mapPoint.x); const xmax:Number = toScreenX(map, mapPoint.x + m_width); const ymax:Number = toScreenY(map, mapPoint.y); const ymin:Number = toScreenY(map, mapPoint.y + m_height); const width:Number = xmax - xmin; const height:Number = ymax - ymin; m_matrix.a = width / m_bitmap.bitmapData.width; m_matrix.d = height / m_bitmap.bitmapData.height; m_matrix.tx = width / m_bitmap.bitmapData.width; m_matrix.ty = height / m_bitmap.bitmapData.height; sprite.x = toScreenX(map, mapPoint.x); sprite.y = toScreenY(map, mapPoint.y); sprite.rotation = m_rotation; sprite.alpha = m_alpha; sprite.graphics.beginBitmapFill(m_bitmap.bitmapData, m_matrix, false, true); sprite.graphics.drawRect(m_matrix.tx, m_matrix.ty, width, height); sprite.graphics.endFill(); var tLabel:Label = new Label(); tLabel.text = m_iname; tLabel.x = sprite.x + 10; tLabel.y = sprite.y + 10; sprite.addChild(tLabel); } } }
sprite.addChild(yourUIComponent);
public override function draw(sprite:Sprite, geometry:Geometry, attributes:Object, map:Map):void { if (geometry is MapPoint) { var label:Label = new Label(); sprite.x = toScreenX(map, (geometry as MapPoint).x); sprite.y = toScreenY(map, (geometry as MapPoint).y); label.text = "dummy label"; label.x = sprite.x; label.y = sprite.y; label.alpha = 1; sprite.addChild(label); sprite.width = 50; sprite.height = 20; } else throw new Error("not a map point "); }
package org.calhoun.county { import com.esri.ags.Map; import com.esri.ags.geometry.Geometry; import com.esri.ags.geometry.MapPoint; import com.esri.ags.symbols.Symbol; import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class MySymbol extends Symbol { public function MySymbol() { super(); } override public function clear(sprite:Sprite):void { sprite.graphics.clear(); } override public function draw(sprite:Sprite, geometry:Geometry, attributes:Object, map:Map):void { if (geometry is MapPoint) { var m_textField:TextField; sprite.x = toScreenX(map, (geometry as MapPoint).x); sprite.y = toScreenY(map, (geometry as MapPoint).y); m_textField = new TextField(); m_textField.name = "textField"; m_textField.mouseEnabled = false; m_textField.mouseWheelEnabled = false; m_textField.selectable = false; m_textField.autoSize = TextFieldAutoSize.CENTER; m_textField.text = "Dummy Text"; sprite.addChild(m_textField); sprite.width = 50; sprite.height = 20; } else throw new Error("not a map point "); } } }
I am not sure on the exacts of the requirements but it seems like spark primitives are necessary.
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.