<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:exif="com.esri.exif.*" xmlns:esri="http://www.esri.com/2008/ags" viewSourceURL="srcview/index.html">
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.controls.Text;
            import mx.controls.TextInput;
            import mx.core.Container;
            import mx.containers.Panel;
            import mx.containers.VBox;
            import mx.core.UIComponent;
            import com.esri.ags.geometry.MapPoint;

            private function loadHandler():void
            {
                // exifLoader.loadJPEG(new URLRequest("assets/winchester.jpg"));
            }

            private function completeHandler(event:Event):void
            {
                if (exifLoader.exif.GPSLongitude && exifLoader.exif.GPSLatitude)
                {
                    const latRef:String = exifLoader.exif.GPSLatitudeRef || "N";
                    const lonRef:String = exifLoader.exif.GPSLongitudeRef || "W";
                    const latArr:Array = exifLoader.exif.GPSLatitude;
                    const lat:Number = (latArr[0] + latArr[1] / 60.0 + latArr[2] / 3600.0) * (latRef == "N" ? 1.0 : -1.0);
                    const lonArr:Array = exifLoader.exif.GPSLongitude;
                    const lon:Number = (lonArr[0] + lonArr[1] / 60.0 + lonArr[2] / 3600.0) * (lonRef == "E" ? 1.0 : -1.0);

                    const mapPoint:MapPoint = new MapPoint(lon, lat);

                    if (exifLoader.thumbnailByteArray)
                    {
                        const loader:Loader = new Loader();
                        loader.loadBytes(exifLoader.thumbnailByteArray);
                        const content:UIComponent = new UIComponent();
                        content.width = 160;
                        content.height = 120;
                        content.addChild(loader);
                        map.infoWindow.label =
                            latRef + " " + latArr[0] + "\xB0 " + latArr[1] + "' " +
                            lonRef + " " + lonArr[0] + "\xB0 " + lonArr[1] + "'";
                        map.infoWindow.content = content;
                        map.infoWindow.show(mapPoint);
                        map.centerAt(mapPoint);
                        map.scale = 1000000.0;
                    }
                }
                else
                {
                    Alert.show( "No GPS Info", "Loader");
                }
            }

            private function errorHandler(event:ErrorEvent):void
            {
                Alert.show(event.text, "Error");
            }

            private function enterHandler(event:Event):void
            {
                const textInput:TextInput = TextInput(event.target);
                exifLoader.loadJPEG(new URLRequest(textInput.text));
            }
        ]]>
    </mx:Script>
    <mx:TraceTarget/>
    <exif:EXIFLoader id="exifLoader" complete="completeHandler(event)" error="errorHandler(event)"/>
    <mx:Panel title="EXIF" width="100%" height="100%">
        <esri:Map id="map" openHandCursorVisible="false" load="loadHandler()">
            <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer"/>
        </esri:Map>
        <mx:ControlBar width="100%">
            <mx:TextInput width="100%" enter="enterHandler(event)" text="assets/sample0.jpg"/>
        </mx:ControlBar>
    </mx:Panel>
</mx:Application>