2012-05-16 17 views
5

Estoy construyendo un sitio web que utiliza el código de geolocalización, se supone que debe cargar mapCanvas y luego de usuario hacer clic en "Finde Me!" botón obtener su ubicación y establecer un centro de un mapa basado en la ubicación del usuario. Está funcionando bien con Firefox, Chrome, Safari, probado en PC y iPhone regulares, el único dispositivo que no funciona es cualquier teléfono móvil con Android. aquí hay un código:El navegador de Android no funciona con la geolocalización

<script src="http://maps.google.com/maps?file=api&v=3&key=YourKey" 
     type="text/javascript"></script> 
<script type="text/javascript"> 
    //<![CDATA[ 

    var iconBlue = new GIcon(); 
    iconBlue.image = 'http://labs.google.com/ridefinder/images/mm_20_blue.png'; 
    iconBlue.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'; 
    iconBlue.iconSize = new GSize(17, 25); 
    iconBlue.shadowSize = new GSize(1, 1); 
    iconBlue.iconAnchor = new GPoint(6, 20); 
    iconBlue.infoWindowAnchor = new GPoint(5, 1); 

    var iconRed = new GIcon(); 
    iconRed.image = 'http://labs.google.com/ridefinder/images/mm_20_red.png'; 
    iconRed.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'; 
    iconRed.iconSize = new GSize(17, 25); 
    iconRed.shadowSize = new GSize(1, 1); 
    iconRed.iconAnchor = new GPoint(6, 20); 
    iconRed.infoWindowAnchor = new GPoint(5, 1); 

    var customIcons = []; 
    customIcons["restaurant"] = iconBlue; 
    customIcons["bar"] = iconRed; 

    function load() { 
     if (GBrowserIsCompatible()) { 
     var map = new GMap2(document.getElementById("map_canvas")); 
     map.setCenter(new GLatLng(50.061795,19.936924), 16); 

     // Change this depending on the name of your PHP file 
     GDownloadUrl("Your_xml.php", function(data) { 
      var xml = GXml.parse(data); 
      var markers = xml.documentElement.getElementsByTagName("marker"); 
      for (var i = 0; i < markers.length; i++) { 
      var name = markers[i].getAttribute("name"); 
      var address = markers[i].getAttribute("address"); 
      var type = markers[i].getAttribute("type"); 
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), 
            parseFloat(markers[i].getAttribute("lng"))); 
      var marker = createMarker(point, name, address, type); 
      map.addOverlay(marker); 
      } 
     }); 
     } 
    } 

    function createMarker(point, name, address, type) { 
     var marker = new GMarker(point, customIcons[type]); 
     var html = "<b>" + name + "</b> <br/>" + address; 
     GEvent.addListener(marker, 'click', function() { 
     marker.openInfoWindowHtml(html); 
     }); 
     return marker; 
    } 
    //]]> 


function findLoc(){ 
if (!navigator.geolocation) { 
alert('Sorry, your browser does not support Geo Services'); 
} 
else { 
// Get the current location  
navigator.geolocation.getCurrentPosition(showMap); 
} 
} 
function showMap(position){ 
var lat = position.coords.latitude; 
var lon = position.coords.longitude; 
var myPoint = new GLatLng(lat, lon); 
var map = new GMap2(document.getElementById("map_canvas")); 
map.setCenter(myPoint, 15); 
GDownloadUrl("Your_xml.php", function(data) { 
      var xml = GXml.parse(data); 
      var markers = xml.documentElement.getElementsByTagName("marker"); 
      for (var i = 0; i < markers.length; i++) { 
      var name = markers[i].getAttribute("name"); 
      var address = markers[i].getAttribute("address"); 
      var type = markers[i].getAttribute("type"); 
      var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), 
            parseFloat(markers[i].getAttribute("lng"))); 
      var marker = createMarker(point, name, address, type); 
      map.addOverlay(marker); 

} 
     }); 

function createMarker(point, name, address, type) { 
     var marker = new GMarker(point, customIcons[type]); 
     var html = "<b>" + name + "</b> <br/>" + address; 
     GEvent.addListener(marker, 'click', function() { 
     marker.openInfoWindowHtml(html); 
     }); 
     return marker; 
    } 
} 

No he encontrado ninguna solución para hacerlo funcionar. PS No hay errores o declaraciones que den alguna pista por lo que es más comprensible. El dispositivo tiene habilitado GPS. súplicas ayuda He estado tratando de resolverlo durante 2 semanas

Respuesta

3

Me temo que tienes una depuración anticuada y arduo frente a ti. Mi enfoque sería agregar salida visible en varios puntos importantes del código (justo antes y después de llamar al getCurrentPosition, y al comienzo de showMap, por ejemplo) y reducir desde allí justo donde se produce la falla. Una vez que sepa lo que está fallando, probablemente pueda hacerse una idea de por qué, pero hasta que sepa que está agitando la mano en la oscuridad.

(He trabajado en una aplicación web móvil basada en geolocalización que apoyó Android, por lo que en caso de que necesite consuelo, no hay nada inherentemente imposible acerca de su situación.)

+0

THX de respuesta que hemos añadido una alerta ('¡Éxito!') Justo antes de navigator.geolocation.getCurrentPosition (showMap); ¡y me muestra mi éxito! eso significa que esta función findLoc se activó, algo está mal con la función showMap pero no sé qué –

+0

@TomLiland: Derecha. Ahora continúe con eso hasta que descubra qué parte del código realmente está fallando. En primer lugar, una alerta al comienzo de 'showMap' le dice si realmente se está llamando a esa función. Y así; el principio general debería estar claro por ahora. – chaos

+0

Parece que hay algo mal con navigator.geolocation.getCurrentPosition (showMap) esto no se ha llamado después de que se haya iniciado la función findLock. Puse una alerta justo después del navegador y no apareció el mensaje. En el iPhone recibí todo el mensaje. Extraña cosa pequeña :( –

Cuestiones relacionadas