| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  | import {Tag, TagsFilter} from "../Logic/Tags"; | 
					
						
							| 
									
										
										
										
											2020-07-05 18:59:47 +02:00
										 |  |  | import {UIElement} from "../UI/UIElement"; | 
					
						
							| 
									
										
										
										
											2020-07-12 23:19:05 +02:00
										 |  |  | import {TagDependantUIElementConstructor} from "./UIElementConstructor"; | 
					
						
							| 
									
										
										
										
											2020-07-31 17:38:03 +02:00
										 |  |  | import {TagRenderingOptions} from "./TagRenderingOptions"; | 
					
						
							| 
									
										
										
										
											2020-08-22 03:15:42 +02:00
										 |  |  | import Translation from "../UI/i18n/Translation"; | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  | export interface Preset { | 
					
						
							|  |  |  |     tags: Tag[], | 
					
						
							|  |  |  |     title: string | UIElement, | 
					
						
							|  |  |  |     description?: string | UIElement, | 
					
						
							| 
									
										
										
										
											2020-08-22 02:12:46 +02:00
										 |  |  |     icon?: string | TagRenderingOptions | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | export class LayerDefinition { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-07 16:00:39 +02:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2020-07-29 18:35:46 +02:00
										 |  |  |      * This name is used in the 'hide or show this layer'-buttons | 
					
						
							| 
									
										
										
										
											2020-07-07 16:00:39 +02:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-09-13 03:29:44 +02:00
										 |  |  |     name: string | Translation; | 
					
						
							| 
									
										
										
										
											2020-07-24 14:46:25 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /*** | 
					
						
							|  |  |  |      * This is shown under the 'add new' button to indicate what kind of feature one is adding. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-08-22 03:15:42 +02:00
										 |  |  |     description: string | Translation | 
					
						
							| 
									
										
										
										
											2020-07-24 14:46:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-15 11:23:35 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * These tags are added whenever a new point is added by the user on the map. | 
					
						
							|  |  |  |      * This is the ideal place to add extra info, such as "fixme=added by MapComplete, geometry should be checked" | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-07-31 16:17:16 +02:00
										 |  |  |     presets: Preset[] | 
					
						
							| 
									
										
										
										
											2020-07-15 11:23:35 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Not really used anymore | 
					
						
							|  |  |  |      * This is meant to serve as icon in the buttons | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-08-22 02:12:46 +02:00
										 |  |  |     icon: string | TagRenderingOptions; | 
					
						
							| 
									
										
										
										
											2020-07-15 11:23:35 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Only show this layer starting at this zoom level | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  |     minzoom: number; | 
					
						
							| 
									
										
										
										
											2020-07-15 11:23:35 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * This tagfilter is used to query overpass. | 
					
						
							|  |  |  |      * Examples are: | 
					
						
							|  |  |  |      *  | 
					
						
							|  |  |  |      * new Tag("amenity","drinking_water") | 
					
						
							|  |  |  |      *  | 
					
						
							|  |  |  |      * or a query for bicycle pumps which have two tagging schemes: | 
					
						
							|  |  |  |      * new Or([  | 
					
						
							|  |  |  |      *  new Tag("service:bicycle:pump","yes") , | 
					
						
							|  |  |  |      *  new And([ | 
					
						
							|  |  |  |      *      new Tag("amenity","compressed_air"),  | 
					
						
							|  |  |  |      *      new Tag("bicycle","yes")]) | 
					
						
							|  |  |  |      *  ]) | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  |     overpassFilter: TagsFilter; | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |     public readonly id: string; | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-07 16:00:39 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * This UIElement is rendered as title element in the popup | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-08-22 02:12:46 +02:00
										 |  |  |     title: TagDependantUIElementConstructor | UIElement | string; | 
					
						
							| 
									
										
										
										
											2020-07-07 16:00:39 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * These are the questions/shown attributes in the popup | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-07-12 23:19:05 +02:00
										 |  |  |     elementsToShow: TagDependantUIElementConstructor[]; | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-17 17:21:07 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * A simple styling for the geojson element | 
					
						
							|  |  |  |      * color is the color for areas and ways | 
					
						
							|  |  |  |      * icon is the Leaflet icon | 
					
						
							|  |  |  |      * Note that this is passed entirely to leaflet, so other leaflet attributes work too | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2020-07-18 20:40:51 +02:00
										 |  |  |     style: (tags: any) => { | 
					
						
							|  |  |  |         color: string, | 
					
						
							| 
									
										
										
										
											2020-07-30 16:34:06 +02:00
										 |  |  |         weight?: number, | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |         icon: { | 
					
						
							| 
									
										
										
										
											2020-08-31 02:59:47 +02:00
										 |  |  |             iconUrl: string,  | 
					
						
							| 
									
										
										
										
											2020-09-30 23:34:44 +02:00
										 |  |  |             iconSize?: [number, number],  | 
					
						
							|  |  |  |             popupAnchor?: [number,number],  | 
					
						
							|  |  |  |             iconAnchor?: [number,number] | 
					
						
							| 
									
										
										
										
											2020-07-26 02:01:34 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2020-07-17 17:21:07 +02:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2020-06-27 03:06:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-28 23:33:48 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * If an object of the next layer is contained for this many percent in this feature, it is eaten and not shown | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     maxAllowedOverlapPercentage: number = undefined; | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-22 00:50:30 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * If true, then ways (and polygons) will be converted to a 'point' at the center instead before further processing | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     wayHandling: number = 0; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     static WAYHANDLING_DEFAULT = 0; | 
					
						
							|  |  |  |     static WAYHANDLING_CENTER_ONLY = 1; | 
					
						
							|  |  |  |     static WAYHANDLING_CENTER_AND_WAY = 2; | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |     constructor(id: string, options: { | 
					
						
							| 
									
										
										
										
											2020-08-22 03:15:42 +02:00
										 |  |  |         name: string | Translation, | 
					
						
							|  |  |  |         description: string | Translation, | 
					
						
							| 
									
										
										
										
											2020-08-08 17:50:43 +02:00
										 |  |  |         presets: Preset[], | 
					
						
							| 
									
										
										
										
											2020-07-18 20:40:51 +02:00
										 |  |  |         icon: string, | 
					
						
							|  |  |  |         minzoom: number, | 
					
						
							|  |  |  |         overpassFilter: TagsFilter, | 
					
						
							| 
									
										
										
										
											2020-08-22 02:12:46 +02:00
										 |  |  |         title?: TagDependantUIElementConstructor, | 
					
						
							| 
									
										
										
										
											2020-07-18 20:40:51 +02:00
										 |  |  |         elementsToShow?: TagDependantUIElementConstructor[], | 
					
						
							|  |  |  |         maxAllowedOverlapPercentage?: number, | 
					
						
							| 
									
										
										
										
											2020-07-22 01:07:32 +02:00
										 |  |  |         wayHandling?: number, | 
					
						
							| 
									
										
										
										
											2020-08-28 03:16:21 +02:00
										 |  |  |         widenFactor?: number, | 
					
						
							| 
									
										
										
										
											2020-07-18 20:40:51 +02:00
										 |  |  |         style?: (tags: any) => { | 
					
						
							|  |  |  |             color: string, | 
					
						
							|  |  |  |             icon: any | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } = undefined) { | 
					
						
							| 
									
										
										
										
											2020-07-31 04:58:58 +02:00
										 |  |  |         this.id = id; | 
					
						
							| 
									
										
										
										
											2020-07-18 20:40:51 +02:00
										 |  |  |         if (options === undefined) { | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         this.name = options.name; | 
					
						
							| 
									
										
										
										
											2020-07-24 15:52:21 +02:00
										 |  |  |         this.description = options.description; | 
					
						
							| 
									
										
										
										
											2020-07-18 20:40:51 +02:00
										 |  |  |         this.maxAllowedOverlapPercentage = options.maxAllowedOverlapPercentage ?? 0; | 
					
						
							| 
									
										
										
										
											2020-07-29 18:35:46 +02:00
										 |  |  |         this.presets = options.presets; | 
					
						
							| 
									
										
										
										
											2020-07-18 20:40:51 +02:00
										 |  |  |         this.icon = options.icon; | 
					
						
							|  |  |  |         this.minzoom = options.minzoom; | 
					
						
							|  |  |  |         this.overpassFilter = options.overpassFilter; | 
					
						
							|  |  |  |         this.title = options.title; | 
					
						
							|  |  |  |         this.elementsToShow = options.elementsToShow; | 
					
						
							|  |  |  |         this.style = options.style; | 
					
						
							| 
									
										
										
										
											2020-07-22 01:07:32 +02:00
										 |  |  |         this.wayHandling = options.wayHandling ?? LayerDefinition.WAYHANDLING_DEFAULT; | 
					
						
							| 
									
										
										
										
											2020-07-18 20:40:51 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-09-09 18:42:13 +02:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | } |