2016-06-22 40 views
0

我知道這裏已經有一些答案了,但我還是無法弄清楚。我在WordPress中使用高級自定義字段的谷歌地圖。如何在Google Maps API的同一位置處理多個製造商?

我從ACF中拉出位置,然後生成地圖。

但是,一些位置是相同的;所以infowindow只顯示一個標題,其他則完全隱藏。

如果標記稍微分開,我會很好。

如果infowindow可以包含所有位於同一位置的帖子的所有標題,我也可以。

任何人都可以幫忙嗎?

這是當前的代碼:

<script src="http://www.google.com/jsapi?key=ABQIAAAArX_FiOGh9BVSA-VaKWxf3BTjV82plXfzb-h9w4F1dGZTQrT8wxSgksN4vLUdfoCX3U-gz7r_GPkm2A" type="text/javascript"></script> 
<script type="text/javascript"> 
google.load("jquery", "1.7.1"); 
google.load("jqueryui", "1.8.16"); 
</script> 
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> 
<script type="text/javascript"> 
(function($) { 

/* 
* render_map 
* 
* This function will render a Google Map onto the selected jQuery element 
* 
* @type function 
* @date 8/11/2013 
* @since 4.3.0 
* 
* @param $el (jQuery element) 
* @return n/a 
*/ 

function render_map($el) { 

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

// vars 
var args = { 
    zoom  : 16, 
    center  : new google.maps.LatLng(0, 0), 
    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); 

}); 

// center map 
center_map(map); 

} 

// create info window outside of each - then tell that singular infowindow to swap content based on click 
var infowindow = new google.maps.InfoWindow({ 
content  : '' 
}); 

/* 
* add_marker 
* 
* This function will add a marker to the selected Google Map 
* 
* @type function 
* @date 8/11/2013 
* @since 4.3.0 
* 
* @param $marker (jQuery element) 
* @param map (Google Map object) 
* @return n/a 
*/ 

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()) 
{ 

    // show info window when marker is clicked & close other markers 
    google.maps.event.addListener(marker, 'click', function() { 
     //swap content of that singular infowindow 
       infowindow.setContent($marker.html()); 
       infowindow.open(map, marker); 
    }); 

    // close info window when map is clicked 
     google.maps.event.addListener(map, 'click', function(event) { 
      if (infowindow) { 
       infowindow.close(); } 
      }); 

} 

} 

/* 
* center_map 
* 
* This function will center the map, showing all markers attached to this map 
* 
* @type function 
* @date 8/11/2013 
* @since 4.3.0 
* 
* @param map (Google Map object) 
* @return n/a 
*/ 

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()); 
    map.setZoom(16); 
} 
else 
{ 
    // fit to bounds 
    map.fitBounds(bounds); 
} 

} 



/* 
* document ready 
* 
* This function will render each map when the document is ready (page has loaded) 
* 
* @type function 
* @date 8/11/2013 
* @since 5.0.0 
* 
* @param n/a 
* @return n/a 
*/ 

$(document).ready(function(){ 

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

    render_map($(this)); 

}); 

    }); 

    })(jQuery); 
    </script> 

回答

0

對於同一位置的多個標記,我建議使用MarkerClusterer

如前所述,

MarkerClusterer是應用於基於網格的聚類標記集合的客戶端程序庫。它通過遍歷集合中您希望聚類的標記進行迭代,並將每個標記添加到距離最小方形像素範圍內的最近聚類中。

使用範例和演示可以在GitHub上找到 - 在這個崗位SO給出 Marker Clusterer – A Google Maps JavaScript API utility library和解決方案 - Google maps API V3 - multiple markers on exact same spot也會有所幫助。

相關問題