Hi Fernando-

You have two asynchronous actions going on in your code:
- Loading the XML (contactResultHandler)
- Loading the Maps API (onMapReady)

I'm guessing that right now, they are sometimes finishing in different
orders. I would recommend either:
1) Wait until onMapReady to load the XML data, and then create the
markers after the XML data loads
2) Wait until contactResultHandler to create a Map object and markers.

#2 is probably easier.

- pamela

On Sat, Apr 25, 2009 at 1:46 AM, fernando <[email protected]> wrote:
>
> Hi Pamela and people
>
> Thanks by your response. Your prevoius tip is ok and my progran, now,
> run. I have a  second problem with the same code. When I compile and
> run the program i see  a error in the initialization, the message
> is :
>
> TypeError: Error #1009: No se puede acceder a una propiedad o a un
> método de  una referencia a un objeto nulo.
>  at geographicDistribution/onMapReady()[C:\Users\bordi\Documents\Flex
> Builder 3\mi_temperaturas\src\geographicDistribution.mxml:121]
>  at <anonymous>()
>  at flash.events::EventDispatcher/dispatchEventFunction()
>  at flash.events::EventDispatcher/dispatchEvent()
>  at
> mx.core::UIComponent/dispatchEvent()[C:\autobuild\3.2.0\frameworks
> \projects\framework\src\mx\co\UIComponent.as:9298]
>  at com.google.maps.wrappers::BaseEventDispatcher/dispatchEvent()
>  at com.google.maps.wrappers::EventDispatcherWrapper/dispatchEvent()
>  at com.google.maps.core::MapImpl/configureMap()
>  at com.google.maps.wrappers::IMapWrapper/configureMap()
>  at com.google.maps::Map/onBootstrapInitComplete()
>
> Now, if i press f5 (reload the page)  in the navigator, the
> application run  ok and the error dissapear.
>
>
> This is the complete  code
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application
>        xmlns:mx="http://www.adobe.com/2006/mxml";
>        layout="absolute" creationComplete="dataSeting.send(); onInitialize
> ();"
>        viewSourceURL="srcview/index.html"
>        preloader="preload.CustomPreloader"
>    backgroundGradientColors="[#ffffff, #ffffff]">
>
>        <mx:Script>
>                <![CDATA[
>                        import mx.events.ListEvent;
>                        import mx.events.ItemClickEvent;
>                        import mx.controls.advancedDataGridClasses.SortInfo;
>                        import com.google.maps.overlays.MarkerOptions;
>                        import com.google.maps.styles.FillStyle;
>                        import com.google.maps.styles.StrokeStyle;
>                        import com.google.maps.overlays.*;
>                        import mx.controls.dataGridClasses.DataGridColumn;
>                        import com.google.maps.interfaces.IMapType;
>                        import com.google.maps.LatLng;
>                        import com.google.maps.Map;
>                        import com.google.maps.MapEvent;
>                        import com.google.maps.MapType;
>                        import com.google.maps.controls.*;
>
>                    import mx.rpc.events.ResultEvent;
>                        import com.google.maps.InfoWindowOptions;
>            import com.google.maps.MapMouseEvent;
>
>            import mx.controls.LinkButton;
>                        import flash.net.URLRequest;
>                        import flash.net.navigateToURL;
>
>
>                        [Bindable]
>                        private var dataSet:XML;
>
>                        private var map:Map;
>                        private var minTemp : Number = 0;
>                        private var maxTemp : Number = 65;
>                        private var minColor : int = 0xFF0000;
>                        private var maxColor : int = 0x0000FF;
>                        private var minColorObj : Object;
>                        private var maxColorObj : Object;
>                        private var delta : Object;
>
>
>
>
>                private function contactResultHandler(event:ResultEvent):void{
>                            dataSet = event.result as XML;
>                }
>
>                        private function onInitialize() : void
>                        {
>
>                                minColorObj = intToRgb( minColor );
>                                maxColorObj = intToRgb( maxColor );
>                                delta = { r: ( maxColorObj.r - minColorObj.r ),
>                                                  g: ( maxColorObj.g - 
> minColorObj.g ),
>                                                  b: ( maxColorObj.b - 
> minColorObj.b )
>                                                };
>                        }
>
>                        public function getTempColor( temp : Number ) : int
>                        {
>                                var percentage : Number = (temp / maxTemp);
>                                return ( ( maxColorObj.r - percentage * 
> delta.r ) << 16 )
>                       + ((maxColorObj.g - percentage * delta.g ) <<
> 8 )
>                       + ( maxColorObj.b - percentage * delta.b );
>                        }
>
>
>                        /*
>                        Adapted color tween method originally found at:
>                        http://www.darronschall.com/weblog/archives/000251.cfm
>                        */
>                        public static function intToRgb( color:int ):Object
>                    {
>                        var r:int = ( color & 0xFF0000 ) >> 16;
>                        var g:int = ( color & 0x00FF00 ) >> 8;
>                        var b:int = color & 0x0000FF;
>                        return {r:r, g:g, b:b};
>                    }
>
>                    public function colorLabelFunction( value : *, column :
> DataGridColumn ) : String
>                    {
>                        return getTempColor( parseFloat( 
> [email protected]
> () ) ).toString(16);
>                    }
>
>
>                        public function onContinerInitialize( event:Event 
> ):void
>                        {
>                            map = new Map();
>                            map.key = "PUT API KEY HERE";
>                            map.addEventListener( MapEvent.MAP_READY, 
> onMapReady );
>
>                            //control de zoom
>                                map.addControl(new ZoomControl());
>                                //control de posicion
>                                map.addControl(new PositionControl());
>                                //selector de tipo de mapa
>                                map.addControl(new MapTypeControl());
>
>                            mapContainer.addChild( map );
>
>                        }
>
>                        public function onContainerResize( event:Event ):void
>                        {
>                            map.setSize( new Point( mapContainer.width,
> mapContainer.height ) );
>                        }
>
>                        private function onMapReady( event:Event ):void
>                        {
>                            map.enableScrollWheelZoom();
>                            map.enableContinuousZoom();
>                            map.setCenter(new LatLng(-33.133, -64.35), 7,
> MapType.HYBRID_MAP_TYPE );
>
>
>                            for each ( var data : XML in dataSet.data )
>                            {
>                                var latlng:LatLng = new LatLng( parseFloat( 
> da...@lat ),
> parseFloat( da...@lon ) );
>                                var markerOptions : MarkerOptions = new 
> MarkerOptions({
>                                        strokeStyle: new StrokeStyle({color: 
> 0x000000}),
>                                        fillStyle: new FillStyle({color: 
> getTempColor( parseFloat
> ( [email protected]() ) ), alpha: 0.8}),
>                                        radius: 12,
>                                        hasShadow: true
>                                      })
>                                        markerOptions.tooltip = 
> [email protected]() + ":    " +
> [email protected]() + " F";
>
>                                var marker : Marker = new Marker( latlng, 
> markerOptions );
>
>                                        // se define contenido del marcador
>                                        var mivariable:String = da...@location;
>                                        var html:String = "<b><font 
> color='#8B69AE'>Hola</font></b><br/
>><a href='http://e-seminario.net/cms' target='_blank'><font
> color='#EC2D79'><u>"+"variable por ej "+"</u></font></a><br/><br/><br/
>><br/><br/><br/><br/><br/><br/>";
>
>                     map.addOverlay(createMarker(latlng, html));
>
>                            }
>
>                                // Agregar enlace a GeoINTA sobre el mapa
>                                        var clickMore:LinkButton = new 
> LinkButton();
>                                        clickMore.percentWidth = 18;
>                                        clickMore.label = "Visitar GeoINTA";
>                                        
> clickMore.addEventListener(MouseEvent.CLICK, function
> (e:MouseEvent):void {
>                                                var request:URLRequest = new 
> URLRequest("http://
> geointa.inta.gob.ar");
>                                                navigateToURL(request, 
> "_blank");
>                                                 });
>                                        addChild(clickMore);
>
>
>
>                        }
>
>                  //Crea marcador
>                  private function createMarker(latlng:LatLng, 
> html:String):Marker {
>                                var marker:Marker = new Marker(latlng);
>                                marker.addEventListener(MapMouseEvent.CLICK, 
> function
> (e:MapMouseEvent):void {
>                                var myTitle:String = "<img 
> src='http://www.unlu.edu.ar/
> imagenes/img-infouniversiades3.png' width='130' height='79' ></a>";
>                                var myContent:String = html;
>                                map.openInfoWindow(latlng, new 
> InfoWindowOptions({titleHTML:
> myTitle,
>                                        contentHTML: myContent, width:300, 
> drawDefaultFrame:true}));
>                                });
>                                return marker;
>                }
>
>
>                        private function sortNumeric( obj1 : *, obj2 : * ) : 
> int
>                        {
>                                var val1 : Number = parseFloat( 
> [email protected]() );
>                                var val2 : Number = parseFloat( 
> [email protected]() );
>
>                                if ( val1 > val2 )
>                                        return -1;
>                                if ( val1 < val2 )
>                                        return 1;
>                                return 0;
>
>                        }
>
>                        private function onGridItemClick( event : ListEvent ) 
> : void
>                        {
>                                var data : XML = event.itemRenderer.data as 
> XML;
>                                if ( data )
>                                        map.setCenter( new LatLng( parseFloat( 
> da...@lat ), parseFloat
> ( da...@lon ) ) );
>                        }
>                ]]>
>        </mx:Script>
>
>
>
>    <!-- Cargo datos de un archivo XML externo y remoto-->
>    <mx:HTTPService id="dataSeting" url="http://127.0.0.1:4000/
> temperaturas.xml"
>                    result="contactResultHandler(event)"
> resultFormat="e4x"/>
>
>
>
>
>        <!-- Esta marca es la encargada de definir dos áreas horizontalas en
> apantalla-->
>        <mx:VDividedBox width="100%" height="100%">
>
>                <!-- UIComponent es el primer contenedor de la pantalla donde 
> se
> insertará el mapa -->
>                <mx:UIComponent id="mapContainer"
>                initialize="onContinerInitialize(event);"
>                resize="onContainerResize(event)"
>                width="100%" height="100%"/>
>
>
>                <!-- Defino que ne la parte inferior se inserta una estructura 
> de
> tabs -->
>            <mx:TabNavigator width="100%" height="200">
>
>                    <!-- Defino el primer tab -->
>                    <mx:Canvas width="100%" height="100%" label="Listado de
> Ciudades">
>                                <mx:DataGrid dataProvider="{ dataSet.data }" 
> width="100%"
> height="100%" itemClick="onGridItemClick(event)">
>                                        <mx:columns>
>                                                <mx:DataGridColumn 
> headerText="Location" dataField="@location" /
>>
>                                                <mx:DataGridColumn 
> headerText="Avg Jan Temp"
> dataField="@janTemp" sortCompareFunction="sortNumeric" />
>                                                <mx:DataGridColumn 
> headerText="Latitude" dataField="@lat" />
>                                                <mx:DataGridColumn 
> headerText="Longitude" dataField="@lon" />
>                                                <mx:DataGridColumn 
> headerText="Color"
> labelFunction="colorLabelFunction"
> itemRenderer="components.ColorRenderer" />
>                                        </mx:columns>
>                                </mx:DataGrid>
>                    </mx:Canvas>
>
>                        <!-- Defino el segundo tab -->
>                <mx:Canvas width="100%" height="100%" label="Acerca de...">
>
>                        <mx:TextArea editable="false" width="100%" 
> height="100%">
>                    <!-- Inserto texto HTML en un tab -->
>                                <mx:htmlText>
>                                        <![CDATA[<b>Qué es esto?</b>
> <p>Esto es un ejemplo acerca de como trabajar on los elementos
> gráficos relacionados con mapas, bla, bla, bla...</p>
> <p>Se puede insertar html sin ningún problema, así como enlaces a
> otras partes, por ejemplo a mi <a href="http://
> ferbor.blogspot.com">blog</a> </p>
> <p>lameb simbut te comiyum denber acicatum etnis lasertis ah va codex
> sei tutus lameb simbut te comiyum denber acicatum etnis lasertis ah va
> codex sei tutus alba salga contoda totre lader mullkait solle fiud
> fresdtiok alo jujuan sai toga onga mocha alga canda salo tuitui remo
> hkaiko sango juniter masker lanmarker duncher suimer sastum gairi
> jukaste acalite chengo lameb simbut te comiyum denber acicatum etnis
> lasertis ah va codex sei tutus lameb simbut te comiyum denber acicatum
> etnis lasertis ah va codex sei tutus lameb simbut te comiyum denber
> acicatum etnis lasertis ah va codex sei tutus lameb simbut te comiyum
> denber acicatum etnis lasertis ah va codex sei tutus lameb simbut te
> comiyum denber acicatum etnis lasertis ah va codex sei tutus lameb
> simbut te comiyum denber acicatum etnis lasertis ah va codex sei tutus
> lameb simbut te comiyum denber acicatum etnis lasertis ah va codex sei
> tutus lameb simbut te comiyum denber acicatum etnis lasertis ah va
> codex sei tutus lameb simbut te comiyum denber acicatum etnis lasertis
> ah va codex sei tutus</p>
>                                        ]]>
>                                </mx:htmlText>
>                        </mx:TextArea>
>
>                </mx:Canvas>
>            </mx:TabNavigator>
>
>        </mx:VDividedBox>
>
>
>
> </mx:Application>
>
>
> Thanks
>
> Fernando Bordignon
>
>
>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Maps API For Flash" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-maps-api-for-flash?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to