| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | import FeatureSource, { Tiled } from "../../Logic/FeatureSource/FeatureSource" | 
					
						
							|  |  |  | import { Store, UIEventSource } from "../../Logic/UIEventSource" | 
					
						
							|  |  |  | import LayerConfig from "../../Models/ThemeConfig/LayerConfig" | 
					
						
							|  |  |  | import ShowDataLayer from "./ShowDataLayer" | 
					
						
							|  |  |  | import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource" | 
					
						
							|  |  |  | import { GeoOperations } from "../../Logic/GeoOperations" | 
					
						
							|  |  |  | import { Tiles } from "../../Models/TileRange" | 
					
						
							| 
									
										
										
										
											2021-09-29 01:12:29 +02:00
										 |  |  | import * as clusterstyle from "../../assets/layers/cluster_style/cluster_style.json" | 
					
						
							| 
									
										
										
										
											2021-11-07 16:34:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  | export default class ShowTileInfo { | 
					
						
							| 
									
										
										
										
											2021-12-21 18:35:31 +01:00
										 |  |  |     public static readonly styling = new LayerConfig(clusterstyle, "ShowTileInfo", true) | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-27 01:50:41 +02:00
										 |  |  |     constructor( | 
					
						
							|  |  |  |         options: { | 
					
						
							|  |  |  |             source: FeatureSource & Tiled | 
					
						
							|  |  |  |             leafletMap: UIEventSource<any> | 
					
						
							|  |  |  |             layer?: LayerConfig | 
					
						
							|  |  |  |             doShowLayer?: UIEventSource<boolean> | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         state | 
					
						
							|  |  |  |     ) { | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  |         const source = options.source | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         const metaFeature: Store<{ feature; freshness: Date }[]> = source.features.map( | 
					
						
							|  |  |  |             (features) => { | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  |                 const bbox = source.bbox | 
					
						
							|  |  |  |                 const [z, x, y] = Tiles.tile_from_index(source.tileIndex) | 
					
						
							|  |  |  |                 const box = { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     type: "Feature", | 
					
						
							|  |  |  |                     properties: { | 
					
						
							|  |  |  |                         z: z, | 
					
						
							|  |  |  |                         x: x, | 
					
						
							|  |  |  |                         y: y, | 
					
						
							|  |  |  |                         tileIndex: source.tileIndex, | 
					
						
							|  |  |  |                         source: source.name, | 
					
						
							|  |  |  |                         count: features.length, | 
					
						
							|  |  |  |                         tileId: source.name + "/" + source.tileIndex, | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  |                     }, | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     geometry: { | 
					
						
							|  |  |  |                         type: "Polygon", | 
					
						
							|  |  |  |                         coordinates: [ | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  |                             [ | 
					
						
							|  |  |  |                                 [bbox.minLon, bbox.minLat], | 
					
						
							|  |  |  |                                 [bbox.minLon, bbox.maxLat], | 
					
						
							|  |  |  |                                 [bbox.maxLon, bbox.maxLat], | 
					
						
							|  |  |  |                                 [bbox.maxLon, bbox.minLat], | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                                 [bbox.minLon, bbox.minLat], | 
					
						
							|  |  |  |                             ], | 
					
						
							|  |  |  |                         ], | 
					
						
							|  |  |  |                     }, | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  |                 } | 
					
						
							|  |  |  |                 const center = GeoOperations.centerpoint(box) | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 return [box, center].map((feature) => ({ feature, freshness: new Date() })) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         new ShowDataLayer({ | 
					
						
							|  |  |  |             layerToShow: ShowTileInfo.styling, | 
					
						
							| 
									
										
										
										
											2022-06-05 02:24:14 +02:00
										 |  |  |             features: new StaticFeatureSource(metaFeature), | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  |             leafletMap: options.leafletMap, | 
					
						
							| 
									
										
										
										
											2022-01-19 20:34:04 +01:00
										 |  |  |             doShowLayer: options.doShowLayer, | 
					
						
							| 
									
										
										
										
											2022-10-27 01:50:41 +02:00
										 |  |  |             state, | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  |         }) | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | } |