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 the xml parsing
> 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:
>
> <?xml version="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 = new XML(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 icons are
> > correct, if you're working in a flex project, the local directory is
> > the src folder. So if you put the images under src it would be:
>
> > [Embed(source="./blue-dot.png")] private var
> > blueIcon:Class;
> > [Embed(source="./green-dot.png")] private var
> > greenIcon:Class;
>
> > Jonathan
> > Scribblemaps.com
>
> > On Jan 11, 6:51 pm, Jonathan Wagner <[email protected]> wrote:
>
> > > Hey David,
>
> > > I loaded the demo, the problem is coming from the custom icons:
>
> > > [Embed(source="../../images/blue-dot.png")] private var
> > > blueIcon:Class;
> > > [Embed(source="../../images/green-dot.png")] private var
> > > greenIcon:Class;
>
> > > Since neither of these two images exist, when the code tries to
> > > instantiate the class, it fails. A constructor is a primary function
> > > of a class. To fix the bug use this:
>
> > > public function createMarker(latlng:LatLng, name:String,
> > > address:String, type:String): Marker {
> > > var marker:Marker = new Marker(latlng, new MarkerOptions
> > > ({iconOffset: new Point(-16, -32)}));
> > > var html:String = "<b>" + name + "</b> <br/>" + address;
> > > marker.addEventListener(MapMouseEvent.CLICK, function
> > > (e:MapMouseEvent):void {
> > > marker.openInfoWindow(new InfoWindowOptions
> > > ({contentHTML:html}));
> > > });
> > > return marker;
> > > }
>
> > > Jonathan
> > > Scribblemaps.com
>
> > > On Jan 11, 11:49 am, David Green <[email protected]> wrote:
>
> > > > Group,
>
> > > > I was hoping that I'd be able to figure out the answer to why I'm
> > > > getting errors using the xml parsing demo for google maps for
> > > > flash. Jonathan wrote back and referred me to Pamela's KML Demo but
> > > > I'm not using KML at all..
>
> > > > I'm wondering if anyone has a fix for the error in the xml parsing
> > > > demo or is there another approach I should be using? I can't seem to
> > > > find the answer anywhere on the net.
>
> > > > I'm using Flex 3 and mysql/php to parse the xml
>
> > > > The exact error on the demos are:
>
> > > > TypeError: Error #1007: Instantiation attempted on a non-constructor.
> > > > at XmlParsingDemo/createMarker()
> > > > at XmlParsingDemo/readXml()
> > > > at flash.events::EventDispatcher/dispatchEventFunction()
> > > > at flash.events::EventDispatcher/dispatchEvent()
> > > > at
>
> ...
>
> 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.