2016-12-16 10 views
-1

公式のGoogle例:ラベル付き(ラベルなし)GoogleMaps:ラベル付きのマーカーでマップをドラッグ可能にするにはどうすればよいですか?

  1. シンプルマーカー https://developers.google.com/maps/documentation/javascript/examples/marker-simple
  2. マーカー https://developers.google.com/maps/documentation/javascript/examples/marker-labels

あなたが最初のマップ上のマーカーとドラッグをクリックした場合 - 地図ドラッグ可能、 2番目の地図に - マーカーで地図をドラッグできません。 + このマーカーでドラッグ可能なマーカーマーカーを組み合わせるにはどうすればいいですか?

答えて

0

これは最適な解決策ではないかもしれませんが、地図にfloatPaneオーバーレイを追加すると、マーカーをクリックして地図をドラッグできます。 残念ながら、この方法ではいくつかの機能が欠けてしまいます。 https://developers.google.com/maps/documentation/javascript/examples/marker-labels

と:私はあなたが

マーカーラベルを結合するためのサンプルを作った https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapPanes

floatPaneオーバーレイは、地図上の最上層であるため、たとえば、あなたは、マーカーのクリックイベントを使用することはできませんカスタムオーバーレイ: https://developers.google.com/maps/documentation/javascript/examples/overlay-simple

<html> 
<!DOCTYPE html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <title>Marker Labels + Custom Overlay</title> 
    <style> 
     #map { 
     height: 100%; 
     } 
     html, body { 
     height: 100%; 
     margin: 0; 
     padding: 0; 
     } 
    </style> 
    <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script> 
    <script> 
     var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
     var labelIndex = 0; 
     var map; 
     var overlay1, overlay2; 
     floatOverlay.prototype = new google.maps.OverlayView(); 
     function initialize() { 
     var centerPos = {lat: 37.323907, lng: -98.109291}; 
     map = new google.maps.Map(document.getElementById('map'), { 
      zoom: 5, 
      center: centerPos 
     }); 
     google.maps.event.addListener(map, 'click', function(event) { 
      addMarker(event.latLng, map); 
     }); 
     addMarker(centerPos, map); 
     var bounds1 = new google.maps.LatLngBounds(new google.maps.LatLng(-90, -180), new google.maps.LatLng(90,0)); 
     var bounds2 = new google.maps.LatLngBounds(new google.maps.LatLng(-90, 0), new google.maps.LatLng(90,180)); 
     overlay1 = new floatOverlay(bounds1, map);  
     overlay2 = new floatOverlay(bounds2, map);  
     } 

     function addMarker(location, map) { 
     var marker = new google.maps.Marker({ 
      position: location, 
      label: labels[labelIndex++ % labels.length], 
      map: map 
     }); 
     } 
     function floatOverlay(bounds, map) { 
     this.bounds_ = bounds; 
     this.map_ = map; 
     this.div_ = null; 
     this.setMap(map); 
     } 

     floatOverlay.prototype.onAdd = function() { 
     var div = document.createElement('div'); 
     div.style.borderStyle = 'none'; 
     div.style.borderWidth = '0px'; 
     div.style.position = 'absolute'; 
     this.div_ = div; 
     var panes = this.getPanes(); 
     panes.floatPane.appendChild(div); 
     }; 

     floatOverlay.prototype.draw = function() { 
     var overlayProjection = this.getProjection(); 
     var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest()); 
     var ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast()); 
     var div = this.div_; 
     div.style.left = sw.x + 'px'; 
     div.style.top = ne.y + 'px'; 
     div.style.width = (ne.x - sw.x) + 'px'; 
     div.style.height = (sw.y - ne.y) + 'px'; 
     }; 
     floatOverlay.prototype.onRemove = function() { 
     this.div_.parentNode.removeChild(this.div_); 
     this.div_ = null; 
     };  

     google.maps.event.addDomListener(window, 'load', initialize); 
    </script> 
    </head> 
    <body> 
    <div id="map"></div> 
    </body> 
</html> 

もっと良い解決策が得られるまで、これが役立つことを願っています。

関連する問題