A
A
Andrew Sky2015-06-08 17:12:00
JavaScript
Andrew Sky, 2015-06-08 17:12:00

How to pass coordinates and label names from DOM to GoogleMaps?

There is a list that PHP generates and displays on the page. How to loop through this list in JS and display it as marks on the map?

<ul class="point">
                    <li data-name="Алматы" data-url="/dilery/almaty/" data-coordinat="">
                                    <p>Алматы элемент</p>
                            </li>
                    <li data-name="Астана" data-url="/dilery/astana/" data-coordinat="">
                                    <p>Астана элемент</p>
                            </li>
                    <li data-name="Ростов-на-Дону" data-url="/dilery/rostov-na-donu/" data-coordinat="47.234440, 39.701128">
                                    <p>ООО «Автовариант» и ООО «Автохолод»</p>
                                    <p>ООО «Горизонт»</p>
                                    <p>«Холодильные Технологии»</p>
                                    <p>ООО «СпеЦ-Авто»</p>
                                    <p>ООО «Висма»</p>
                            </li>
            </ul>


/*Google Maps*/
  if($('#gomap').length) {
  $("#gomap").gmap3({
          marker:{
          	values:[
          { latLng: [55.02480160288231, 82.92944544445794], 
          	data:'<div class="baloon-innr"><h3>Москва</h3><p>ООО «Автовариант» и ООО «Автохолод»</p><p>ООО «Горизонт»</p><p>«Холодильные Технологии»</p><p>ООО «СпеЦ-Авто»</p><p>ООО «Висма»</p><a href="#">Контактная информация</a></div>'
          },
          { latLng: [55.75399400, 37.62209300], 
          	data:'<div class="baloon-innr"><h3>Москва</h3><p>ООО «Автовариант» и ООО «Автохолод»</p><p>ООО «Горизонт»</p><p>«Холодильные Технологии»</p><p>ООО «СпеЦ-Авто»</p><p>ООО «Висма»</p><a href="#">Контактная информация</a></div>'
          },
          { latLng: [56.97048954, 35.72145823], 
          	data:'<div class="baloon-innr"><h3>Москва</h3><p>ООО «Автовариант» и ООО «Автохолод»</p><p>ООО «Горизонт»</p><p>«Холодильные Технологии»</p><p>ООО «СпеЦ-Авто»</p><p>ООО «Висма»</p><a href="#">Контактная информация</a></div>'
          },
          { latLng: [54.79760329, 37.65505198], 
          	data:'<div class="baloon-innr"><h3>Москва</h3><p>ООО «Автовариант» и ООО «Автохолод»</p><p>ООО «Горизонт»</p><p>«Холодильные Технологии»</p><p>ООО «СпеЦ-Авто»</p><p>ООО «Висма»</p><a href="#">Контактная информация</a></div>'
          },
        ],
          	
          	options:{
              draggable:false,
              icon: new google.maps.MarkerImage("/bitrix/templates/main/img/icon-marker.png", new google.maps.Size(12, 13, "px", "px")),
            },
            events:{
            	click: function(marker, event, context){
            var map = $(this).gmap3("get"),
              infowindow = $(this).gmap3({get:{name:"infowindow"}});
            if (infowindow){
              infowindow.open(map, marker);
              infowindow.setContent(context.data);
            } else {
              $(this).gmap3({
                infowindow:{
                  anchor:marker, 
                  options:{content: context.data}
                }
              });
            }
          },
      
            },
            
          },
          map:{
            options:{
              center:[55.02480160288231, 82.92944544445794],
              zoom: 4,
              scrollwheel: false,
              mapTypeControl: false,
              panControl: false,
              streetViewControl: false,
              zoomControl: true,
        zoomControlOptions: {
        	style: google.maps.ZoomControlStyle.SMALL,
         	position: google.maps.ControlPosition.RIGHT_BOTTOM
       },
            }
          }
        });
        
      }

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
Andrew Sky, 2015-06-19
@Sky161

Used gmaps.js plugin

$('.dealers-map .point li').each(function(){
        var coordinat = $(this).data('coordinat');
        var urlPath = $(this).data('url');
        var name = $(this).data('name');
        var idItem = $(this).data('id');
        var arrCoordinat = coordinat.split(',');
        var itemArr = [];
        
        $(this).find('p').each(function(){
          var item = $(this).text();
          
          itemArr.push('<p>'+item+'</p>');
        });
        var items = itemArr.join('');
        
        // создаю маркер, сохраняю ссылку в переменную
        var marker = map.addMarker({
          lat: arrCoordinat[0],
          lng: arrCoordinat[1],
          title: 'bx-id-'+idItem,
          icon: '/bitrix/templates/main/img/icon-marker.png',
          infoWindow: {
            content: '<div id="bx-id-'+idItem+'" class="baloon-innr"><h3>'+name+'</h3>'+items+'<a href="'+urlPath+'">Контактная информация</a></div>'
          }
        });

         // добавляю маркер на карту
         map.addMarker(marker);

         // добавляю ссылку на маркер в объект
         mapMarkers[idItem ] = marker;
      });

V
Valentin Dubrovsky, 2015-06-08
@matroskin13

Why would you need to parse the dom when you already have an array that can be passed to js?

<script>
var markers = <?=$this->markers?>
</script>

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question