Проблема с информационным окном Google Maps после адаптации геокода - PullRequest
0 голосов
/ 18 июня 2020

Я переключил свой код с системы lat-lang на API геокода, чтобы разрешить адреса, но, к сожалению, информация windows Карт Google не работает должным образом. Отображаются лишь некоторые из них с неверной информацией. Вот мой код.

<script type="text/javascript">
    if(document.getElementById("{idMap}")) {
    let geocoder;
    let map;


    let locations = [
            [ "Location 1" , "Via Pavia 57, 80021" ] ,
            [ "Location 2" , "Via  Palermo 24, 80021" ] ,
            [ "Location 3" , "Via Milano 15, 80021" ] ,
    ];

    function initializeMap() {
        geocoder = new google.maps.Geocoder();
        let infowindow = new google.maps.InfoWindow();
        let bounds = new google.maps.LatLngBounds();

        let mapSettings = {
          zoomControl: false,
          mapTypeControl: false,
          scaleControl: false,
          streetViewControl: false,
          rotateControl: false,
          fullscreenControl: false,
        };

        map = new google.maps.Map(document.getElementById("{idMap}"), mapSettings);
        for (i = 0; i < locations.length; i++) {
            codeAddress(locations[i][1], i, bounds);
        }
      }

      function codeAddress(address, index, bounds) {
        geocoder.geocode({ address: address }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          let latLng = {
            lat: results[0].geometry.location.lat(),
            lng: results[0].geometry.location.lng(),
          };
          if (status == "OK") {
            let marker = new google.maps.Marker({
              position: latLng,
              map: map,
              icon: "https://maps.google.com/mapfiles/ms/icons/blue-dot.png",
            });
            bounds.extend(marker.position);
            map.fitBounds(bounds);
            map.panToBounds(bounds);
            if(locations[0][index] && locations[0][index].length > 0) {
              let infowindow = new google.maps.InfoWindow({
                content: locations[0][index],
              });
              marker.addListener("click", function () {
                infowindow.open(map, marker);
              });
            }
          } else {
            console.log(
              "Geocode was not successful for the following reason: " + status
            );
          }
        }
        });
      }
      window.initMap = null;
      window.initMap = initializeMap();
}
</script>

Все маркеры расположены правильно, проблема связана только с infoWindow.

1 Ответ

0 голосов
/ 18 июня 2020

Я исправил проблему, передав идентификатор из маркера в массив местоположений, таким образом он работает:

let infowindow = new google.maps.InfoWindow({
      content: locations[marker.id][1],
});
...