Автор: Stasyuk Eugene 175 Мітки: , 26.02.2024

Сьогодні розберемо як зробити google map зі списком адрес. Важлива особливість полягає в тому, що під час кліка на будь-яку з адрес, у центрі мапи має відобразитися маркер із цією адресою.

Повністю готовий і робочий варіант можна побачити тут: https://codepen.io/jecosjmecos/pen/rNRgrgg

А в самій статті вже розберемо роботу поетапно.

1) Стилі

Задаємо розміри карти на сторінці

<style>
  #map {
    height: 400px;
    width: 100%;
  }
</style>

2) Розмітка списку з адресами

Обгортка зі списком повинна мати id='address'

<ul id="address">
  <li>
    <a href="#"
       data-lat="51.52997244138653"
       data-lng="-0.1721165694782623">
      <span class="address">
        St John's Wood Rd, London NW8 8QN, Great Britain
      </span>
      <span class="link">Directions</span>
    </a>
 </li>

  <li>
    <a href="#"
       data-lat="13.731994255241341"
       data-lng="100.54166799585914">
      <span class="address">
        Lumphini, Pathum Wan, Bangkok 10330, Thailand
      </span>
      <span class="link">Directions</span>
    </a>
  </li>

  <li>
    <a href="#"
       data-lat="35.72016405570121"
       data-lng="139.76076052276977">
      <span class="address">
        1 Chome-28-9 Nezu, Bunkyo City, Tokyo 113-0031, Japan
      </span>
      <span class="link">Directions</span>
    </a>
  </li>
</ul>

Важный момент! Посилання (тег <a>) має два атрибути: data-lat и data-lng . У цих атрибутах ми використовуємо координати, які потім будуть відображатися на карті.

Щоб їх отримати, достатньо на відкритій google карті клікнути правою кнопкою миші на точку, після чого буде доступне вікно з опціями, першим пунктом якого є координати.

3) Область із картою

Додаємо елемент з id='map'. Вміст блоку буде заповнено картою

<div id="map"></div>

4) Основний скрипт

Цей скрипт:

  • Зчитує координати адрес у нашому списку
  • Додає маркери цих адрес на карту
  • При кліку на одну з адрес відображає її в центрі карти

Щоб скрипт працював, потрібно в консолі google створити api key і вставити його в посиланні замість YOUR_API_KEY у script.src у функції initMap(). Як створити ключ можна подивитися тут:

<script>
  document.addEventListener('DOMContentLoaded', async function(){

      const mapList = document.querySelectorAll('#address li a');

      if(mapList.length){
          await initMap(mapList);

          mapList.forEach((item) => {

              item.addEventListener('click', function(e){
                  e.preventDefault();

                  addMarker(+this.dataset.lat, +this.dataset.lng);
              });

          });
      }
  });

  async function initMap(coordinates) {
      return new Promise((resolve, reject) => {
          const script = document.createElement('script');
          script.src = `https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMapCallback`;
          script.defer = true;
          script.async = true;
          window.initMapCallback = function() {
              const map = new google.maps.Map(document.getElementById("map"), {
                  center: { lat: -10.397, lng: 155.644 },
                  zoom: 16,
                  mapTypeControl: false,
                  streetViewControl: false,
              });

              window.map = map;

              coordinates.forEach((coordinate) => {
                  addMarker(+coordinate.dataset.lat, +coordinate.dataset.lng, map);
              });

              resolve();
          };

          document.head.appendChild(script);
      });
  }

  function addMarker(lat, lng, map = false) {
      map = map ? map : window.map;

      const marker = new google.maps.Marker({
          position: { lat: lat, lng: lng },
          map: map,
      });

      map.setCenter({ lat: lat, lng: lng });
  }
</script>

Інші статті

Як використовувати дочірню тему на WordPress. doughter

Як використовувати дочірню тему на WordPress.

Як використовувати дочірню тему на WordPress.

Нещодавно надійшов запит зробити бюджетний інтернет-магазин з адмін панеллю. Звісно, у цьому питанні я вирішив використовувати WordPress спільно з Woocommerce. Однією з запропонованих тем плагіна електронної комерції магазину є Storefront. Безкоштовна версія, як і очікувалося, не пропонує багато налаштувань. Проте вийшло хоч щось схоже на сучасний інтернет-магазин. Ось результат: Відкритим залишилося питання використання фірмових кольорів. […]

Хостинг Cloudabove: як програмно очистити кеш на сервері.

Хостинг Cloudabove: як програмно очистити кеш на сервері.

Хостинг Cloudabove: як програмно очистити кеш на сервері.

Cloudabove має можливість прискорити сайт шляхом кешування на сервері. За замовчуванням цей кеш очищається кожні 15 хвилин. Це досить вагомо прискорює сайт, але при цьому впливає на відображення контенту. Наприклад, у моєму випадку опублікований користувачем відгук на товар з’являвся тільки через 15 хвилин. Очистити кеш досить просто. В основі цього лежить GET запит на https://scout.cloudabove.com/api/cache/purge. […]