| 
									
										
										
										
											2021-03-25 15:19:44 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  * This is the part of the pipeline which introduces extra points at the center of an area (but only if this is demanded by the wayhandling) | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2021-09-21 02:10:42 +02:00
										 |  |  | import {UIEventSource} from "../../UIEventSource"; | 
					
						
							|  |  |  | import LayerConfig from "../../../Models/ThemeConfig/LayerConfig"; | 
					
						
							|  |  |  | import {GeoOperations} from "../../GeoOperations"; | 
					
						
							|  |  |  | import {FeatureSourceForLayer} from "../FeatureSource"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-20 17:14:55 +02:00
										 |  |  | export default class WayHandlingApplyingFeatureSource implements FeatureSourceForLayer { | 
					
						
							| 
									
										
										
										
											2021-04-23 16:51:44 +02:00
										 |  |  |     public readonly features: UIEventSource<{ feature: any; freshness: Date }[]>; | 
					
						
							|  |  |  |     public readonly name; | 
					
						
							| 
									
										
										
										
											2021-09-20 17:14:55 +02:00
										 |  |  |     public readonly layer; | 
					
						
							| 
									
										
										
										
											2021-01-03 03:09:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-20 17:14:55 +02:00
										 |  |  |     constructor(upstream: FeatureSourceForLayer) { | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  |          | 
					
						
							|  |  |  |         this.name = "Wayhandling(" + upstream.name + ")"; | 
					
						
							| 
									
										
										
										
											2021-09-20 17:14:55 +02:00
										 |  |  |         this.layer = upstream.layer | 
					
						
							|  |  |  |         const layer = upstream.layer.layerDef; | 
					
						
							| 
									
										
										
										
											2021-09-26 17:36:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-20 17:14:55 +02:00
										 |  |  |         if (layer.wayHandling === LayerConfig.WAYHANDLING_DEFAULT) { | 
					
						
							|  |  |  |             // We don't have to do anything fancy
 | 
					
						
							|  |  |  |             // lets just wire up the upstream
 | 
					
						
							|  |  |  |             this.features = upstream.features; | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-03 03:09:52 +01:00
										 |  |  |         this.features = upstream.features.map( | 
					
						
							|  |  |  |             features => { | 
					
						
							| 
									
										
										
										
											2021-04-23 16:51:44 +02:00
										 |  |  |                 if (features === undefined) { | 
					
						
							| 
									
										
										
										
											2021-01-03 03:09:52 +01:00
										 |  |  |                     return; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 const newFeatures: { feature: any, freshness: Date }[] = []; | 
					
						
							|  |  |  |                 for (const f of features) { | 
					
						
							|  |  |  |                     const feat = f.feature; | 
					
						
							| 
									
										
										
										
											2021-04-23 16:51:44 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |                     if (layer.wayHandling === LayerConfig.WAYHANDLING_DEFAULT) { | 
					
						
							| 
									
										
										
										
											2021-01-03 03:09:52 +01:00
										 |  |  |                         newFeatures.push(f); | 
					
						
							|  |  |  |                         continue; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     if (feat.geometry.type === "Point") { | 
					
						
							|  |  |  |                         newFeatures.push(f); | 
					
						
							| 
									
										
										
										
											2021-09-20 17:14:55 +02:00
										 |  |  |                         // feature is a point, nothing to do here
 | 
					
						
							| 
									
										
										
										
											2021-01-03 03:09:52 +01:00
										 |  |  |                         continue; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-25 15:19:44 +01:00
										 |  |  |                     // Create the copy
 | 
					
						
							| 
									
										
										
										
											2021-01-03 03:09:52 +01:00
										 |  |  |                     const centerPoint = GeoOperations.centerpoint(feat); | 
					
						
							| 
									
										
										
										
											2021-04-23 16:51:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-03 03:09:52 +01:00
										 |  |  |                     newFeatures.push({feature: centerPoint, freshness: f.freshness}); | 
					
						
							| 
									
										
										
										
											2021-04-23 16:51:44 +02:00
										 |  |  |                     if (layer.wayHandling === LayerConfig.WAYHANDLING_CENTER_AND_WAY) { | 
					
						
							| 
									
										
										
										
											2021-01-03 03:09:52 +01:00
										 |  |  |                         newFeatures.push(f); | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 return newFeatures; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |