@@ -22,15 +22,14 @@ export class DataLayerManager {
2222 * Adds a new Data Layer to the map.
2323 */
2424 addDataLayer ( layer : AgmDataLayer ) {
25- const newLayer = this . _wrapper . getNativeMap ( ) . then ( m => {
26- var dataLayer = new google . maps . Data ( < DataOptions > {
27- map : m ,
28- style : layer . style
29- } ) ;
25+ const newLayer = this . _wrapper . createDataLayer ( < DataOptions > {
26+ style : layer . style
27+ } )
28+ . then ( d => {
3029 if ( layer . geoJson ) {
31- dataLayer . features = dataLayer . addGeoJson ( layer . geoJson ) ;
30+ this . getDataFeatures ( d , layer . geoJson ) . then ( features => d . features = features ) ;
3231 }
33- return dataLayer ;
32+ return d ;
3433 } ) ;
3534 this . _layers . set ( layer , newLayer ) ;
3635 }
@@ -42,7 +41,7 @@ export class DataLayerManager {
4241 } ) ;
4342 }
4443
45- updateGeoJson ( layer : AgmDataLayer , geoJson : Object ) {
44+ updateGeoJson ( layer : AgmDataLayer , geoJson : Object | string ) {
4645 this . _layers . get ( layer ) . then ( l => {
4746 l . forEach ( function ( feature : Feature ) {
4847 l . remove ( feature ) ;
@@ -52,7 +51,7 @@ export class DataLayerManager {
5251 l . features . splice ( index , 1 ) ;
5352 }
5453 } ) ;
55- l . features = l . addGeoJson ( geoJson ) ;
54+ this . getDataFeatures ( l , geoJson ) . then ( features => l . features = features ) ;
5655 } ) ;
5756 }
5857
@@ -76,4 +75,26 @@ export class DataLayerManager {
7675 } ) ;
7776 } ) ;
7877 }
78+
79+ /**
80+ * Extract features from a geoJson using google.maps Data Class
81+ * @param d : google.maps.Data class instance
82+ * @param geoJson : url or geojson object
83+ */
84+ getDataFeatures ( d : Data , geoJson : Object | string ) : Promise < Feature [ ] > {
85+ return new Promise < Feature [ ] > ( ( resolve , reject ) => {
86+ if ( typeof geoJson === 'object' ) {
87+ try {
88+ const features = d . addGeoJson ( geoJson ) ;
89+ resolve ( features ) ;
90+ } catch ( e ) {
91+ reject ( e ) ;
92+ }
93+ } else if ( typeof geoJson === 'string' ) {
94+ d . loadGeoJson ( geoJson , null , resolve ) ;
95+ } else {
96+ reject ( `Impossible to extract features from geoJson: wrong argument type` ) ;
97+ }
98+ } ) ;
99+ }
79100}
0 commit comments