Еще один вопрос о маркере AdvancedMarkerElement. Они не отображаются

Привет всем новичкам здесь и новичкам в JS. У меня есть приложение, которое используется более 10 лет и до сих пор используется. Он написан на PHP/Mysql/JS и использует GM для определения мест доставки. Я думал обновить его до новой системы маркеров, но не смог заставить ее работать. Я думаю, что это только я и мое ограниченное понимание JS.

В любом случае, следующий код показывает карту, но не маркеры. rfap3 и т. д. основаны на теге CSS. Любая помощь очень ценится. Действительно мог найти какие-либо существующие сообщения, которые мне помогли.

<script type = "text/javascript" src = "https://maps.googleapis.com/maps/api/js?callback=Function.prototype&key=MYKEY&loading=async"></script>
<script type = "text/javascript">
async function initmap() {
  // setTimeout second value is milliseconds
  // ie: 1000 = 1 second, 30000 = 30 seconds
  setTimeout( "document.location = document.location;", 30000);
  const { Map } = await google.maps.importLibrary("maps");
  const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
  const myLatLng = new google.maps.LatLng(-41.439068, 147.135773);
  const bounds = new google.maps.LatLngBounds();
  const myOptions = {
    zoom: 12,
    maxZoom: 18,
    center: myLatLng,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    mapId: 'rfamaps123456'
  };
  map = new google.maps.Map(document.getElementById("show_map"), myOptions);

  var rfastodo = [
    ['3055',-41.416744,147.134476,'rfap3',201],
    ['3082',-41.432907,147.152039,'rfap3',202],
    ['3079',-41.431507,147.147400,'rfap2',203]
  ];
  
setRFAs(map, rfastodo);

  function setRFAs(map, rfalist){
      const rfaTag = document.createElement("div");
      for (var i = 0; i < rfalist.length; i++) {
        var rfas = rfalist[i];
        var myLatLng2 = new google.maps.LatLng(rfas[1], rfas[2]);
        rfaTag.classname = rfas[3];
        rfaTag.textcontent = rfas[0];
        var marker = new AdvancedMarkerElement({
          position: myLatLng2,
          map: map,
          content: rfaTag,
          zIndex: rfas[4]
        });
      }
      bounds.extend(marker.position);
      map.fitBounds(bounds);
  }
}
</script>

Просто обнаружил, что все есть, кроме маркеров.

🤔 А знаете ли вы, что...
JavaScript имеет множество встроенных объектов, таких как Array, Date и Math.


67
1

Ответ:

Решено

У вас есть несколько проблем с функцией setRFAs.

  // this should be inside the for loop
  const rfaTag = document.createElement("div");

и

    rfaTag.classname = rfas[3]; // this should be className
    rfaTag.textcontent = rfas[0]; // this should be textContent

и

  // this should be inside the for loop
  bounds.extend(marker.position);

С исправлениями, указанными выше, функция выглядит так:

function setRFAs(map, rfalist) {
  for (var i = 0; i < rfalist.length; i++) {
    const rfaTag = document.createElement("div");
    var rfas = rfalist[i];
    var myLatLng2 = new google.maps.LatLng(rfas[1], rfas[2]);
    rfaTag.classBame = rfas[3];
    rfaTag.textContent = rfas[0];
    var marker = new AdvancedMarkerElement({
      position: myLatLng2,
      map: map,
      content: rfaTag,
      zIndex: rfas[4]
    });
    bounds.extend(marker.position);
  }
  map.fitBounds(bounds);
}

в качестве бонуса - я бы написал так

function setRFAs(rfaList) {
  rfaList.forEach(([textContent, lat, lng, className, zIndex]) => {
      const content = document.createElement("div");
      content.className = className;
      content.textContent = textContent;
      position = new google.maps.LatLng(lat, lng);
      const marker = new AdvancedMarkerElement({position, map, content, zIndex});
      bounds.extend(marker.position);
    }
  );
  map.fitBounds(bounds);
}

и вызовите его без аргумента map, поскольку это похоже на то, как вы не вызываете его с bounds, вы все равно просто используете bounds из внешней области видимости