多个不同的谷歌标记基于用户选择下拉字段

Multiple Different Google Marker based on user selected dropdown field

本文关键字:用户 选择 字段 于用户 谷歌      更新时间:2023-09-26

我能够根据显示信息框的用户输入创建多个标记,我目前的问题是如何根据用户选择的值放置不同的多个不同的标记,例如用户选择的学校,标记将显示学校图标和其他用户选择的教堂,并将显示教堂图标。由于

(function ($) {
    $.noConflict();
    /*
     *  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
        };
        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);
    }
    /*
     *  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 icons = IconURL + iconIMG;
        var latlng = new google.maps.LatLng($marker.attr('data-lat'), $marker.attr('data-lng'));
        var image = new google.maps.MarkerImage('icons');
        // create marker
        var marker = new google.maps.Marker({
            position: latlng,
            map: map,
            icon: icons
        });
        // 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, 'mouseover', function () {
                infowindow.open(map, marker);
            });
            google.maps.event.addListener(marker, 'mouseout', function () {
                infowindow.close(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(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);

在创建标记时为标记提供id ..

var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        icon: icons,
        id:"school"  //or church to your respective markers
    });

同时显示取回标记…

function hide_markers(){
  for(var i = 0; i<markers.length; i++){
    if(markers[i].id !=  "school")
    {
      markers[i].setVisible(false); //hide the markers whose id is not school
    }
  }
}