import nl.idgis.giclient.modes.MapViewerAction; import nl.idgis.giclient.gui.mapviewer.MapViewer; import nl.idgis.giclient.geoma.Point; import nl.idgis.giclient.gis.GIS; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.gis.WMLayer; import nl.idgis.giclient.webserviceconnector.wmsconnector.WMSConnector; import nl.idgis.giclient.framework.FrameWork; import nl.idgis.giclient.gui.featureinfoviewer.FeatureInfoViewer; import nl.idgis.giclient.framework.Frame; import nl.idgis.giclient.io.XMLServer; import nl.idgis.giclient.framework.SinglePaneComponent; import nl.idgis.giclient.gis.GILayer; import nl.idgis.giclient.gui.mapviewer.MapLayer; import nl.idgis.giclient.gui.mapviewer.MapFeature; import nl.idgis.giclient.gis.Feature; import nl.idgis.giclient.util.SynchListener; /** * @author copierrj */ class nl.idgis.giclient.modes.MapViewerFeatureInfo implements MapViewerAction { var cross:MovieClip = null; private var pressX, pressY; function enter(mapViewer : MapViewer) : Void { } function exit(mapViewer : MapViewer) : Void { } function performPress(mapViewer : MapViewer, pressX : Number, pressY : Number, worldPoint : Point) : Void { this.pressX = pressX; this.pressY = pressY; } function performRelease(mapViewer : MapViewer) : Void { var component:SinglePaneComponent = SinglePaneComponent(mapViewer.ruler.getGIClientConfig().getGIComponent("FeatureInfoViewer")); component.showPane(); var viewer:FeatureInfoViewer = FeatureInfoViewer(component.getPane().getScrollContent()); viewer.setMapViewer(mapViewer); viewer.clearViewer(); var gis:GIS = mapViewer.ruler.getGIS(); var layers:Array = gis.getVisibleLayers(); for(var i:Number = 0; i < layers.length; i++) { var layer:Layer = Layer(layers[i]); if(layer instanceof WMLayer) { var wmLayer:WMLayer = WMLayer(layer); var connector:WMSConnector = WMSConnector(wmLayer.getMapConnector()); var url:String = connector.getFeatureInfo(wmLayer, gis.getCurrentCentreScale(), Stage.width, Stage.height, gis, pressX, pressY); if(url != null) { var xmlServer:XMLServer = new XMLServer(url); xmlServer.load(viewer, "", {layer: layer}); } } else if(layer instanceof GILayer) { var giLayer:GILayer = GILayer(layer); var giFeatures:Array = new Array(); var mapLayer:MapLayer = mapViewer.getMapLayer(giLayer); var features:Array = mapLayer.getMapFeatures(pressX, pressY); for(var j:Number = 0; j < features.length; j++) { var feature:Feature = new Feature(mapViewer.getFeatureID(features[j]._name), giLayer); var obj:SynchListener = new SynchListener(); obj["feature"] = feature; obj["layer"] = layer; obj["viewer"] = viewer; obj["giFeatures"] = giFeatures; obj["featureCount"] = features.length; obj["onSynch"] = function(target:Object, action:String):Void { var lfeature:Feature = Feature(this["feature"]); var lgiFeatures:Array = Array(this["giFeatures"]); var lfeatureCount:Number = Number(this["featureCount"]); var lviewer:FeatureInfoViewer = FeatureInfoViewer(this["viewer"]); var llayer:GILayer = GILayer(this["layer"]); lgiFeatures.push(lfeature); if(lfeatureCount == lgiFeatures.length) { lviewer.addGILayer(llayer, lgiFeatures); } }; feature.requestProperties(obj); } } } mapViewer.drawCrossHair(); } function performMouseUp(mapViewer : MapViewer) : Void { } function performMouseMove(mapViewer : MapViewer) : Void { } function performDrag(mapViewer : MapViewer) : Void { } function onKeyPress(mapViewer : MapViewer) : Void { } }