2012-05-16 3 views
5

Ich baue eine Website, die Geolocation-Code verwenden, Es wird angenommen, dass mapCanvas und nach dem Klicken auf "Finde mich!" Klicken Sie auf die Schaltfläche, um den Standort zu bestimmen und die Mitte einer Karte basierend auf dem Standort des Benutzers festzulegen. Es funktioniert gut mit Firefox, Chrome, Safari, getestet auf normalen PC und iPhone das einzige Gerät funktioniert nicht mit jedem Handy mit Android. Hier ist ein Code:Android-Browser funktioniert nicht mit Geolocation

<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; 
    } 
} 

Ich konnte keine Lösung finden, damit es funktioniert. PS Es gibt keine Fehler oder Anweisungen, die einen Hinweis geben, der es verständlicher macht. Gerät wurde mit GPS aktiviert. pleases help Ich habe versucht, es für 2 Wochen herauszufinden

Antwort

3

Ich fürchte, Sie haben nur eine mühsame altmodische Debug vor Ihnen. Mein Ansatz wäre, an verschiedenen wichtigen Punkten im Code (kurz bevor und nachdem getCurrentPosition aufgerufen wird und am Anfang von showMap zum Beispiel) eine sichtbare Ausgabe hinzuzufügen und von dort aus genau dort einzugrenzen, wo der Fehler auftritt. Sobald Sie wissen, was scheitert, können Sie wahrscheinlich eine Idee von warum entwickeln, aber bis Sie wissen, dass Sie im Dunkeln herumfuchteln.

(Ich habe auf einer Geolocation-basierten mobilen Webapp gearbeitet, die Android unterstützt, so dass im Fall, dass Sie jede Beruhigung brauchen, gibt es nichts von Natur aus unmöglich, über Ihre Situation.)

+0

thx für Antwort habe ich eine Benachrichtigung hinzugefügt ('Erfolg!') Kurz vor navigator.geolocation.getCurrentPosition (showMap); und es zeigt mir meinen Erfolg! das bedeutet, dass diese Funktion findLoc ausgelöst wurde, ist etwas mit ShowMap Funktion falsch, aber ich weiß nicht, was –

+0

@TomLiland: Richtig. Jetzt gehst du damit weiter, bis du herausfindest, welcher Teil des Codes tatsächlich fehlschlägt. Zuerst informiert Sie eine Warnung am Anfang von 'showMap', ob diese Funktion tatsächlich aufgerufen wird. Und so weiter; das allgemeine Prinzip sollte jetzt klar sein. – chaos

+0

Es scheint, dass etwas mit navigator.geolocation.getCurrentPosition (showMap) nicht in Ordnung ist, das wurde nicht aufgerufen, nachdem die Funktion findLock gestartet wurde. Ich habe direkt nach dem Navigator eine Warnung ausgegeben und die Nachricht wurde nicht angezeigt. Auf dem iPhone habe ich die ganze Nachricht bekommen. Seltsames kleines Ding :( –