2012-08-06 124 views
1

我想重繪一個OpenLayers矢量。重繪openlayers矢量圖層

我的HTML按鈕:

<button id="refresh" type="button">Refresh</button> 

和我的jQuery函數重繪層,該parksLayer在刷新功能被記錄爲假:

function refresh() { 
    parksLayer.redraw(true); 
} 

function bind(){ 
    $("#refresh").bind("click", refresh); 
} 

,我的地圖,我想重繪在ParksLayer:

 map = new OpenLayers.Map({ 
      div: "map", 
      layers: [ 
       new OpenLayers.Layer.OSM(), 
       parksLayer 
      ] 
     }); 

UPDATE

感謝您的幫助,我的矢量圖層的定義是這樣的:

function changeme(avalue){ 
     parksLayer = new OpenLayers.Layer.Vector("Parks", { 
      projection: new OpenLayers.Projection("EPSG:4326"), 
      strategies: [new OpenLayers.Strategy.Fixed()], 
      protocol: new OpenLayers.Protocol.Script({ 
       url: "http://my.cartodb.com/api/v2/sql", 
       params: { 
     q: "SELECT * FROM activities where type_code is not null"+" "+avalue, 
     format: "geojson" 
    }, 
       format: new OpenLayers.Format.GeoJSON({ 
        ignoreExtraDims: true 
       }), 
       callbackKey: "callback" 
      }), 
     }); 
    } 

我有改變avalue動態從而改變了GeoJSON的查詢,所以如果我能重新繪製parksLayer我會留下一種形式來自圖層的新選擇。

回答

3

如果我讀的OpenLayers API,重繪函數不使用任何參數......你應該嘗試調用重繪()沒有把「真」作爲參數...

的OpenLayers API: 重繪:函數() 重繪該圖層。如果圖層重繪,則返回true,否則返回false。

問候

艾蒂安

+0

反正你確定您的刷新功能中的parksLayer變量是否真的是一個圖層?我假設你在初始化變量之前使用它,因爲你顯示我們的代碼不能工作... – 2012-08-06 17:59:29

+0

我已經嘗試了兩種方式,有和沒有真實,但沒有骰子 – Bwyss 2012-08-06 19:29:29

+0

你可以發佈多一點你的代碼看看你如何創建你的ParkLayer變量? – 2012-08-06 19:48:27

3

我有重繪問題()也是一樣,使用它。

VecLayer.redraw(true); 
VecLayer.refresh({force: true}); 
1

這裏有一個爲KML格式,但它很容易適應,你可以看到

var refresh = new OpenLayers.Strategy.Refresh({force: true, active: true}); 

    var protocol = new OpenLayers.Protocol.HTTP({ 
     url: "http://my_data.source.com", 
      format: new OpenLayers.Format.KML({ 
        extractStyles: false, 
        extractAttributes: true 
       }) 
      }); 

    mylayer = new OpenLayers.Layer.Vector("MyLayerName", { 
      strategies: [new OpenLayers.Strategy.Fixed(), refresh], 
      protocol: protocol 
    }); 

然後重繪/重新下載數據,你做的事:

refresh.refresh(); 
相關問題