2017-01-14 48 views
0

我有一個角度2應用程序,我整合了谷歌地圖。 我有兩個geojson文件,我從服務器獲取並需要在地圖上顯示。這些文件包含每個功能的屬性顏色。如何確保geojson文件已正確加載?

我在獲取文件後動態地包含顏色。

在我的地圖組件我有以下幾點:

ngOnInit() { 
     this.subscription = this.service.loadGeoJson().subscribe(() => this.geoJsonInit()); 
    } 

    ngOnDestroy() { this.subscription.unsubscribe(); } 

    private geoJsonInit() { 
     Promise.resolve(dashboardMapService.getAllGeoJsonData().then(geoData => this.geoJsonData.push(...geoData))).then(() => dashboardMapService.loadAPI().then(res => this.onMapsReady())); 
    } 

在地圖服務,我有以下幾點:

const GEO_JSON: Array<Object> = []; 
    let GeoJsonPromise   = Promise.resolve(GEO_JSON); 

//rest of service 

static getAllGeoJsonData() { 
     return GeoJsonPromise; 
    } 

    loadGeoJson(): Observable<any> { 
     if (GEO_JSON && GEO_JSON.length > 0) return Observable.of(GEO_JSON); 
     else 
      return Observable.forkJoin([ this.loadDistrictsGeoJson(), this.loadSubDistrictsGeoJson() ]).switchMap(d => this.GeoJsonInit(d)); 
    } 

我現在面臨的問題是,在最初的負載時,多邊形顯示在地圖上但沒有顏色。 但如果我切換路線並返回到地圖路線,則會顯示顏色。

在控制檯中。 feature.getProperty('color')最初顯示爲undefined, ,但是在從地圖路線來回移動後,它們被定義。

所以我假設傳遞的geojsons文件最初不包含顏色。

如何確保geojsons在加載到地圖前正確提取?

回答

0
private geoJsonInit() { 
    Promise.resolve(dashboardMapService.getAllGeoJsonData().then(geoData => this.geoJsonData.push(...geoData))).then(() => dashboardMapService.loadAPI().then(res => this.onMapsReady())); 
} 

返回undefined - 什麼,你應該做的是

private geoJsonInit() { 
    return dashboardMapService.getAllGeoJsonData() 
     .then(geoData => this.geoJsonData.push(...geoData)) 
     .then(() => dashboardMapService.loadAPI()) 
     .then(res => this.onMapsReady()); 
}