forked from MapComplete/MapComplete
		
	Fix: fix some fallout from updating turf to 7.2.0, make 'bbox'-attribute in line with the actual spec
This commit is contained in:
		
							parent
							
								
									c67baa1c65
								
							
						
					
					
						commit
						12869321fd
					
				
					 2 changed files with 29 additions and 36 deletions
				
			
		|  | @ -1,13 +1,12 @@ | |||
| import { bbox } from "@turf/bbox" | ||||
| import { AllGeoJSON } from "@turf/turf" | ||||
| import { TileRange, Tiles } from "../Models/TileRange" | ||||
| import { GeoOperations } from "./GeoOperations" | ||||
| import { Feature, Polygon } from "geojson" | ||||
| import { bbox } from "@turf/bbox" | ||||
| 
 | ||||
| export class BBox { | ||||
|     static global: BBox = new BBox([ | ||||
|         [-180, -90], | ||||
|         [180, 90], | ||||
|         [180, 90] | ||||
|     ]) | ||||
|     readonly maxLat: number | ||||
|     readonly maxLon: number | ||||
|  | @ -30,7 +29,16 @@ export class BBox { | |||
|      * bb.maxLat // => -90
 | ||||
|      * bb.maxLon // => -100
 | ||||
|      */ | ||||
|     constructor(coordinates: [number, number][]) { | ||||
|     constructor(coordinates: [number, number, number, number] | [number, number][]) { | ||||
|         if (!Array.isArray(coordinates[0])) { | ||||
|             // already the bbox coordinates
 | ||||
|             const coors = <[number, number, number, number]>coordinates | ||||
|             this.maxLon = Math.max(coors[0], coors[2]) | ||||
|             this.minLon = Math.min(coors[0], coors[2]) | ||||
|             this.maxLat = Math.max(coors[1], coors[3]) | ||||
|             this.minLat = Math.min(coors[1], coors[3]) | ||||
|             return | ||||
|         } | ||||
|         this.maxLat = -90 | ||||
|         this.maxLon = -180 | ||||
|         this.minLat = 90 | ||||
|  | @ -54,7 +62,7 @@ export class BBox { | |||
|     static fromLeafletBounds(bounds) { | ||||
|         return new BBox([ | ||||
|             [bounds.getWest(), bounds.getNorth()], | ||||
|             [bounds.getEast(), bounds.getSouth()], | ||||
|             [bounds.getEast(), bounds.getSouth()] | ||||
|         ]) | ||||
|     } | ||||
| 
 | ||||
|  | @ -69,26 +77,11 @@ export class BBox { | |||
|      * | ||||
|      */ | ||||
|     static get(feature: Feature): BBox { | ||||
|         const f = <any>feature | ||||
|         if (f.bbox?.overlapsWith === undefined) { | ||||
|             const bb = bbox(<AllGeoJSON>feature) | ||||
|             console.log(">>> ", bb) | ||||
|             if (Array.isArray(bb)) { | ||||
|                 const [minX, minY, maxX, maxY]: number[] = bb | ||||
|                 f["bbox"] = new BBox([ | ||||
|                     [minX, minY], | ||||
|                     [maxX, maxY] | ||||
|                 ]) | ||||
|             } else { | ||||
|                 const { minLon, minLat, maxLon, maxLat } = bb | ||||
|                 // Note: x is longitude
 | ||||
|                 f["bbox"] = new BBox([ | ||||
|                     [minLon, minLat], | ||||
|                     [maxLon, maxLat] | ||||
|                 ]) | ||||
|             } | ||||
|         const f = feature | ||||
|         if (!f.bbox) { | ||||
|             f.bbox = <[number, number, number, number]>bbox(f) | ||||
|         } | ||||
|         return f["bbox"] | ||||
|         return new BBox(<[number, number, number, number]>f.bbox) | ||||
|     } | ||||
| 
 | ||||
|     static bboxAroundAll(bboxes: BBox[]): BBox { | ||||
|  | @ -105,7 +98,7 @@ export class BBox { | |||
|         } | ||||
|         return new BBox([ | ||||
|             [maxLon, maxLat], | ||||
|             [minLon, minLat], | ||||
|             [minLon, minLat] | ||||
|         ]) | ||||
|     } | ||||
| 
 | ||||
|  | @ -132,7 +125,7 @@ export class BBox { | |||
|     public unionWith(other: BBox) { | ||||
|         return new BBox([ | ||||
|             [Math.max(this.maxLon, other.maxLon), Math.max(this.maxLat, other.maxLat)], | ||||
|             [Math.min(this.minLon, other.minLon), Math.min(this.minLat, other.minLat)], | ||||
|             [Math.min(this.minLon, other.minLon), Math.min(this.minLat, other.minLat)] | ||||
|         ]) | ||||
|     } | ||||
| 
 | ||||
|  | @ -185,7 +178,7 @@ export class BBox { | |||
| 
 | ||||
|         return new BBox([ | ||||
|             [lon - s / 2, lat - s / 2], | ||||
|             [lon + s / 2, lat + s / 2], | ||||
|             [lon + s / 2, lat + s / 2] | ||||
|         ]) | ||||
|     } | ||||
| 
 | ||||
|  | @ -242,21 +235,21 @@ export class BBox { | |||
|         const lonDiff = Math.min(maxIncrease / 2, Math.abs(this.maxLon - this.minLon) * factor) | ||||
|         return new BBox([ | ||||
|             [this.minLon - lonDiff, this.minLat - latDiff], | ||||
|             [this.maxLon + lonDiff, this.maxLat + latDiff], | ||||
|             [this.maxLon + lonDiff, this.maxLat + latDiff] | ||||
|         ]) | ||||
|     } | ||||
| 
 | ||||
|     padAbsolute(degrees: number): BBox { | ||||
|         return new BBox([ | ||||
|             [this.minLon - degrees, this.minLat - degrees], | ||||
|             [this.maxLon + degrees, this.maxLat + degrees], | ||||
|             [this.maxLon + degrees, this.maxLat + degrees] | ||||
|         ]) | ||||
|     } | ||||
| 
 | ||||
|     toLngLat(): [[number, number], [number, number]] { | ||||
|         return [ | ||||
|             [this.minLon, this.minLat], | ||||
|             [this.maxLon, this.maxLat], | ||||
|             [this.maxLon, this.maxLat] | ||||
|         ] | ||||
|     } | ||||
| 
 | ||||
|  | @ -275,7 +268,7 @@ export class BBox { | |||
|         return { | ||||
|             type: "Feature", | ||||
|             properties: properties, | ||||
|             geometry: this.asGeometry(), | ||||
|             geometry: this.asGeometry() | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | @ -288,9 +281,9 @@ export class BBox { | |||
|                     [this.maxLon, this.minLat], | ||||
|                     [this.maxLon, this.maxLat], | ||||
|                     [this.minLon, this.maxLat], | ||||
|                     [this.minLon, this.minLat], | ||||
|                 ], | ||||
|             ], | ||||
|                     [this.minLon, this.minLat] | ||||
|                 ] | ||||
|             ] | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | @ -317,7 +310,7 @@ export class BBox { | |||
|             minLon, | ||||
|             maxLon, | ||||
|             minLat, | ||||
|             maxLat, | ||||
|             maxLat | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -99,7 +99,7 @@ export class GeoOperations { | |||
|         if (feature === undefined || feature === null) { | ||||
|             return undefined | ||||
|         } | ||||
|         return <[number, number]>turf.center(<turf.Feature>feature).geometry.coordinates | ||||
|         return <[number, number]>turf.center(feature).geometry.coordinates | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue