diff --git a/src/js/AstroMap.js b/src/js/AstroMap.js index ff596ddafe5b1483a3c9c84474004376487591fb..51bf7830fae18d149ae2808cf33999999f45e48b 100644 --- a/src/js/AstroMap.js +++ b/src/js/AstroMap.js @@ -2,9 +2,6 @@ import L from "leaflet"; import "proj4leaflet"; import AstroProj from "./AstroProj"; import LayerCollection from "./LayerCollection"; -import FecthData from "./FetchData"; -import { data } from "autoprefixer"; - /** * @class AstroMap @@ -269,21 +266,7 @@ export default L.Map.AstroMap = L.Map.extend({ */ refreshFeatures: function(visibleCollectionId, collectionsObj) { - // Will we need more than 6 colors for more than 6 different collections? - let colors = [ "#17A398", "#EE6C4D", "#662C91", "#F3DE2C", "#33312E", "#0267C1" ]; - let lightcolors = [ "#3DE3D5", "#F49C86", "#9958CC", "#F7E96F", "#DDDDDD", "#2A9BFD" ]; - // Old, removes separate control - // if(this._footprintControl) { - // this._footprintControl.remove(); - // } - - // removes layers previously loaded - for(let i = 0; i < this._geoLayers.length; i++){ - if(this._geoLayers[i]) { - L.LayerCollection.layerControl.removeLayer(this._geoLayers[i]); - this._geoLayers[i].clearLayers(); - } - } + this.removePreviousLayers(this._geoLayers, L); // initialize featureCollection as an array // (convert obj passed from FootprintResults.jsx) @@ -299,41 +282,32 @@ export default L.Map.AstroMap = L.Map.extend({ // For each Collection (and each geoLayer) for (let i = 0; i < featureCollections.length; i++) { + + let curr_collection = featureCollections[i]; + let title = curr_collection.title; + let sld_text = curr_collection.styleSheets; + let features_in_curr_collection = curr_collection.features.length; + let sld_style = null; + let wrappedFeatures = null; - let title = featureCollections[i].title; - - let sld_text = featureCollections[i].styleSheets; - // set style if available - - let myStyle = null; // Add each _geoLayer that has footprints to the FootprintCollection object. // The collection title is used as the property name // [old] and it shows up as the layer title when added to the separate Leaflet control - if(featureCollections[i].features.length > 0) { + if(features_in_curr_collection > 0) { - if (sld_text != null) { - this.SLDStyler = new L.SLDStyler(sld_text); - myStyle = this.SLDStyler.getStyleFunction(); - - } - else{ - // Set colors if available - myStyle = i < colors.length ? {fillColor: colors[i], color: lightcolors[i]} : {}; - } - - // Wrap features - let wrappedFeatures = this.cloneWestEast(featureCollections[i].features); + sld_style = this.setStyle(sld_text, this.SLDStyler, i); + wrappedFeatures = this.cloneWestEast(curr_collection.features); this._geoLayers[i] = L.geoJSON(wrappedFeatures, { - id: featureCollections[i].id, - style: myStyle + id: curr_collection.id, + style: sld_style }) this._geoLayers[i].on({click: this.handleClick}); // Add click listener // Add layers to map if they should be visible - if(featureCollections[i].id === visibleCollectionId) { + if(curr_collection.id === visibleCollectionId) { this._geoLayers[i].addTo(this); this.SLDStyler.symbolize_with_icons(this._geoLayers[i], this); } @@ -347,6 +321,8 @@ export default L.Map.AstroMap = L.Map.extend({ } } + + // Add collections to a separate control // this._footprintControl = L.control // 1. Make a leaflet control // .layers(null, this._footprintCollection, {collapsed: true}) // 2. Add the footprint collections to the control as layers @@ -355,6 +331,33 @@ export default L.Map.AstroMap = L.Map.extend({ } }, + setStyle: function(sld_style, SLDStyler, index){ + + let colors = [ "#17A398", "#EE6C4D", "#662C91", "#F3DE2C", "#33312E", "#0267C1" ]; + let lightcolors = [ "#3DE3D5", "#F49C86", "#9958CC", "#F7E96F", "#DDDDDD", "#2A9BFD" ]; + let defaultStyle = null; + + if (sld_style != null) { + SLDStyler = new L.SLDStyler(sld_style); + return SLDStyler.getStyleFunction(); + } + + defaultStyle = index < colors.length ? {fillColor: colors[index], color: lightcolors[index]} : {};; + return defaultStyle; + }, + + // removes layers previously loaded + removePreviousLayers: function(geoLayers, L) { + // removes layers previously loaded + let collection_amount = geoLayers.length; + for(let i = 0; i < collection_amount; i++){ + if(geoLayers[i]) { + L.LayerCollection.layerControl.removeLayer(geoLayers[i]); + geoLayers[i].clearLayers(); + } + } + }, + /** * @function AstroMap.prototype.parseJSON * @description Parses the USGS JSON, creates layer objects for a particular target and projection,