forked from MapComplete/MapComplete
		
	Full code cleanup
This commit is contained in:
		
							parent
							
								
									3a4a2a2016
								
							
						
					
					
						commit
						fa971ffbbf
					
				
					 300 changed files with 16352 additions and 19284 deletions
				
			
		|  | @ -32,7 +32,7 @@ import {ImportUtils} from "./ImportUtils"; | |||
| /** | ||||
|  * Given the data to import, the bbox and the layer, will query overpass for similar items | ||||
|  */ | ||||
| export default class ConflationChecker extends Combine implements FlowStep<{features: any[], layer: LayerConfig}> { | ||||
| export default class ConflationChecker extends Combine implements FlowStep<{ features: any[], layer: LayerConfig }> { | ||||
| 
 | ||||
|     public readonly IsValid | ||||
|     public readonly Value | ||||
|  | @ -40,12 +40,12 @@ export default class ConflationChecker extends Combine implements FlowStep<{feat | |||
|     constructor( | ||||
|         state, | ||||
|         params: { bbox: BBox, layer: LayerConfig, geojson: any }) { | ||||
|          | ||||
|          | ||||
| 
 | ||||
| 
 | ||||
|         const bbox = params.bbox.padAbsolute(0.0001) | ||||
|         const layer = params.layer; | ||||
|         const toImport = params.geojson; | ||||
|         let overpassStatus = new UIEventSource<{ error: string } | "running" | "success" | "idle" | "cached" >("idle") | ||||
|         let overpassStatus = new UIEventSource<{ error: string } | "running" | "success" | "idle" | "cached">("idle") | ||||
|         const cacheAge = new UIEventSource<number>(undefined); | ||||
|         const fromLocalStorage = IdbLocalStorage.Get<[any, Date]>("importer-overpass-cache-" + layer.id, { | ||||
|             whenLoaded: (v) => { | ||||
|  | @ -53,7 +53,7 @@ export default class ConflationChecker extends Combine implements FlowStep<{feat | |||
|                     console.log("Loaded from local storage:", v) | ||||
|                     const [geojson, date] = v; | ||||
|                     const timeDiff = (new Date().getTime() - date.getTime()) / 1000; | ||||
|                     console.log("Loaded ", geojson.features.length," features; cache is ", timeDiff, "seconds old") | ||||
|                     console.log("Loaded ", geojson.features.length, " features; cache is ", timeDiff, "seconds old") | ||||
|                     cacheAge.setData(timeDiff) | ||||
|                     if (timeDiff < 24 * 60 * 60) { | ||||
|                         // Recently cached! 
 | ||||
|  | @ -69,18 +69,20 @@ export default class ConflationChecker extends Combine implements FlowStep<{feat | |||
|                 console.log("Loading from overpass!") | ||||
|                 overpassStatus.setData("running") | ||||
|                 overpass.queryGeoJson(bbox).then( | ||||
|                     ([data, date] ) => { | ||||
|                         console.log("Received overpass-data: ", data.features.length,"features are loaded at ", date); | ||||
|                     ([data, date]) => { | ||||
|                         console.log("Received overpass-data: ", data.features.length, "features are loaded at ", date); | ||||
|                         overpassStatus.setData("success") | ||||
|                         fromLocalStorage.setData([data, date]) | ||||
|                     },  | ||||
|                     (error) => {overpassStatus.setData({error})}) | ||||
|                     }, | ||||
|                     (error) => { | ||||
|                         overpassStatus.setData({error}) | ||||
|                     }) | ||||
| 
 | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
| 
 | ||||
|         const geojson : UIEventSource<any> = fromLocalStorage.map(d => { | ||||
|         const geojson: UIEventSource<any> = fromLocalStorage.map(d => { | ||||
|             if (d === undefined) { | ||||
|                 return undefined | ||||
|             } | ||||
|  | @ -102,21 +104,20 @@ export default class ConflationChecker extends Combine implements FlowStep<{feat | |||
|         }) | ||||
|         osmLiveData.SetClass("w-full").SetStyle("height: 500px") | ||||
|         const preview = new StaticFeatureSource(geojson.map(geojson => { | ||||
|             if(geojson?.features === undefined){ | ||||
|             if (geojson?.features === undefined) { | ||||
|                 return [] | ||||
|             } | ||||
|             const zoomedEnough: boolean = osmLiveData.location.data.zoom >= Number(zoomLevel.GetValue().data) | ||||
|             if(!zoomedEnough){ | ||||
|             if (!zoomedEnough) { | ||||
|                 return [] | ||||
|             } | ||||
|             const bounds = osmLiveData.bounds.data | ||||
|             return geojson.features.filter(f => BBox.get(f).overlapsWith(bounds)) | ||||
|         }, [osmLiveData.bounds, zoomLevel.GetValue()]), false); | ||||
|          | ||||
|         | ||||
|         | ||||
| 
 | ||||
| 
 | ||||
|         new ShowDataLayer({ | ||||
|             layerToShow:new LayerConfig(currentview), | ||||
|             layerToShow: new LayerConfig(currentview), | ||||
|             state, | ||||
|             leafletMap: osmLiveData.leafletMap, | ||||
|             popup: undefined, | ||||
|  | @ -128,7 +129,7 @@ export default class ConflationChecker extends Combine implements FlowStep<{feat | |||
| 
 | ||||
| 
 | ||||
|         new ShowDataLayer({ | ||||
|             layerToShow:layer, | ||||
|             layerToShow: layer, | ||||
|             state, | ||||
|             leafletMap: osmLiveData.leafletMap, | ||||
|             popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), | ||||
|  | @ -137,18 +138,18 @@ export default class ConflationChecker extends Combine implements FlowStep<{feat | |||
|         }) | ||||
| 
 | ||||
|         new ShowDataLayer({ | ||||
|             layerToShow:new LayerConfig(import_candidate), | ||||
|             layerToShow: new LayerConfig(import_candidate), | ||||
|             state, | ||||
|             leafletMap: osmLiveData.leafletMap, | ||||
|             popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), | ||||
|             zoomToFeatures: false, | ||||
|             features: new StaticFeatureSource(toImport.features, false) | ||||
|         }) | ||||
|          | ||||
| 
 | ||||
|         const nearbyCutoff = ValidatedTextField.InputForType("pnat") | ||||
|         nearbyCutoff.SetClass("ml-1 border border-black") | ||||
|         nearbyCutoff.GetValue().syncWith(LocalStorageSource.Get("importer-cutoff", "25"), true) | ||||
|          | ||||
| 
 | ||||
|         const matchedFeaturesMap = Minimap.createMiniMap({ | ||||
|             allowMoving: true, | ||||
|             background | ||||
|  | @ -157,21 +158,21 @@ export default class ConflationChecker extends Combine implements FlowStep<{feat | |||
| 
 | ||||
|         // Featuresource showing OSM-features which are nearby a toImport-feature 
 | ||||
|         const nearbyFeatures = new StaticFeatureSource(geojson.map(osmData => { | ||||
|             if(osmData?.features === undefined){ | ||||
|             if (osmData?.features === undefined) { | ||||
|                 return [] | ||||
|             } | ||||
|             const maxDist = Number(nearbyCutoff.GetValue().data) | ||||
|             return osmData.features.filter(f =>  | ||||
|                 toImport.features.some(imp =>  | ||||
|                     maxDist >= GeoOperations.distanceBetween(imp.geometry.coordinates, GeoOperations.centerpointCoordinates(f))) ) | ||||
|             return osmData.features.filter(f => | ||||
|                 toImport.features.some(imp => | ||||
|                     maxDist >= GeoOperations.distanceBetween(imp.geometry.coordinates, GeoOperations.centerpointCoordinates(f)))) | ||||
|         }, [nearbyCutoff.GetValue()]), false); | ||||
|         const paritionedImport = ImportUtils.partitionFeaturesIfNearby(toImport, geojson, nearbyCutoff.GetValue().map(Number)); | ||||
| 
 | ||||
|         // Featuresource showing OSM-features which are nearby a toImport-feature 
 | ||||
|         const toImportWithNearby = new StaticFeatureSource(paritionedImport.map(els =>els?.hasNearby ?? []), false); | ||||
|         const toImportWithNearby = new StaticFeatureSource(paritionedImport.map(els => els?.hasNearby ?? []), false); | ||||
| 
 | ||||
|         new ShowDataLayer({ | ||||
|             layerToShow:layer, | ||||
|             layerToShow: layer, | ||||
|             state, | ||||
|             leafletMap: matchedFeaturesMap.leafletMap, | ||||
|             popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), | ||||
|  | @ -180,47 +181,47 @@ export default class ConflationChecker extends Combine implements FlowStep<{feat | |||
|         }) | ||||
| 
 | ||||
|         new ShowDataLayer({ | ||||
|             layerToShow:new LayerConfig(import_candidate), | ||||
|             layerToShow: new LayerConfig(import_candidate), | ||||
|             state, | ||||
|             leafletMap: matchedFeaturesMap.leafletMap, | ||||
|             popup: (tags, layer) => new FeatureInfoBox(tags, layer, state), | ||||
|             zoomToFeatures: false, | ||||
|             features: toImportWithNearby | ||||
|         }) | ||||
|          | ||||
|          | ||||
|         const conflationMaps = new Combine([   | ||||
| 
 | ||||
| 
 | ||||
|         const conflationMaps = new Combine([ | ||||
|             new VariableUiElement( | ||||
|             geojson.map(geojson => { | ||||
|                 if (geojson === undefined) { | ||||
|                     return undefined; | ||||
|                 } | ||||
|                 return new SubtleButton(Svg.download_svg(), "Download the loaded geojson from overpass").onClick(() => { | ||||
|                     Utils.offerContentsAsDownloadableFile(JSON.stringify(geojson, null, "  "), "mapcomplete-" + layer.id + ".geojson", { | ||||
|                         mimetype: "application/json+geo" | ||||
|                     }) | ||||
|                 }); | ||||
|             })), | ||||
|                 geojson.map(geojson => { | ||||
|                     if (geojson === undefined) { | ||||
|                         return undefined; | ||||
|                     } | ||||
|                     return new SubtleButton(Svg.download_svg(), "Download the loaded geojson from overpass").onClick(() => { | ||||
|                         Utils.offerContentsAsDownloadableFile(JSON.stringify(geojson, null, "  "), "mapcomplete-" + layer.id + ".geojson", { | ||||
|                             mimetype: "application/json+geo" | ||||
|                         }) | ||||
|                     }); | ||||
|                 })), | ||||
|             new VariableUiElement(cacheAge.map(age => { | ||||
|                 if(age === undefined){ | ||||
|                 if (age === undefined) { | ||||
|                     return undefined; | ||||
|                 } | ||||
|                 if(age < 0){ | ||||
|                 if (age < 0) { | ||||
|                     return new FixedUiElement("Cache was expired") | ||||
|                 } | ||||
|                 return new FixedUiElement("Loaded data is from the cache and is "+Utils.toHumanTime(age)+" old") | ||||
|                 return new FixedUiElement("Loaded data is from the cache and is " + Utils.toHumanTime(age) + " old") | ||||
|             })), | ||||
| 
 | ||||
|             new Title("Live data on OSM"), | ||||
|             osmLiveData, | ||||
|             new Combine(["The live data is shown if the zoomlevel is at least ", zoomLevel, ". The current zoom level is ", new VariableUiElement(osmLiveData.location.map(l => ""+l.zoom))]).SetClass("flex"), | ||||
|             new Combine(["The live data is shown if the zoomlevel is at least ", zoomLevel, ". The current zoom level is ", new VariableUiElement(osmLiveData.location.map(l => "" + l.zoom))]).SetClass("flex"), | ||||
| 
 | ||||
|             new Title("Nearby features"), | ||||
|             new Combine([  "The following map shows features to import which have an OSM-feature within ", nearbyCutoff, "meter"]).SetClass("flex"), | ||||
|             new Combine(["The following map shows features to import which have an OSM-feature within ", nearbyCutoff, "meter"]).SetClass("flex"), | ||||
|             new FixedUiElement("The red elements on the following map will <b>not</b> be imported!").SetClass("alert"), | ||||
|             "Set the range to 0 or 1 if you want to import them all", | ||||
|             matchedFeaturesMap]).SetClass("flex flex-col") | ||||
|          | ||||
| 
 | ||||
|         super([ | ||||
|             new Title("Comparison with existing data"), | ||||
|             new VariableUiElement(overpassStatus.map(d => { | ||||
|  | @ -230,16 +231,16 @@ export default class ConflationChecker extends Combine implements FlowStep<{feat | |||
|                 if (d["error"] !== undefined) { | ||||
|                     return new FixedUiElement("Could not load latest data from overpass: " + d["error"]).SetClass("alert") | ||||
|                 } | ||||
|                 if(d === "running"){ | ||||
|                 if (d === "running") { | ||||
|                     return new Loading("Querying overpass...") | ||||
|                 } | ||||
|                 if(d === "cached"){ | ||||
|                 if (d === "cached") { | ||||
|                     return conflationMaps | ||||
|                 } | ||||
|                 if(d === "success"){ | ||||
|                 if (d === "success") { | ||||
|                     return conflationMaps | ||||
|                 } | ||||
|                 return new FixedUiElement("Unexpected state "+d).SetClass("alert") | ||||
|                 return new FixedUiElement("Unexpected state " + d).SetClass("alert") | ||||
|             })) | ||||
| 
 | ||||
|         ]) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue