Google Maps API v3 marker with label

后端 未结 3 1357
春和景丽
春和景丽 2020-12-13 14:52

I am new to JS and the Google API and I am trying to make multiple markers each with a label.

From little snippets I\'ve been looking at, there was no simple way to

3条回答
  •  借酒劲吻你
    2020-12-13 15:30

    In order to add a label to the map you need to create a custom overlay. The sample at http://blog.mridey.com/2009/09/label-overlay-example-for-google-maps.html uses a custom class, Layer, that inherits from OverlayView (which inherits from MVCObject) from the Google Maps API. He has a revised version (adds support for visibility, zIndex and a click event) which can be found here: http://blog.mridey.com/2011/05/label-overlay-example-for-google-maps.html

    The following code is taken directly from Marc Ridey's Blog (the revised link above).

    Layer class

    // Define the overlay, derived from google.maps.OverlayView
    function Label(opt_options) {
      // Initialization
      this.setValues(opt_options);
    
    
      // Label specific
      var span = this.span_ = document.createElement('span');
      span.style.cssText = 'position: relative; left: -50%; top: -8px; ' +
      'white-space: nowrap; border: 1px solid blue; ' +
      'padding: 2px; background-color: white';
    
    
      var div = this.div_ = document.createElement('div');
      div.appendChild(span);
      div.style.cssText = 'position: absolute; display: none';
    };
    Label.prototype = new google.maps.OverlayView;
    
    
    // Implement onAdd
    Label.prototype.onAdd = function() {
      var pane = this.getPanes().overlayImage;
      pane.appendChild(this.div_);
    
    
      // Ensures the label is redrawn if the text or position is changed.
      var me = this;
      this.listeners_ = [
        google.maps.event.addListener(this, 'position_changed', function() { me.draw(); }),
        google.maps.event.addListener(this, 'visible_changed', function() { me.draw(); }),
        google.maps.event.addListener(this, 'clickable_changed', function() { me.draw(); }),
        google.maps.event.addListener(this, 'text_changed', function() { me.draw(); }),
        google.maps.event.addListener(this, 'zindex_changed', function() { me.draw(); }),
        google.maps.event.addDomListener(this.div_, 'click', function() {
          if (me.get('clickable')) {
            google.maps.event.trigger(me, 'click');
          }
        })
      ];
    };
    
    // Implement onRemove
    Label.prototype.onRemove = function() {
     this.div_.parentNode.removeChild(this.div_);
    
     // Label is removed from the map, stop updating its position/text.
     for (var i = 0, I = this.listeners_.length; i < I; ++i) {
       google.maps.event.removeListener(this.listeners_[i]);
     }
    };
    
    // Implement draw
    Label.prototype.draw = function() {
     var projection = this.getProjection();
     var position = projection.fromLatLngToDivPixel(this.get('position'));
    
     var div = this.div_;
     div.style.left = position.x + 'px';
     div.style.top = position.y + 'px';
     div.style.display = 'block';
    
     this.span_.innerHTML = this.get('text').toString();
    };
    

    Usage

    
      
        
        
          Label Overlay Example
        
        
        
        
      
      
        

提交回复
热议问题