1

Je charge ma carte avec les marqueurs tirés d'un FusionTable. J'essaie maintenant de centrer la carte autour de l'emplacement des utilisateurs s'ils acceptent la demande. Au chargement de la page, le navigateur demande à accéder à ma position, et je suis d'accord, mais la carte ne se concentre pas sur ma position. J'ai aussi une fonction de recherche d'adresse, mais je ne pense pas que cela affecterait les choses.Google Map demande l'emplacement correct, mais ne centre pas la carte

Mon code:

function initMap() { 

    var coords = new google.maps.MVCObject(); 
    coords.set('latlng', new google.maps.LatLng(51.525, -0.1)); 

    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(success); 
    } 

    //set new value for coords 
    function success(position) { 
    coords.set('latlng', 
     new google.maps.LatLng(position.coords.latitude, 
      position.coords.longitude)); 
      } 

    var defaultZoom = 13; 
    var tableId = '#############'; 
    var locationColumn = 'Location'; 
    var geocoder = new google.maps.Geocoder(); 
    var styles = [ 
    ... 
]; 

    var map = new google.maps.Map(document.getElementById('map'), { 
     center: coords.get('latlng'), 
     zoom: defaultZoom, 
     styles: styles 
    }); 


    var layer = new google.maps.FusionTablesLayer({ 
     query: { 
     select: locationColumn, 
     from: tableId 
     }, 
     options: { 
     styleId: 2, 
     templateId: 2 
     }, 
     map: map 
    }); 

    var zoomToAddress = function() { 
     var address = document.getElementById('address').value; 
     geocoder.geocode({ 
     address: address 
     }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      map.setCenter(results[0].geometry.location); 
      map.setZoom(16); 

      // OPTIONAL: run spatial query to find results within bounds. 
      var sw = map.getBounds().getSouthWest(); 
      var ne = map.getBounds().getNorthEast(); 
      var where = 'ST_INTERSECTS(' + locationColumn + 
       ', RECTANGLE(LATLNG' + sw + ', LATLNG' + ne + '))'; 
      layer.setOptions({ 
      query: { 
       select: locationColumn, 
       from: tableId, 
       where: where 
      } 
      }); 
     } else { 
      window.alert('Address could not be geocoded: ' + status); 
     } 
     }); 
    }; 

    google.maps.event.addDomListener(document.getElementById('search'), 
     'click', zoomToAddress); 
    google.maps.event.addDomListener(window, 'keypress', function(e) { 
     if (e.keyCode == 13) { 
     zoomToAddress(); 
     } 
    }); 
    google.maps.event.addDomListener(document.getElementById('reset'), 
     'click', function() { 
      map.setCenter(defaultCenter); 
      map.setZoom(defaultZoom); 
      layer.setOptions({ 
      query: { 
       select: locationColumn, 
       from: tableId 
      } 
      }); 
     }); 
    } 

    google.maps.event.addDomListener(window, 'load', initialize); 
+0

une chance de fournir un jsfiddle avec des données fictives? –

+0

Hi @John dummy données d'où? –

+0

juste des données de FusionTable, juste pour que nous puissions voir la carte de travail et de débogage à partir de là –

Répondre

1

Vous devez changer:

if (navigator.geolocation) {   
    navigator.geolocation.getCurrentPosition(success); 
} 

//set new value for coords 
function success(position) { 
    coords.set('latlng', new google.maps.LatLng(position.coords.latitude, 
    position.coords.longitude)); 
} 

Pour:

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     coords = { 
     lat: position.coords.latitude, 
     lng: position.coords.longitude 
     }; 
     map.setCenter(coords); 
    }); 
    } else { 
    // Browser doesn't support Geolocation 
    //since you set coords above this section it will default to that  
    } 

travail JS (j'ai enlevé votre fusiontableID - ajouter que de retour dans voir)

https://jsfiddle.net/cmjcs5eL/6/

+1

Bingo! Cela a fait l'affaire. Merci. –