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…
Reference in a new issue