Comunidad de diseño web y desarrollo en internet online

Ayuda con Flex Mobile y GoogleMaps

Citar            
MensajeEscrito el 09 Jun 2011 09:48 pm
Hola, presentarme antes de nada. Soy estudiante de un ciclo superior de multimedia y para mi proyecto final estoy desarrollando una aplicación para móviles basada en GoogleMaps mediante Flex Mobile.

Siguiendo los tutoriales de google, he podido crear en un fichero mxml mediante ActionScript el mapa. El problema viene a la hora de pasear un archivo XML con las ubicaciones que deseo mostrar en el mapa.

El código que tengo hasta ahora es el siguiente:

Código :

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView" xmlns:mx="library://ns.adobe.com/flex/mx">
   <fx:Declarations>
      <!-- Place non-visual elements (e.g., services, value objects) here -->
   </fx:Declarations>
   <s:Panel title="Xml Parsing with Google Maps Demo" width="100%" height="100%">
      <mx:UIComponent id="mapHolder"
                  initialize="onHolderCreated(event);"
                  resize="onHolderResized(event)"
                  width="100%" height="100%"/>
   </s:Panel>
   <fx: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.MapType;
         import com.google.maps.MapOptions;
         import com.google.maps.MapMouseEvent;
         import com.google.maps.InfoWindowOptions;
         import com.google.maps.overlays.Marker;
         import com.google.maps.overlays.MarkerOptions;
         import com.google.maps.controls.ZoomControl;
         
         private var map:Map;
         
         private var blueIcon:Class;
         private var greenIcon:Class;
         private var customIcons:Object = 
            { "restaurant": blueIcon, 
               "bar": greenIcon
            };
         
         public function onHolderCreated(event:Event):void {
            map = new Map();
            map.key = "ABQIAAAA9iNYq39n_ERvjVXy2sp8hxTWoPrV-LkcatU6FDhi4genfkaxbhRDJBAxj7heO6UlDNKId6WnDajf0w";
            map.addEventListener(MapEvent.MAP_READY, onMapReady);
            mapHolder.addChild(map);
         }
         
         public function onHolderResized(event:Event):void {
            map.setSize(new Point(mapHolder.width, mapHolder.height));
         }
         
         private function onMapReady(event:Event):void {
            map.enableScrollWheelZoom();
            map.enableContinuousZoom();
            map.setCenter(new LatLng(47.614495, -122.341861), 13);
            map.addControl(new ZoomControl());
            getXml();
         }
         
         private function onMapPreinitialize(event:Event):void {
            var myMapOptions:MapOptions = new MapOptions();
            myMapOptions.zoom = 14;
            myMapOptions.center = new LatLng(40.736072,-73.992062);
            myMapOptions.mapType = MapType.NORMAL_MAP_TYPE;
            this.map.setInitOptions(myMapOptions);
         }
         public function getXml():void {
            var xmlString:URLRequest = new URLRequest("http://localhost/php_crearXML.php");
            var xmlLoader:URLLoader = new URLLoader(xmlString);
            xmlLoader.addEventListener("complete", readXml);
         }
         public function readXml(event:Event):void {
            var markersXML:XML = new XML(event.target.data);
            var markers:XMLList = markersXML..marker;
            for (var i:Number = 0; i < markers.length(); i++) {
               var marker:XML = markers[i];
               var name:String = marker.@nombre;
               var address:String = marker.@direccion;
               var type:String = marker.@tipo;
               var latlng:LatLng = new LatLng(marker.@lat, marker.@lng);
            (A)   var marker = createMarker(latlng, name, address, type);
            (B)   map.addOverlay(marker);
            }
         } 
         public function createMarker(latlng:LatLng, name:String, address:String, type:String): Marker {
            var marker:Marker = new Marker(latlng, new MarkerOptions({icon: new customIcons[type], 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;
         }
      ]]>
   </fx:Script>
</s:View>


Cuando intento compilar esto, me da dos errores (los he marcado unas lineas mas arriba como (A) y (B) ) que no he sabido solucionar ni he encontrado nada que me sirva de ayuda. Los errores son:

(A) Implicit coercion of a value of type com.google.maps.overlays:Marker to an unrelated type XML. Mapa.mxml
(B) Implicit coercion of a value of type XML to an unrelated type com.google.maps.interfaces:IOverlay.


Alguien tiene idea de que estoy haciendo mal o si me he olvidado de algo? Gracias y un saludo.

Por eljeta

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 Jun 2011 01:28 pm
Estás declarando dos veces la misma variable con distintos tipos en la misma función readXml

Código ActionScript :

var marker:XML = markers[i];
(...)
var marker = createMarker(latlng, name, address, type);


Cámbiale el nombre a alguna de las dos

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Jun 2011 01:39 pm
... shame on me T-T llevo tantas horas dándole vueltas que no me había fijado en eso. Gracias :D

Ahora me da otros errores con el fichero PHP pero a ver si encuentro que es lo que falla, si vuelvo a estar en la situación de estar apunto de tirar el PC por la ventana pedrié ayuda. Muchas gracias.

Por eljeta

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 Jun 2011 05:26 pm
Bien bien, esto ya marcha, la aplicación ya me muestra correctamente el mapa y me lee el archivo xml externo para cargar los marcadores, muchas gracias por la ayuda.

Ahora otra duda :D ... alguien sabe de algún tutorial o alguna página donde me pueda informar sobre como obtener mi propia localización mediante GPS y pasársela a mi aplicación? Necesito crear un evento cuando el usuario esté cerca de una localización específica.

Alguna sugerencia?

Por eljeta

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 Jun 2011 05:36 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Jun 2011 06:11 pm
Gracias por la info, a ver si entre hoy y mañana puedo ver como acoplo eso con Flex :D

Por eljeta

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Feb 2012 06:00 pm
¿Has probado de compilarlo en un iPhone o iPad?
Lo digo porque llevo un tiempo siguiendo este hilo
http://code.google.com/p/gmaps-api-issues/issues/detail?id=2750
y a mi me funcionan todas las App con GOOGLEMAPS en local, pero cuando testeo en IOS 4 y 5 petan todas.

Mirad los comentarios 63 y 68.
Yo lo he modificado todo para Flex 4.6 y la versión de la api Map_flex_1_20.sec pero no funciona.

Si a ti te ha funcionado o si alguien lee este post y tiene la solución, que no se corte y nos ayude.

Salu2

RK

Por redkram

17 de clabLevel



Genero:Masculino  

ASP,SQL,CSS,JQUERY y más

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.