| 
									
										
										
										
											2022-03-13 01:27:19 +01:00
										 |  |  | import * as known_layers from "../assets/generated/known_layers.json" | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | import { LayerConfigJson } from "../Models/ThemeConfig/Json/LayerConfigJson" | 
					
						
							|  |  |  | import { TagUtils } from "../Logic/Tags/TagUtils" | 
					
						
							|  |  |  | import { Utils } from "../Utils" | 
					
						
							|  |  |  | import { writeFileSync } from "fs" | 
					
						
							|  |  |  | import ScriptUtils from "./ScriptUtils" | 
					
						
							|  |  |  | import Constants from "../Models/Constants" | 
					
						
							| 
									
										
										
										
											2022-03-13 01:27:19 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Downloads stats on osmSource-tags and keys from tagInfo */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | async function main(includeTags = true) { | 
					
						
							|  |  |  |     ScriptUtils.fixUtils() | 
					
						
							|  |  |  |     const layers: LayerConfigJson[] = (known_layers["default"] ?? known_layers).layers | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const keysAndTags = new Map<string, Set<string>>() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for (const layer of layers) { | 
					
						
							|  |  |  |         if (layer.source["geoJson"] !== undefined && !layer.source["isOsmCache"]) { | 
					
						
							|  |  |  |             continue | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         if (Constants.priviliged_layers.indexOf(layer.id) >= 0) { | 
					
						
							|  |  |  |             continue | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const sources = TagUtils.Tag(layer.source.osmTags) | 
					
						
							|  |  |  |         const allKeys = sources.usedKeys() | 
					
						
							|  |  |  |         for (const key of allKeys) { | 
					
						
							|  |  |  |             if (!keysAndTags.has(key)) { | 
					
						
							|  |  |  |                 keysAndTags.set(key, new Set<string>()) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         const allTags = includeTags ? sources.usedTags() : [] | 
					
						
							|  |  |  |         for (const tag of allTags) { | 
					
						
							|  |  |  |             if (!keysAndTags.has(tag.key)) { | 
					
						
							|  |  |  |                 keysAndTags.set(tag.key, new Set<string>()) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             keysAndTags.get(tag.key).add(tag.value) | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const keyTotal = new Map<string, number>() | 
					
						
							|  |  |  |     const tagTotal = new Map<string, Map<string, number>>() | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     await Promise.all( | 
					
						
							|  |  |  |         Array.from(keysAndTags.keys()).map(async (key) => { | 
					
						
							|  |  |  |             const values = keysAndTags.get(key) | 
					
						
							|  |  |  |             const data = await Utils.downloadJson( | 
					
						
							|  |  |  |                 `https://taginfo.openstreetmap.org/api/4/key/stats?key=${key}` | 
					
						
							| 
									
										
										
										
											2022-03-13 01:27:19 +01:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             const count = data.data.find((item) => item.type === "all").count | 
					
						
							|  |  |  |             keyTotal.set(key, count) | 
					
						
							|  |  |  |             console.log(key, "-->", count) | 
					
						
							| 
									
										
										
										
											2022-03-13 01:27:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             if (values.size > 0) { | 
					
						
							|  |  |  |                 tagTotal.set(key, new Map<string, number>()) | 
					
						
							|  |  |  |                 await Promise.all( | 
					
						
							|  |  |  |                     Array.from(values).map(async (value) => { | 
					
						
							|  |  |  |                         const tagData = await Utils.downloadJson( | 
					
						
							|  |  |  |                             `https://taginfo.openstreetmap.org/api/4/tag/stats?key=${key}&value=${value}` | 
					
						
							|  |  |  |                         ) | 
					
						
							|  |  |  |                         const count = tagData.data.find((item) => item.type === "all").count | 
					
						
							|  |  |  |                         tagTotal.get(key).set(value, count) | 
					
						
							|  |  |  |                         console.log(key + "=" + value, "-->", count) | 
					
						
							|  |  |  |                     }) | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     writeFileSync( | 
					
						
							|  |  |  |         "./assets/key_totals.json", | 
					
						
							| 
									
										
										
										
											2022-03-13 01:27:19 +01:00
										 |  |  |         JSON.stringify( | 
					
						
							|  |  |  |             { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 keys: Utils.MapToObj(keyTotal, (t) => t), | 
					
						
							|  |  |  |                 tags: Utils.MapToObj(tagTotal, (v) => Utils.MapToObj(v, (t) => t)), | 
					
						
							| 
									
										
										
										
											2022-03-13 01:27:19 +01:00
										 |  |  |             }, | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             null, | 
					
						
							|  |  |  |             "  " | 
					
						
							| 
									
										
										
										
											2022-03-13 01:27:19 +01:00
										 |  |  |         ) | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | main().then(() => console.log("All done")) |