2015-03-31 73 views
0

我正在使用Google Maps API在地圖上顯示我的Polygon數據。數據以geoJson格式存在,文件大小爲2Mb。這是我如何將數據添加到圖層Google Maps API:數據層呈現完成事件

var parcelLayer = new google.maps.Data(); 
parcelLayer.addGeoJson(geoJsonObject); 

和一切工作正常。

但是我面臨的問題是;數據文件的大小足夠大,大約2Mb,在地圖上渲染需要5-10秒,所以我需要在地圖上渲染數據時添加一個加載程序。

我無法找到地圖數據完成渲染後觸發的事件,或者在此情況下可能有用的任何技巧。我已經搜索在谷歌很多,並檢查該網站的相關鏈接,以及,但沒有運氣

編輯

我已經試過addfeature事件像下面

  count=0; 
      parcelLayer.addListener('addfeature', function() { 
       count+=1; 
       if (count==geoJsonObject.features.length){ 
        console.log('all rendered'); 
       } 
      }); 

console遠響應在圖層完成呈現之前。

+0

您是否試過[addfeature](https://developers.google。com/maps/documentation/javascript/reference#Data)事件?您可能需要對GeoJSON中的功能進行計數,以瞭解何時添加最後一個功能。 – geocodezip 2015-03-31 16:27:05

+0

是的,我試過addfeature事件。但addfeature對所有功能的響應出現,並且圖層尚未渲染。問題中添加的示例 – muzaffar 2015-04-01 05:34:50

回答

0

你爲什麼不使用

google.maps.event.addListenerOnce(map, 'idle', function(){ 
    // you can put your layer code for data is present is in geoJson  format here 
}); 

「空閒」時,地圖是滿載,這意味着它處於空閒狀態時觸發事件。

+0

您的意思是我需要啓動上述函數中的圖層? – muzaffar 2015-04-02 10:14:19

+0

是的,如果整個圖層都具有隻在地圖加載完成時才顯示的功能! – AniV 2015-04-02 16:47:32

1

我剛剛遇到同樣的問題,並能夠成功地關注@ AniV的建議。

但我想拋出額外的細節,這是我的困惑的源頭。谷歌地圖API允許您以兩種方式之一加載GeoJSON的數據:

1)loadGeoJson:這需要一個URL路徑作爲參數,並通過GET請求到URL中JSON拉。假設服務器遵循正確的GeoJSON格式,服務器的JSON響應將被添加到地圖中。

2)addGeoJson:這是你在上面使用的。它將JSON本身作爲參數並將其添加到地圖中。

這裏就是我被絆倒了:我最近剛從loadGeoJson使用addGeoJson切換,並且,事實證明,該事件偵聽器addfeature確實在這兩種方法同樣的方式工作。

對於loadGeoJson,在我看來,服務器返回的所有功能都被一次性添加,以便在添加**全部*標記後觸發事件偵聽器addfeature。但是對於addGeoJson,這些功能似乎每次只能添加一個,因此addfeature偵聽器在添加所有標記之前觸發(或者根本不可能?我無法分辨是哪種情況),因此代碼塊是沒執行。

爲了解決這個問題,我已經成功地使用@ AniV的答案。但是我想提供這些附加信息以防萬一從loadGeoJson轉換到addGeoJson時遇到同樣的問題。