forked from MapComplete/MapComplete
		
	Download cached features as geojson
This commit is contained in:
		
							parent
							
								
									f5c7683d9d
								
							
						
					
					
						commit
						b68bf7b950
					
				
					 5 changed files with 32 additions and 0 deletions
				
			
		|  | @ -427,6 +427,8 @@ export class InitUiElements { | |||
|             state.locationControl, | ||||
|             state.selectedElement); | ||||
| 
 | ||||
|         State.state.featurePipeline = source; | ||||
| 
 | ||||
|         new ShowDataLayer(source.features, State.state.leafletMap, State.state.layoutToUse); | ||||
| 
 | ||||
|         const selectedFeatureHandler = new SelectedFeatureHandler(Hash.hash, State.state.selectedElement, source, State.state.osmApiFeatureSource); | ||||
|  |  | |||
							
								
								
									
										2
									
								
								State.ts
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								State.ts
									
										
									
									
									
								
							|  | @ -19,6 +19,7 @@ import TitleHandler from "./Logic/Actors/TitleHandler"; | |||
| import PendingChangesUploader from "./Logic/Actors/PendingChangesUploader"; | ||||
| import {Relation} from "./Logic/Osm/ExtractRelations"; | ||||
| import OsmApiFeatureSource from "./Logic/FeatureSource/OsmApiFeatureSource"; | ||||
| import FeaturePipeline from "./Logic/FeatureSource/FeaturePipeline"; | ||||
| 
 | ||||
| /** | ||||
|  * Contains the global state: a bunch of UI-event sources | ||||
|  | @ -95,6 +96,7 @@ export default class State { | |||
|     public readonly featureSwitchIsDebugging: UIEventSource<boolean>; | ||||
|     public readonly featureSwitchShowAllQuestions: UIEventSource<boolean>; | ||||
|     public readonly featureSwitchApiURL: UIEventSource<string>; | ||||
|     public readonly featurePipeline: FeaturePipeline; | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|  |  | |||
|  | @ -7,6 +7,8 @@ import Translations from "../i18n/Translations"; | |||
| import LayerConfig from "../../Customizations/JSON/LayerConfig"; | ||||
| import BaseUIElement from "../BaseUIElement"; | ||||
| import {Translation} from "../i18n/Translation"; | ||||
| import {SubtleButton} from "../Base/SubtleButton"; | ||||
| import {exportAsGeoJson} from "../GeoJsonExport"; | ||||
| 
 | ||||
| /** | ||||
|  * Shows the panel with all layers and a toggle for each of them | ||||
|  | @ -74,6 +76,9 @@ export default class LayerSelection extends Combine { | |||
|             ); | ||||
|         } | ||||
| 
 | ||||
|         const downloadButton = new SubtleButton("./assets/svg/floppy.svg", "Download visible data as geojson") | ||||
|         downloadButton.onClick(() => exportAsGeoJson(State.state.featurePipeline)) // TODO: Define this
 | ||||
|         checkboxes.push(downloadButton) | ||||
| 
 | ||||
|         super(checkboxes) | ||||
|         this.SetStyle("display:flex;flex-direction:column;") | ||||
|  |  | |||
							
								
								
									
										15
									
								
								UI/GeoJsonExport.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								UI/GeoJsonExport.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| import FeaturePipeline from "../Logic/FeatureSource/FeaturePipeline"; | ||||
| import {Utils} from "../Utils"; | ||||
| 
 | ||||
| export function exportAsGeoJson(featurePipeline: FeaturePipeline, options?: {metadata?: boolean}) { | ||||
|     let defaults = { | ||||
|         metadata: false | ||||
|     } | ||||
|     options = Utils.setDefaults(options, defaults); | ||||
|     // Select all features, ignore the freshness and other data
 | ||||
|     // TODO: Remove mapcomplete metadata (starting with underscore)
 | ||||
|     let featureList: JSON[] = featurePipeline? featurePipeline.features.data.map((feature) => feature.feature) : ["I'm empty"]; | ||||
|     let geojson = {type: "FeatureCollection", features: featureList} | ||||
| 
 | ||||
|     Utils.offerContentsAsDownloadableFile(JSON.stringify(geojson), "Geodata.json"); | ||||
| } | ||||
							
								
								
									
										8
									
								
								Utils.ts
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								Utils.ts
									
										
									
									
									
								
							|  | @ -447,6 +447,14 @@ export class Utils { | |||
|             b: parseInt(hex.substr(5, 2), 16), | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static setDefaults(options, defaults){ | ||||
|         let result = {}; | ||||
|         for (let key of defaults){ | ||||
|             result[key] = key in options ? options[key] : defaults[key]; | ||||
|         } | ||||
|         return result; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| export interface TileRange { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue