2011-11-30 47 views
8

我發現用下面以設置標記的可視性的方式:如何使用Google的版本3 API設置多邊形的可見性?

  // create the marker 
      blueMarker = new google.maps.Marker({ 
       position: new google.maps.LatLng(33.514428, -112.29056534285377), 
       draggable: true, 
       raiseOnDrag: false, 
       icon: './Images/blue3Marker.png', 
       shapeType: 'BuyersEdgeArea', 
       shapeID: '3' 
      }); 

      // set the marker on the map 
      blueMarker.setMap(map); 

然後我用blueMarker.setVisible(假)或blueMarker.setVisible(真),以使其可見/不可見。

但如何我一個多邊形一樣嗎?

下面是我已經設置了我的多邊形:

 BuyersEdge3 = new google.maps.Polygon({ 
      clickable: true, 
      paths: BuyersEdgePath3, 
      strokeColor: '#000000', 
      strokeOpacity: 1, 
      strokeWeight: 2, 
      fillColor: ' #810541 ', 
      fillOpacity: 0.35 
     }); 

     // set the shape on the map 
     BuyersEdge3.setMap(map); 

現在我將如何讓這種形狀不可見?

我的情況是,我有一個複選框,其中用戶檢查無論是看還是不看多邊形。第一次檢查時,我將創建多邊形,但後續時間,我只想使多邊形的形狀可見或不可見。

我將一個虛擬地球應用,在那裏我可以只是「作秀」或「隱藏」與它的多邊形層,但我不能找點事做的伎倆使用JavaScript中的谷歌API的版本3。

回答

8

如果設置strokeOpacity,用於和fillOpacity零和重置多邊形的地圖,你可以做到這一點。

這裏是多邊形原型有點黑客(這意味着你將有機會獲得它在所有的多邊形對象),會做那件事對你

// this is a visibility flag. don't change it manually 
google.maps.Polygon.prototype._visible = true; 

// this will save opacity values and set them to 0, and rebound the polygon to the map 
google.maps.Polygon.prototype.hide = function(){ 
    if (this._visible) { 
     this._visible = false; 
     this._strokeOpacity = this.strokeOpacity; 
     this._fillOpacity = this.fillOpacity; 
     this.strokeOpacity = 0; 
     this.fillOpacity = 0; 
     this.setMap(this.map); 
    } 
} 

// this will restore opacity values. and rebound the polygon to the map 
google.maps.Polygon.prototype.show = function() { 
    if (!this._visible) { 
     this._visible = true; 
     this.strokeOpacity = this._strokeOpacity; 
     this.fillOpacity = this._fillOpacity; 
     this.setMap(this.map); 
    } 
} 

現在你可以做BuyersEdge3.hide()和BuyersEdge3.show()

享受!

+0

OH !!!!我懂了!謝謝。因此,如果我可以加入這個問題,我想通過傳入一個我想要隱藏的BuyersEdge形狀的'value'來讓我的show()hide()泛型。所以我嘗試了這個;函數hidePolygon(value) var be ='BuyersEdge'+ value; be.hide(); <-----不起作用 BuyersEdge3.hide(); <-----作品 } – user1074359

+0

var be ='BuyersEdge'+ value;將使be ='BuyersEdge3'..和'BuyersEdge3'是一個字符串。和字符串沒有.hide方法... – marxus

+0

@marxus我修改了你的解決方案只使用this.setMap,但我不想發佈它作爲答案。基本上所有你需要做的就是在隱藏的時候將地圖設置爲空,然後回到show上的原始值。 – samspot

0

這是我的想法,工作在我的網站。

function drawPolygon(p){ 
if(window.poly)window.poly.setMap(null); 
    var pp=[]; 
    for(var i=0;i<p.length;i+=2) 
    { 
    pp.push(new google.maps.LatLng(parseFloat(p[i+1]),parseFloat(p[i]))); 
    } 

    window.poly=new google.maps.Polygon({ 
     paths: pp, 
     strokeColor: "#FF0000", 
     strokeOpacity: 0.8, 
     strokeWeight: 2, 
     fillColor: "#FF0000", 
     fillOpacity: 0.1 
    }); 

    window.poly.setMap(map); 
    google.maps.event.addListener(map, 'zoom_changed', function() { 
if (map.getZoom()>14) {window.poly.setMap(null);} 
else {window.poly.setMap(map);} 
    }); 
    } 
1

您可以使用:

BuyersEdge3.setOptions({visible:false}); 
2
if (BuyersEdge3.map) 
    { 
     BuyersEdge3.setMap(null); 
    } else { 
     BuyersEdge3.setMap(map); 
    } 
+3

好的答案提供了對代碼的解釋 –

相關問題