2012-05-12 5 views
8

Ich versuche, einen Benutzer und legen Sie die Karte auf dieser Position mit Faltblatt zu finden:Wie finde ich den Benutzer mit der Broschüre?

<script> 
    var map; 

    function initMap(){ 
     map = new L.Map('map',{zoomControl : false}); 
     var osmUrl = 'http://{s}.tile.openstreetmap.org/mapnik_tiles/{z}/{x}/{y}.png', 
      osmAttribution = 'Map data &copy; 2012 OpenStreetMap contributors', 
      osm = new L.TileLayer(osmUrl, {maxZoom: 18, attribution: osmAttribution}); 
     map.setView(new L.LatLng(51.930156,7.189230), 7).addLayer(osm); 
    } 

    function locateUser(){ 
     map.locate({setView : true}); 
    } 
</script> 

On führen Sie den Browser um Erlaubnis fragen, aber dann passiert nichts? Was ist falsch an meinem Code?

+0

Wir wissen nicht, was Flugblatt ist, oder irgendetwas über das, was Sie tun. Diese eine Zeile Code klingt gut, aber Sie müssen uns wirklich ein bisschen mehr geben. Vielleicht ein Link zu Ihrem Code, sowie Informationen darüber, was Sie bisher versucht haben. Gehen Sie auch und akzeptieren Sie einige Antworten - Sie haben Fragen von vor 9 Monaten, wo Sie die Antwort nicht akzeptiert haben! –

+0

Ich habe die gesamte Quelle in meinem ersten Beitrag bearbeiten. Prospekt ist eine Karte lib. Details hier: http://leaflet.cloudmade.com/ – fillibuster

+0

Könnten Sie bitte Ihren vollständigen Code einfügen? Haben Sie alle erforderlichen Prospektdateien aufgenommen? Wie erkennen Sie die Position des Benutzers? Werden Ihre Funktionen ausgeführt? –

Antwort

8

Sie haben ein Problem mit dem Umfang Ihrer Map-Variable. Ich habe ein Beispiel gepostet, das Ihren Code hier behebt: http://jsfiddle.net/XwbsU/3/

Sie sollten das Browser-Geolocation-Popup erhalten, wenn Sie auf "Find me!" Klicken.

Hoffentlich hilft das Ihnen.

9

Hier ist ein kurzer Hack. Ich empfehle dieses Plugin https://github.com/domoritz/leaflet-locatecontrol

var loadMap = function (id) { 
    var HELSINKI = [60.1708, 24.9375]; 
    var map = L.map(id); 
    var tile_url = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png'; 
    var layer = L.tileLayer(tile_url, { 
     attribution: 'OSM' 
    }); 
    map.addLayer(layer); 
    map.setView(HELSINKI, 19); 

    map.locate({setView: true, watch: true}) /* This will return map so you can do chaining */ 
     .on('locationfound', function(e){ 
      var marker = L.marker([e.latitude, e.longitude]).bindPopup('Your are here :)'); 
      var circle = L.circle([e.latitude, e.longitude], e.accuracy/2, { 
       weight: 1, 
       color: 'blue', 
       fillColor: '#cacaca', 
       fillOpacity: 0.2 
      }); 
      map.addLayer(marker); 
      map.addLayer(circle); 
     }) 
     .on('locationerror', function(e){ 
      console.log(e); 
      alert("Location access denied."); 
     }); 
}; 

loadMap('map'); 
+0

Weißt du, wie ich hier ein paar Optionen hinzufügen kann, insbesondere: locateOptions: {maxZoom: 15} – user127181

+0

Hier ist das Dokument http://leafletjs.com/reference.html#map-locate-options Sie würden es einfach hinzufügen wie map.locate ({maxZoom: 15, ...}) –