Обновление центра карт Google Maps Javascript - PullRequest
0 голосов
/ 09 марта 2019

All

Я ни в коем случае не программист на JavaScript, в основном повторно использующий / переназначающий фрагменты здесь и там для достижения цели. В настоящее время я пытаюсь обойти ограничение карт Google, которое заключается в том, что карты нельзя стилизовать (AFAICT), если вы не выберете свою собственную. У меня есть рабочая HTML-страница, которая содержит карту Google, в которой правильно используются стили и геолокация карт Google, чтобы установить в центре карты местоположение пользователя.

Мой вопрос:

Как сохранить карту по центру на месте пользователя, если его местоположение меняется при открытой странице?

Поищите, как я, возможно, мне не удалось найти пример, где геолокация обновляется с помощью JavaScript. Возможно, это невозможно, может быть, документация API Google слаба, или, возможно, мой Google-фу воняет. Возможно, все три.

Мой код (почти дословно взят из документации Google Maps):

 <body>
    <div id="map"></div>
    <script>
      var map, infoWindow;
      function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
          center: {lat: 38.391677, lng: -97.661646},
          zoom: 17,
          styles: [...]
        });
        infoWindow = new google.maps.InfoWindow;
        // Try HTML5 geolocation.
        if (navigator.geolocation) {
          navigator.geolocation.getCurrentPosition(function(position) {
            var pos = {
              lat: position.coords.latitude,
              lng: position.coords.longitude
            };

            infoWindow.setPosition(pos);
            infoWindow.setContent('Location found.'); 
            infoWindow.open(map);
            map.setCenter(pos);
          }, function() {
            handleLocationError(true, infoWindow, map.getCenter());
          });
        } else {
          // Browser doesn't support Geolocation
          handleLocationError(false, infoWindow, map.getCenter());
        }
      }

      function handleLocationError(browserHasGeolocation, infoWindow, pos) {
        infoWindow.setPosition(pos);
        infoWindow.setContent(browserHasGeolocation ?
                              'Error: The Geolocation service failed.' :
                              'Error: Your browser doesn\'t support geolocation.');
        infoWindow.open(map);
      }
    </script>
  <script async defer
src="https://maps.googleapis.com/maps/api/js?key=********************************&callback=initMap">
</script>
  </body>

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Если исходная установка центра на текущее местоположение работает, вы можете просто обернуть код в вызове setInterval для повторной установки центра каждые несколько секунд:

if (navigator.geolocation) {
  setInterval(function() {
    navigator.geolocation.getCurrentPosition(function(position) {
      var pos = {
        lat: position.coords.latitude,
        lng: position.coords.longitude
      };

      infoWindow.setPosition(pos);
      infoWindow.setContent('Location found.'); 
      infoWindow.open(map);
      map.setCenter(pos);
    }, function() {
      handleLocationError(true, infoWindow, map.getCenter());
    });
  }, 1000); // 1000 = number of milliseconds after which to repeat the call, i.e. 1 second
} else {
  // Browser doesn't support Geolocation
  handleLocationError(false, infoWindow, map.getCenter());
}

Я не уверен, если вы действительно хотите, чтобы информационное окно и сообщение об ошибке отображались при каждом вызове, но основы есть.

0 голосов
/ 09 марта 2019

Для обнаружения изменений в геолокации вы можете использовать метод watchPosition . (Хотя поддерживается не во всех браузерах).

Затем вы можете позвонить setCenter , когда у вас будет новый набор координат, и он отцентрирует карту для вас.

Здесь есть сообщение в блоге , которое, кажется, точно описывает то, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...