1

https://github.com/jawj/OverlappingMarkerSpiderfierを実装して、まったく同じ場所に発生する可能性のある複数のマップ マーカーを処理しようとしています。以下の JavaScript を使用して、クラス .marker の div からマップ データを取得し、マップを作成しています。それは機能しており、うまく機能しています。

function initialize() {

function render_map( $el ) {

    // var
    var $markers = $el.find('.marker');

    // vars
    var args = {
        zoom        : 8,
        center      : new google.maps.LatLng(42.7086815, -84.559032),
        scrollwheel : false,
        mapTypeId   : google.maps.MapTypeId.ROADMAP
    };

    // create map               
    var map = new google.maps.Map( $el[0], args);

    // add a markers reference
    map.markers = [];

    // add markers
    $markers.each(function(){

        add_marker( $(this), map );

    });
    var padder = document.createElement('div');
    padder.style.height = '100px';
    padder.style.width = '100%';
    map.controls[google.maps.ControlPosition.TOP_CENTER].push(padder);
    // center map
    center_map( map );

}

function add_marker( $marker, map ) {

    // var
    var latlng = new google.maps.LatLng( $marker.attr('data-lat'), $marker.attr('data-lng') );

    // create marker

    var marker = new google.maps.Marker({
        position    : latlng,
        map         : map

    });

    // add to array
    map.markers.push( marker );

    // if marker contains HTML, add it to an infoWindow
    if( $marker.html() )
    {
        // create info window
        var infowindow = new google.maps.InfoWindow({
            content     : $marker.html()
        });

        // show info window when marker is clicked
        google.maps.event.addListener(marker, 'click', function() {

            infowindow.open( map, marker );
            map.setCenter(marker.getPosition());

        });
    }

}    

function center_map( map ) {

    // vars
    var bounds = new google.maps.LatLngBounds();

    // loop through all markers and create bounds
    $.each( map.markers, function( i, marker ){

        var latlng = new google.maps.LatLng( marker.position.lat(), marker.position.lng() );

        bounds.extend( latlng );

    });

    // only 1 marker?
    if( map.markers.length == 1 )
    {
        // set center of map
        map.setCenter( bounds.getCenter() );

    }
    else if( map.markers.length == 0 )
    {
        // set center of map
        map.setCenter( 42.7086815, -84.559032 );


    }
    else
    {
        // fit to bounds
        map.fitBounds( bounds );

    }
    google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) {
      if (this.getZoom() > 8) {
        this.setZoom(8);
      }
});
}

$(document).ready(function(){

    $('#acf-map').each(function(){

        render_map( $(this) );

    });

});

}

ただし、持っているものを Spiderfier js と統合しようとすると、マップ マーカーが表示されません。これは、js をマージしようとして申し訳ありません。Spiderfier を使用しながら、.marker div からコンテンツを取得する方法について何か考えはありますか?

function initialize() {

function render_map( $el ) {

    // var
    var $markers = $el.find('.marker');

    // vars
    var args = {
        zoom        : 8,
        center      : new google.maps.LatLng(42.7086815, -84.559032),
        scrollwheel : false,
        mapTypeId   : google.maps.MapTypeId.ROADMAP
    };

    // create map               
    var map = new google.maps.Map( $el[0], args);
    var oms = new OverlappingMarkerSpiderfier(map);
    var iw = new google.maps.InfoWindow();
        oms.addListener('click', function(marker, event) {
          iw.setContent(marker.desc);
          iw.open(map, marker);
        });
    oms.addListener('spiderfy', function(markers) {
      iw.close();
    });

    // var
    var latlng = new google.maps.LatLng( $marker.attr('data-lat'), $marker.attr('data-lng') );

    // create marker

    var marker = new google.maps.Marker({
        position    : latlng,
        map         : map

    });
    marker.desc = $marker.html();
    oms.addMarker(marker);


    var padder = document.createElement('div');
    padder.style.height = '100px';
    padder.style.width = '100%';
    map.controls[google.maps.ControlPosition.TOP_CENTER].push(padder);
    // center map
    center_map( map );

}


function center_map( map ) {

    // vars
    var bounds = new google.maps.LatLngBounds();

    // loop through all markers and create bounds
    $.each( map.markers, function( i, marker ){

        var latlng = new google.maps.LatLng( marker.position.lat(), marker.position.lng() );

        bounds.extend( latlng );

    });

    // only 1 marker?
    if( map.markers.length == 1 )
    {
        // set center of map
        map.setCenter( bounds.getCenter() );

    }
    else if( map.markers.length == 0 )
    {
        // set center of map
        map.setCenter( 42.7086815, -84.559032 );


    }
    else
    {
        // fit to bounds
        map.fitBounds( bounds );

    }
    google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) {
      if (this.getZoom() > 8) {
        this.setZoom(8);
      }
});
}


$(document).ready(function(){

    $('#acf-map').each(function(){

        render_map( $(this) );

    });

});

}
4

1 に答える 1