import nl.idgis.giclient.template.TemplateElement; import nl.idgis.giclient.geoma.Point; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.gis.CentreScale; import nl.idgis.giclient.gis.GIS; import nl.idgis.giclient.webserviceconnector.MapConnector; import nl.idgis.giclient.template.TemplateMovie; import nl.idgis.giclient.print.PrintMovie; import nl.idgis.giclient.gis.SelectableLayer; import nl.idgis.giclient.gis.Feature; import nl.idgis.giclient.config.Colors; import nl.idgis.giclient.gis.GILayer; /** * @author copierrj */ class nl.idgis.giclient.template.MapElement extends TemplateElement { private var layers:Array = null; private var centre:Point = null; private var scale:Number = 0; private var srs:String = ""; private var oversample:Number = 1; public function MapElement(gis:GIS) { super(gis); layers = new Array(); centre = new Point(); } public function doDrawElement(mc:MovieClip, handler:Object) { var mask:MovieClip = mc.createEmptyMovieClip("mask", mc.getNextHighestDepth()); mask.beginFill(0x000000, 100); mask.moveTo(0, 0); mask.lineTo(width, 0); mask.lineTo(width, height); mask.lineTo(0, height); mask.lineTo(0, 0); mc.setMask(mask); var background:MovieClip = mc.createEmptyMovieClip("background", mc.getNextHighestDepth()); background.beginFill(0xffffff, 100); background.moveTo(0, 0); background.lineTo(width, 0); background.lineTo(width, height); background.lineTo(0, height); background.lineTo(0, 0); if(layers.length == 0) { handler.onReady(); return; } var map_handler:Object = new Object(); map_handler.counter = -1; map_handler.oversample = oversample; map_handler.features = new Object(); map_handler.onLoadInit = function(target_mc:MovieClip) { if(target_mc.getSWFVersion() == -1) { target_mc._xscale = (1 / this.oversample) * 100; target_mc._yscale = (1 / this.oversample) * 100; } var selectedFeatures:Array = map_handler.features[target_mc._name]; if(selectedFeatures != null && selectedFeatures.length != 0) { for(var clip:String in target_mc) { if(typeof(target_mc[clip]) == "movieclip") { var fid:String; if(clip.indexOf("|") != -1) { fid = clip.split("|")[1]; } else { fid = clip; } for(var i:Number = 0; i < selectedFeatures.length; i++) { var feature:Feature = Feature(selectedFeatures[i]); if(feature.getID() == fid) { var featureGraphic:MovieClip = target_mc[clip]; var selected:MovieClip = featureGraphic.duplicateMovieClip( clip + "SelectedMapFeature", target_mc.getNextHighestDepth()); var dup:MovieClip = featureGraphic.duplicateMovieClip(clip + "SelectedMapFeatureDup", target_mc.getNextHighestDepth()); var color:Color = new Color(dup); color.setRGB(Colors.selectionColor); dup._alpha = 70; var fill:MovieClip = featureGraphic.createEmptyMovieClip(clip + "SelectedMapFeatureFill", target_mc.getNextHighestDepth()); fill.beginFill(Colors.selectionColor, 70); fill.moveTo(0, 0); fill.lineTo(target_mc.width, 0); fill.lineTo(target_mc.width, target_mc.height); fill.lineTo(0, target_mc.height); fill.lineTo(0, 0); fill.setMask(dup); var colorize:Color = new Color(selected); colorize.setRGB(Colors.selectionColor); selected._alpha = 70; break; } } } } } this.ready(); }; map_handler.onLoadComplete = function(target_mc:MovieClip, httpStatus:Number) { }; map_handler.onLoadError = function(target_mc:MovieClip, httpStatus:Number) { trace("error:" + httpStatus); this.ready(); }; map_handler.ready = function() { this.counter--; if(this.counter < 0) { handler.onReady(); } }; for(var i:Number = layers.length - 1; i >= 0; i--) { var layer:Layer = layers[i]; var mapConnector:MapConnector = layer.getMapConnector(); if(mapConnector != null) { var url:String = ""; if(layer instanceof GILayer) { url = layer.getMapConnector().getMap(layer, new CentreScale(srs, centre.getX(), centre.getY(), PrintMovie.toPoints(scale)), width, height, gis); } else { url = layer.getMapConnector().getMap(layer, new CentreScale(srs, centre.getX(), centre.getY(), PrintMovie.toPoints(scale / oversample)), width * oversample, height * oversample, gis); } if(url != null) { var layerId:String = "layer" + i; //layer.getMapConnector().getID() + layer.getName(); var movie:MovieClip = mc.createEmptyMovieClip(layerId, mc.getNextHighestDepth()); var loader:MovieClipLoader = new MovieClipLoader(); map_handler.counter++; if(layer instanceof SelectableLayer) { var sLayer:SelectableLayer = SelectableLayer(layer); map_handler.features[layerId] = sLayer.getSelectedFeatures(); } loader.addListener(map_handler); loader.loadClip(url, movie); } } } } public function setParameter(name:String, value:Object):Void { if(name == "layers") { layers = new Array(); var templateLayers:Array = Array(value); for(var i:Number = 0; i < templateLayers.length; i++) { var layer:Layer = Layer(templateLayers[i]); if(layer != null) { if(layer.getLayers() == null || layer.getLayers().length == 0) { layers.push(layer); } else { layers = layers.concat(layer.getAllLayers()); } } } } else { super.setParameter(name, value); } } }