forked from MapComplete/MapComplete
		
	Add bike-other-shop into bikeshop layers, add sport shops to show up too (even if they don't sell bicycles)
This commit is contained in:
		
							parent
							
								
									02c2e48293
								
							
						
					
					
						commit
						1ea285d303
					
				
					 5 changed files with 72 additions and 92 deletions
				
			
		|  | @ -1,83 +0,0 @@ | |||
| import {LayerDefinition} from "../LayerDefinition"; | ||||
| import Translations from "../../UI/i18n/Translations"; | ||||
| import {And, RegexTag, Tag} from "../../Logic/Tags"; | ||||
| import {TagRenderingOptions} from "../TagRenderingOptions"; | ||||
| 
 | ||||
| 
 | ||||
| export default class BikeOtherShops extends LayerDefinition { | ||||
|     private readonly sellsBikes = new Tag("service:bicycle:retail", "yes") | ||||
| 
 | ||||
|     private readonly to = Translations.t.cyclofix.nonBikeShop | ||||
| 
 | ||||
|     constructor() { | ||||
|         super("bikeOtherShop"); | ||||
|         this.name = this.to.name | ||||
|         this.icon = "./assets/bike/non_bike_repair_shop.svg" | ||||
|         this.overpassFilter = new And([ | ||||
|             new RegexTag("shop", /^bicycle$/, true), | ||||
|             new RegexTag(/^service:bicycle:/, /.*/), | ||||
|         ]) | ||||
|         this.presets = [] | ||||
|         this.maxAllowedOverlapPercentage = 10 | ||||
|         this.wayHandling = LayerDefinition.WAYHANDLING_CENTER_AND_WAY | ||||
| 
 | ||||
|         this.minzoom = 13; | ||||
|         this.style = this.generateStyleFunction(); | ||||
|         this.title = new TagRenderingOptions({ | ||||
|             mappings: [ | ||||
|                 { | ||||
|                     k: new And([new Tag("name", "*"), this.sellsBikes]), | ||||
|                     txt: this.to.titleShopNamed | ||||
|                 }, | ||||
|                 { | ||||
|                     k: new And([new Tag("name", "*"), new Tag("service:bicycle:retail", "")]), | ||||
|                     txt: this.to.titleShop | ||||
|                 }, | ||||
|                 { | ||||
|                     k: new And([new Tag("name", "*"), new Tag("service:bicycle:retail", "no")]), | ||||
|                     txt: this.to.titleRepairNamed | ||||
|                 }, | ||||
|                 {k: this.sellsBikes, txt: this.to.titleShop}, | ||||
|                 {k: new Tag("service:bicycle:retail", " "), txt: this.to.title}, | ||||
|                 {k: new Tag("service:bicycle:retail", "no"), txt: this.to.titleRepair}, | ||||
|                 { | ||||
|                     k: new And([new Tag("name", "*")]), | ||||
|                     txt: this.to.titleNamed | ||||
|                 }, | ||||
|                 {k: null, txt: this.to.title}, | ||||
|             ] | ||||
|         }) | ||||
|          | ||||
|         this.elementsToShow = [ | ||||
|             // new ImageCarouselWithUploadConstructor(),
 | ||||
|             // new PhoneNumberQuestion("{name}"),
 | ||||
|             // new Website("{name}"),
 | ||||
|             // ShopRetail
 | ||||
|             // new ShopRental(),
 | ||||
|             // new ShopRepair(),
 | ||||
|             // new ShopPump(),
 | ||||
|             // new ShopDiy(),
 | ||||
|             // new ShopSecondHand()
 | ||||
|         ] | ||||
|     } | ||||
| 
 | ||||
|     private generateStyleFunction() { | ||||
|         const self = this; | ||||
|         return function (tags: any) { | ||||
|             let icon = "assets/bike/non_bike_repair_shop.svg"; | ||||
| 
 | ||||
|             if (self.sellsBikes.matchesProperties(tags)) { | ||||
|                 icon = "assets/bike/non_bike_shop.svg"; | ||||
|             } | ||||
| 
 | ||||
|             return { | ||||
|                 color: "#00bb00", | ||||
|                 icon: { | ||||
|                     iconUrl: icon, | ||||
|                     iconSize: [50, 50], | ||||
|                     iconAnchor: [25, 50] | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -1,7 +1,6 @@ | |||
| import {Layout} from "../Layout"; | ||||
| import Translations from "../../UI/i18n/Translations"; | ||||
| import Combine from "../../UI/Base/Combine"; | ||||
| import BikeOtherShops from "../Layers/BikeOtherShops"; | ||||
| 
 | ||||
| 
 | ||||
| export default class Cyclofix extends Layout { | ||||
|  | @ -19,7 +18,7 @@ export default class Cyclofix extends Layout { | |||
|             "cyclofix", | ||||
|             ["en", "nl", "fr", "gl","de"], | ||||
|             Translations.t.cyclofix.title, | ||||
|             ["bike_repair_station", "bike_cafes", "bike_shops", "drinking_water", "bike_parking", new BikeOtherShops(),"bike_themed_object", | ||||
|             ["bike_repair_station", "bike_cafes", "bike_shops", "drinking_water", "bike_parking","bike_themed_object", | ||||
|                 // The first of november, halloween and the second of november, we remember our dead
 | ||||
|                 ...(Cyclofix.RememberTheDead() ? ["ghost_bike"] : [])], | ||||
|             16, | ||||
|  |  | |||
|  | @ -56,7 +56,6 @@ export class LayerUpdater { | |||
|                 continue; | ||||
|             } | ||||
|             if (state.locationControl.data.zoom < layer.minzoom) { | ||||
|                 console.log("Not loading layer ", layer.id, " as it needs at least ", layer.minzoom, "zoom") | ||||
|                 continue; | ||||
|             } | ||||
|             // Check if data for this layer has already been loaded
 | ||||
|  |  | |||
|  | @ -140,7 +140,6 @@ export class OsmPreferences { | |||
|         } | ||||
| 
 | ||||
|         if (this.preferences.data[k] === v) { | ||||
|             console.log("Not updating preference", k, " to ", v, "not changed"); | ||||
|             return; | ||||
|         } | ||||
|         console.log("Updating preference", k, " to ", Utils.EllipsesAfter(v, 15)); | ||||
|  | @ -155,7 +154,6 @@ export class OsmPreferences { | |||
|                     console.log("Could not remove preference", error); | ||||
|                     return; | ||||
|                 } | ||||
| 
 | ||||
|                 console.log("Preference ",k,"removed!"); | ||||
| 
 | ||||
|             }); | ||||
|  |  | |||
|  | @ -9,8 +9,32 @@ | |||
|   }, | ||||
|   "minzoom": 13, | ||||
|   "overpassTags": { | ||||
|     "and": [ | ||||
|       "shop=bicycle" | ||||
|     "#": "We select all bicycle shops, sport shops (but we try to weed out non-bicycle related shops), and any shop with a bicycle related tag", | ||||
|     "or": [ | ||||
|       "shop=bicycle", | ||||
|       { | ||||
|         "#": "if sport is defined and is not bicycle, it is retrackted; if bicycle retail/repair is marked as 'no', it is retracted too.", | ||||
|         "##": "There will be a few false-positives with this. They will get filtered out by people marking both 'not selling bikes' and 'not repairing bikes'. Furthermore, the OSMers will add a sports-subcategory on it", | ||||
|         "and": [ | ||||
|           "shop=sports", | ||||
|           "service:bicycle:retail!=no", | ||||
|           "service:bicycle:repair!=no", | ||||
|           { | ||||
|             "or": [ | ||||
|               "sport=bicycle", | ||||
|               "sport=cycling", | ||||
|               "sport=" | ||||
|             ] | ||||
|           } | ||||
|         ] | ||||
|       }, | ||||
|       { | ||||
|         "#": "Any shop with any bicycle service", | ||||
|         "and": [ | ||||
|           "shop~*", | ||||
|           "service:bicycle:.*~~.*" | ||||
|         ] | ||||
|       } | ||||
|     ] | ||||
|   }, | ||||
|   "title": { | ||||
|  | @ -22,11 +46,37 @@ | |||
|       "de": "Fahrradwerkstatt/geschäft" | ||||
|     }, | ||||
|     "mappings": [ | ||||
|       { | ||||
|         "if": { | ||||
|           "and": [ | ||||
|             "shop=sports", | ||||
|             "name~*" | ||||
|           ] | ||||
|         }, | ||||
|         "then": { | ||||
|           "en": "Sport gear shop <i>{name}</i>", | ||||
|           "nl": "Sportwinkel <i>{name}</i>", | ||||
|           "fr": "Magasin de sport <i>{name}</i>" | ||||
|         } | ||||
|       }, | ||||
|       { | ||||
|         "if": "shop=sports", | ||||
|         "then": { | ||||
|           "en": "Sport gear shop", | ||||
|           "nl": "Sportwinkel", | ||||
|           "fr": "Magasin de sport" | ||||
|         } | ||||
|       }, | ||||
|       { | ||||
|         "if": "shop!~bicycle", | ||||
|         "then": "Other shop" | ||||
|       }, | ||||
|       { | ||||
|         "if": { | ||||
|           "and": [ | ||||
|             "name~*", | ||||
|             "service:bicycle:retail!~yes" | ||||
|             "service:bicycle:retail!~yes", | ||||
|             "service:bicycle:repair!~no" | ||||
|           ] | ||||
|         }, | ||||
|         "then": { | ||||
|  | @ -38,7 +88,12 @@ | |||
|         } | ||||
|       }, | ||||
|       { | ||||
|         "if": "service:bicycle:retail!~yes", | ||||
|         "if": { | ||||
|           "and": [ | ||||
|             "service:bicycle:retail!~yes", | ||||
|             "service:bicycle:repair!~no" | ||||
|           ] | ||||
|         }, | ||||
|         "then": { | ||||
|           "en": "Bike repair", | ||||
|           "nl": "Fietsenmaker", | ||||
|  | @ -90,6 +145,18 @@ | |||
|   }, | ||||
|   "tagRenderings": [ | ||||
|     "images", | ||||
|     { | ||||
|       "condition": { | ||||
|         "and": [ | ||||
|           "shop!~bicycle", | ||||
|           "shop!~sports" | ||||
|         ] | ||||
|       }, | ||||
|       "render": { | ||||
|         "en": "This shop is specialized in selling {shop} and does bicycle related activities", | ||||
|         "nl": "Deze winkel verkoopt {shop} en heeft fiets-gerelateerde activiteiten." | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "question": { | ||||
|         "en": "What is the name of this bicycle shop?", | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue