Pamela is right, you can declare objects that way (learned something
new).

I loaded up the project with the images and I am pretty sure I
actually found the problem. The problem is that blank strings were
getting passed to the type parameter of createMarker, this was causing
the icon to be null, what I did was just made it skip any marker that
did not have a type declared.

public function readXml(event:Event):void{
                var markersXML:XML = new XML(event.target.data);

                var markers:XMLList = markersXML..marker;
                var markersCount:int = markers.length();
                var i:Number;
                for (i=0; i < markersCount; i++) {
                        var markerXml:XML = markers[i];
                        var name:String = markerx...@name;
                        var address:String = markerx...@address;
                        var type:String = markerx...@type;
                        var latlng:LatLng = new LatLng(markerx...@lat, 
markerx...@lng);

                        if(type == "") { continue };
                        var marker:Marker = createMarker(latlng, name, address, 
type);
                        map.addOverlay(marker);
                }
        }

Hopefully this finally fixes your problem.

Jonathan
Scribblemaps.com

On Jan 12, 7:43 am, "pamela (Google Employee)" <[email protected]>
wrote:
> Hmm. I'm testing this demo in my Flex now, and it is working with the
> properties in quotes. (I do see the AS3 object reference shows without
> quotes). Is there a reason it would work for me?
>
> That code looks like it should work with the customIcon property
> commented back in, if the images are actually there.
>
> You might find it easier to use something like pastebin.com to paste
> code, if you can't put it with view-source enabled on a public server,
> by the way.
>
> - pamela
>
>
>
> On Tue, Jan 12, 2010 at 8:51 PM, Jonathan Wagner <[email protected]> 
> wrote:
> > wow, I just figured out the problem, it's the way they are declaring
> > the object
>
> > private var customIcons:Object = { "restaurant": blueIcon,  "bar":
> > greenIcon}
>
> > it SHOULD be
> > private var customIcons:Object = { restaurant: blueIcon,  bar:
> > greenIcon}
>
> > When declaring properties of an object you don't use quotes, sorry I
> > wish I would of caught that earlier.
>
> > Jonathan
>
> > On Jan 11, 10:19 pm, David Green <[email protected]> wrote:
> >> Jonathan,
>
> >> That's exactly what I did.  I have the references correct in embed
> >> statement because in Flex it throws an error when the path is
> >> incorrect.  Now the only thing that I see that is different in the
> >> code you sent me is that the customIcon was removed from the new
> >> MarkerOptions.
>
> >> Perhaps you will be able to see something in my code, which I'll paste
> >> below.   I've combined the Store Finder demo and thexmlparsing
> >> demo.. works perfectly except for the customIcons.   I'm pulling the
> >> data from a mysql database I have set up locally.
>
> >> Here is my code:
>
> >> <?xmlversion="1.0" encoding="utf-8"?>
> >> <!--
> >>  Copyright 2008 Google Inc.
> >>  Licensed under the Apache License, Version 2.0:
> >>    http://www.apache.org/licenses/LICENSE-2.0
> >> -->
> >> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> >> xmlns:maps="com.google.maps.*" layout="absolute" width="100%"
> >> height="100%" viewSourceURL="srcview/index.html"
> >> xmlns:comp="components.*">
> >>   <mx:Panel title="Google Maps API for Flash Demo" width="100%"
> >> height="100%">
> >>   <mx:HDividedBox width="100%" height="100%">
> >>  <mx:VBox width="100%" height="100%">
> >>   <mx:HBox>
> >>       <mx:Label
> >>      text="Address: " width="70"/>
> >>      <mx:TextInput id="address" text="Seattle WA" width="100%" />
> >>   </mx:HBox>
> >>   <mx:HBox>
> >>       <mx:Label
> >>      text="Radius: "
> >>      width="70"/>
> >>    <mx:ComboBox
> >>        id="radius">
> >>      <mx:dataProvider>
> >>       <mx:Array>
> >>        <mx:String>25</mx:String>
> >>        <mx:String>100</mx:String>
> >>        <mx:String>200</mx:String>
> >>       </mx:Array>
> >>      </mx:dataProvider>
> >>    </mx:ComboBox>
> >>   </mx:HBox>
> >>   <mx:Button
> >>      id="submitButton" label="Search Locations"
> >>      click="searchLocations(event);"
> >>   />
> >>   <mx:HRule
> >>       width="100%"
> >>     strokeColor="0xC4CCCC"
> >>     shadowColor="0xEEEEEE"
> >>     strokeWidth="2"
> >>   />
> >>   <mx:DataGrid id="storeLocationsGrid" dataProvider="{storeLocations}"
> >> width="100%" height="100%" sortableColumns="true" itemClick="showStore
> >> (event)">
> >>      <mx:columns>
> >>             <mx:Array>
> >>                 <mx:DataGridColumn dataField="StoreInfo">
> >>                   <mx:itemRenderer>
> >>                     <mx:Component>
> >>                     <mx:Text width="100%" selectable="false"
> >> htmlText="{data.StoreInfo}"/>
> >>                     </mx:Component>
> >>                   </mx:itemRenderer>
> >>                </mx:DataGridColumn>
> >>                 <mx:DataGridColumn dataField="Distance" width="70"/>
> >>             </mx:Array>
> >>         </mx:columns>
> >>   </mx:DataGrid>
> >>   </mx:VBox>
> >>    <maps:Map
> >>     id="map"
> >>     key="ABQIAAAA7QUChpcnvnmXxsjC7s1fCxQGj0PqsCtxKvarsoS-
> >> iqLdqZSKfxTd7Xf-2rEc_PC9o8IsJde80Wnj4g"
> >>     mapevent_mapready="onMapReady(event)"
> >>     width="100%" height="100%"/>
> >>   </mx:HDividedBox>
> >>  </mx:Panel>
> >>  <mx:Script>
> >>     <![CDATA[
> >>       import com.google.maps.LatLng;
> >>       import com.google.maps.LatLngBounds;
> >>       import com.google.maps.Map;
> >>       import com.google.maps.MapEvent;
> >>       import com.google.maps.MapMouseEvent;
> >>       import com.google.maps.MapType;
> >>       import com.google.maps.overlays.Marker;
> >>       import com.google.maps.overlays.MarkerOptions;
> >>       import com.google.maps.InfoWindowOptions;
> >>       import com.google.maps.services.ClientGeocoder;
> >>       import com.google.maps.services.GeocodingEvent;
> >>       import mx.controls.Alert;
> >>       import mx.collections.ArrayCollection;
> >>       import com.google.maps.controls.ZoomControl;
>
> >>       [Bindable] private var storeLocations:ArrayCollection = new
> >> ArrayCollection();
>
> >>       private function onMapReady(event:Event):void {
> >>         map.enableScrollWheelZoom();
> >>         map.enableContinuousZoom();
> >>         map.setCenter(new LatLng(40, -100), 4);
> >>         map.addControl(new ZoomControl());
> >>       }
>
> >>       [Embed(source="../assets/images/blue-dot.png")] private var
> >> blueIcon:Class;
>
> >>       [Embed(source="../assets/images/green-dot.png")] private var
> >> greenIcon:Class;
>
> >>       [Bindable]
> >>       private var customIcons:Object =
> >>         {"restaurant": blueIcon, "bar": greenIcon};
>
> >>       private function searchLocations(event:Event):void {
> >>         var geocoder:ClientGeocoder = new ClientGeocoder();
> >>         geocoder.addEventListener(
> >>           GeocodingEvent.GEOCODING_SUCCESS,
> >>           function(event:GeocodingEvent):void {
> >>           var placemarks:Array = event.response.placemarks;
> >>           if (placemarks.length > 0) {
> >>             searchLocationsNear(placemarks[0].point);
> >>           }
> >>         });
> >>         geocoder.addEventListener(
> >>           GeocodingEvent.GEOCODING_FAILURE,
> >>           function(event:GeocodingEvent):void {
> >>             Alert.show("Geocoding failed");
> >>           });
> >>         geocoder.geocode(address.text);
> >>       }
>
> >>     public function searchLocationsNear(center:LatLng):void {
> >>      // var searchUrl:String = 'http://imagine-it.org/storelocator/
> >> phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng()
> >> + '&radius=' + radius.text;
> >>      var searchUrl:String = 'http://localhost/mapProject/connections/
> >> genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius='
> >> + radius.text;
> >>      var xmlString:URLRequest = new URLRequest(searchUrl);
> >>      var xmlLoader:URLLoader = new URLLoader(xmlString);
> >>      xmlLoader.addEventListener("complete", parseLocationsXml);
> >>     }
>
> >>     public function parseLocationsXml(event:Event):void{
> >>         map.clearOverlays();
> >>         storeLocations.removeAll();
>
> >>         var markersXML:XML= newXML(event.target.data);
> >>         var markers:XMLList = markersXML..marker;
> >>         var markersCount:int = markers.length();
> >>         if (markersCount == 0) {
> >>          map.setCenter(new LatLng(40, -100), 4);
> >>          Alert.show("No stores found. Try a different address");
> >>          return;
> >>        }
> >>        var bounds:LatLngBounds = new LatLngBounds();
> >>         for (var i:Number = 0; i < markersCount; i++) {
> >>             var markerXml:XML= markers[i];
> >>             var name:String = markerx...@name;
> >>             var address:String = markerx...@address;
> >>             var distance:Number = new Number(markerx...@distance);
> >>             var type:String = markerx...@type;
> >>             var latlng:LatLng = new LatLng(markerx...@lat,
> >> markerx...@lng);
> >>             var storeInfo:String = "<b>" + name + "</b>\n<br/>" +
> >> address;
> >>             var marker:Marker = createMarker(latlng, name, storeInfo,
> >> type);
> >>             storeLocations.addItem({StoreInfo: storeInfo, Distance:
> >> distance.toFixed(2), Marker: marker});
> >>             bounds.extend(latlng);
> >>             // customIcons[type].markers.push(marker);
> >>             map.addOverlay(marker);
> >>         }
> >>         storeLocations.refresh();
> >>         map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel
> >> (bounds));
> >>     }
>
> >>      public function createMarker(latlng:LatLng, name:String,
> >> storeInfo:String, type:String): Marker {
> >>                         var marker:Marker = new Marker(latlng, new 
> >> MarkerOptions
> >> ({iconOffset: new Point(-16, -32)}));
> >>                        // var marker:Marker = new Marker(latlng, new 
> >> MarkerOptions
> >> ({icon: new customIcons[type], iconOffset: new Point(-16, -32)}));
> >>                        //var storeInfo:String = "<b>" + name + "</b> 
> >> <br/>" +
> >> address;
> >>                         marker.addEventListener(MapMouseEvent.CLICK, 
> >> function
> >> (e:MapMouseEvent):void {
> >>                           marker.openInfoWindow(new InfoWindowOptions
> >> ({contentHTML:storeInfo}));
> >>                         });
> >>                         return marker;
> >>                      }
>
> >>      public function showStore(event:Event):void {
> >>          var marker:Marker = storeLocationsGrid.selectedItem.Marker;
> >>            marker.dispatchEvent(new MapMouseEvent(MapMouseEvent.CLICK,
> >> marker, marker.getLatLng(), true, false));
> >>      }
>
> >>     ]]>
> >>   </mx:Script>
> >> </mx:Application>
>
> >> On Jan 11, 6:25 pm, Jonathan Wagner <[email protected]> wrote:
>
> >> > Hey David,
>
> >> > you could just make sure the embed sources to the custom
>
> ...
>
> read more »
-- 
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