Google Map запрашивает местоположение в порядке, но не центрирует карту

1

Я загружаю свою карту вместе с маркерами, вытащенными из FusionTable. Теперь я пытаюсь центрировать карту вокруг местоположения пользователей, если они принимают запрос.

При загрузке страницы браузер запрашивает доступ к моему местоположению, и я согласен, но карта не сосредоточена на моем местоположении. У меня также есть поиск функции адреса, но не думаю, что это повлияло бы на вещи.

Мой код:

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);
Теги:
google-maps
google-maps-api-3
google-fusion-tables

1 ответ

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

Для того, чтобы:

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      
  }

Рабочий JS (я удалил ваш файл fusiontableID - добавьте его обратно для просмотра)

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

  • 1
    Бинго! Это добилось цели. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню