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