forked from MapComplete/MapComplete
		
	Various fixes
This commit is contained in:
		
							parent
							
								
									18044ff22b
								
							
						
					
					
						commit
						07fd8f404a
					
				
					 14 changed files with 154 additions and 60 deletions
				
			
		|  | @ -10,6 +10,10 @@ export class BBox { | |||
|     readonly minLat: number; | ||||
|     readonly minLon: number; | ||||
| 
 | ||||
|     /*** | ||||
|      * Coordinates should be [[lon, lat],[lon, lat]] | ||||
|      * @param coordinates | ||||
|      */ | ||||
|     constructor(coordinates) { | ||||
|         this.maxLat = -90; | ||||
|         this.maxLon = -180; | ||||
|  | @ -44,6 +48,21 @@ export class BBox { | |||
|         } | ||||
|         return feature.bbox; | ||||
|     } | ||||
|      | ||||
|     static bboxAroundAll(bboxes: BBox[]): BBox{ | ||||
|         let maxLat: number = -90; | ||||
|         let maxLon: number= -180; | ||||
|         let minLat: number= 80; | ||||
|         let minLon: number= 180; | ||||
| 
 | ||||
|         for (const bbox of bboxes) { | ||||
|             maxLat = Math.max(maxLat, bbox.maxLat) | ||||
|             maxLon = Math.max(maxLon, bbox.maxLon) | ||||
|             minLat = Math.min(minLat, bbox.minLat) | ||||
|             minLon = Math.min(minLon, bbox.minLon) | ||||
|         } | ||||
|         return new BBox([[maxLon, maxLat],[minLon,minLat]]) | ||||
|     } | ||||
| 
 | ||||
|     static fromTile(z: number, x: number, y: number): BBox { | ||||
|         return new BBox(Tiles.tile_bounds_lon_lat(z, x, y)) | ||||
|  |  | |||
|  | @ -14,6 +14,7 @@ export interface ExtraFuncParams { | |||
|      */ | ||||
|     getFeaturesWithin: (layerId: string, bbox: BBox) => any[][], | ||||
|     memberships: RelationsTracker | ||||
|     getFeatureById: (id:string) => any | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  | @ -79,20 +80,19 @@ class DistanceToFunc implements ExtraFunction { | |||
|             } | ||||
|             if (typeof arg0 === "number") { | ||||
|                 // Feature._lon and ._lat is conveniently place by one of the other metatags
 | ||||
|                 return GeoOperations.distanceBetween([arg0, lat], [feature._lon, feature._lat]); | ||||
|                 return GeoOperations.distanceBetween([arg0, lat], GeoOperations.centerpointCoordinates(feature)); | ||||
|             } | ||||
|             if (typeof arg0 === "string") { | ||||
|                 // This is an identifier
 | ||||
|                 // TODO FIXME
 | ||||
|                 const feature = undefined // State.state.allElements.ContainingFeatures.get(arg0);
 | ||||
|                 const feature =  featuresPerLayer.getFeatureById(arg0) | ||||
|                 if (feature === undefined) { | ||||
|                     return undefined; | ||||
|                 } | ||||
|                 arg0 = feature; | ||||
|             } | ||||
| 
 | ||||
|             // arg0 is probably a feature
 | ||||
|             return GeoOperations.distanceBetween(GeoOperations.centerpointCoordinates(arg0), [feature._lon, feature._lat]) | ||||
|             // arg0 is probably a geojsonfeature
 | ||||
|             return GeoOperations.distanceBetween(GeoOperations.centerpointCoordinates(arg0), GeoOperations.centerpointCoordinates(feature)) | ||||
| 
 | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -448,11 +448,12 @@ export default class FeaturePipeline { | |||
|         window.setTimeout( | ||||
|             () => { | ||||
|                 const layerDef = src.layer.layerDef; | ||||
|                 const somethingChanged = MetaTagging.addMetatags( | ||||
|                 MetaTagging.addMetatags( | ||||
|                     src.features.data, | ||||
|                     { | ||||
|                         memberships: this.relationTracker, | ||||
|                         getFeaturesWithin: (layerId, bbox: BBox) => self.GetFeaturesWithin(layerId, bbox) | ||||
|                         getFeaturesWithin: (layerId, bbox: BBox) => self.GetFeaturesWithin(layerId, bbox), | ||||
|                         getFeatureById: (id:string) => self.state.allElements.ContainingFeatures.get(id) | ||||
|                     }, | ||||
|                     layerDef, | ||||
|                     { | ||||
|  |  | |||
|  | @ -178,8 +178,6 @@ export default class MetaTagging { | |||
| 
 | ||||
|             try { | ||||
|                 const functions = MetaTagging.createFunctionsForFeature(layer.id, calculatedTags) | ||||
| 
 | ||||
| 
 | ||||
|                 ExtraFunctions.FullPatchFeature(params, feature); | ||||
|                 for (const f of functions) { | ||||
|                     f(feature); | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ import {UIEventSource} from "../UIEventSource"; | |||
| import MapState from "./MapState"; | ||||
| import SelectedFeatureHandler from "../Actors/SelectedFeatureHandler"; | ||||
| import Hash from "../Web/Hash"; | ||||
| import {BBox} from "../BBox"; | ||||
| 
 | ||||
| export default class FeaturePipelineState extends MapState { | ||||
| 
 | ||||
|  | @ -29,6 +30,8 @@ export default class FeaturePipelineState extends MapState { | |||
| 
 | ||||
|                 clusterCounter.addTile(source) | ||||
| 
 | ||||
|                 const sourceBBox = source.features.map(allFeatures => BBox.bboxAroundAll(allFeatures.map(f => BBox.get(f.feature)))) | ||||
|                  | ||||
|                 // Do show features indicates if the 'showDataLayer' should be shown
 | ||||
|                 const doShowFeatures = source.features.map( | ||||
|                     f => { | ||||
|  | @ -44,7 +47,7 @@ export default class FeaturePipelineState extends MapState { | |||
|                             return false; | ||||
|                         } | ||||
| 
 | ||||
|                         if (!source.bbox.overlapsWith(bounds)) { | ||||
|                         if (!sourceBBox.data.overlapsWith(bounds)) { | ||||
|                             // Not within range -> features are hidden
 | ||||
|                             return false | ||||
|                         } | ||||
|  | @ -81,7 +84,7 @@ export default class FeaturePipelineState extends MapState { | |||
| 
 | ||||
| 
 | ||||
|                         return true | ||||
|                     }, [this.currentBounds, source.layer.isDisplayed] | ||||
|                     }, [this.currentBounds, source.layer.isDisplayed, sourceBBox] | ||||
|                 ) | ||||
| 
 | ||||
|                 new ShowDataLayer( | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue