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.