3

我发现了很多关于如何将自定义标记添加到Google地图的代码,但几乎没有关于在同一地图上使用不同标记的任何代码。例如,我可能会使用高级自定义字段中继器字段中的4个标记,我想用绿色标记来显示该标记,其余标记与自定义帖子类型相关,以灰色标记显示。Google Maps v3 API和WordPress ACF:多个自定义标记

我已经尝试了几种不同的方法,如重复标记变量和更改名称和颜色,但我尝试的所有内容都会打破地图的某些部分。

以下是两种不同类型的地图的标记,我需要的截屏:http://screencast.com/t/Cc5eE7St

下面的代码工作,但它是一个所有类型的标记。

<style type="text/css"> 

.acf-map { 
    width: 100%; 
    height: 730px; 
} 

/* fixes potential theme css conflict */ 
.acf-map img { 
    max-width: inherit !important; 
} 

</style> 
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> 
<script type="text/javascript"> 
(function($) { 

/* 
* new_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 new_map($el) { 

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

    // vars 
    var args = { 
     zoom  : 5, 
     scrollwheel: false, 
     center: {lat: 39.8, lng: 98.5795}, 
     mapTypeId : google.maps.MapTypeId.ROADMAP, 
     styles: [ 
    { 
     "featureType": "all", 
     "elementType": "all" 
    }; 

    // 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); 

    // return 
    return map; 

} 

/* 
* 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 
    // }); 

    var grayCircle = { 
    //path: 'M -1,0 A 1,1 0 0 0 1,0 1,1 0 0 0 -1,0 z', 
    path: google.maps.SymbolPath.CIRCLE, 
    fillColor: '#888888', 
    fillOpacity: 1, 
    scale: 3, 
    strokeColor: "#888888", 
    strokeWeight: 3 
    }; 

    var marker = new google.maps.Marker({ 
    position: latlng, 
    icon: grayCircle, 
    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); 

     }); 
    } 

} 

/* 
* 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(5); 
    } 
    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 
*/ 
// global var 
var map = null; 

$(document).ready(function(){ 

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

     // create map 
     map = new_map($(this)); 

    }); 

}); 

})(jQuery); 
</script> 

    <div class="portfolio-map"> 

    <div class="acf-map"> 

      <?php 
      // check if the repeater field has rows of data 
      if(have_rows('site_details')): 
       // loop through the rows of data 
       while (have_rows('site_details')) : the_row(); 
        // display a sub field value 
        $siteName = get_sub_field('site_name'); 
        $siteLink = get_sub_field('site_link'); 
        $siteAddress = get_sub_field('site_address'); 
      ?> 
       <!-- I would like this set of information to have a green marker --> <div class="marker" data-lat="<?php echo $siteAddress['lat']; ?>" data-lng="<?php echo $siteAddress['lng']; ?>"> 
        <h4><?php echo $siteName; ?></h4> 
       </div> 
     <?php 
      endwhile; 
       else : 
        // no rows found 
       endif; 
     ?> 

      <? 
       $args = array(
        'post_type' => 'organization', 
        'posts_per_page' => 99 
       ); 

       $locationMap = new WP_Query($args); 
       $count = 0; 
      ?> 

       <? if($locationMap->have_posts()) : while($locationMap->have_posts()) : $locationMap->the_post(); 
        $count++; 
        $location = get_field('organization_address'); 
        $siteLocation = get_field('site_address'); 

       ?> 

       <!-- I would like this set of information to have a gray marker --> <div class="marker" data-lat="<?php echo $location['lat']; ?>" data-lng="<?php echo $location['lng']; ?>"> 
        <a href="<?php the_permalink(); ?>"> 
         <img class="popup" src="<?php the_field('logo'); ?>"/> 
        </a> 
        <div class="popup-details"> 
         <?php the_field('map_popup_details'); ?> 
        </div> 
        <div class="popup-link"> 
         <a href="<?php the_permalink(); ?>">Learn More </a> 
        </div> 
       </div> 
       <? endwhile; endif; ?> 

     <?php wp_reset_query(); ?> 

     </div> 
    </div> 
+1

谷歌的API页面展示如何添加不同的标记为SINGL电子地图,[这是你在找什么?](https://developers.google.com/maps/tutorials/customizing/custom-markers#try_it_out) – jnthnjns

+1

没错。谢谢! –

回答

0

夏洛特,您可以为您打造的标记,像这样(绿色/灰色,无论你需要他们)

<div class="marker" data-lat="<?php echo $location['lat']; ?>" data-lng="<?php echo $location['lng']; data-marker="green/grey" ?>"> 

,并添加一个“数据标记”属性,每个标记物然后在JavaScript可以检查使用数据标记您在代码中设置标记类型,像这样

var grayCircle = { 
    //path: 'M -1,0 A 1,1 0 0 0 1,0 1,1 0 0 0 -1,0 z', 
    path: google.maps.SymbolPath.CIRCLE, 
    fillColor: '#888888', 
    fillOpacity: 1, 
    scale: 3, 
    strokeColor: "#888888", 
    strokeWeight: 3 
}; 

var greenMarker = //create your marker here 

//Check your marker type, if it's green then set that otherwise leave it grey 
var markerType = $marker.attr('data-marker')=="green"?greenMarker:greyCircle; 

var marker = new google.maps.Marker({ 
    position: latlng, 
    //Set your marker using markerType here 
    icon: markerType, 
    map: map 
}); 
+0

太棒了。谢谢! –

相关问题