forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			45 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import * as fs from "fs";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function main(args){
							 | 
						||
| 
								 | 
							
								    if(args.length < 2){
							 | 
						||
| 
								 | 
							
								        console.log("Given a single geojson file, generates the partitions for every found property")
							 | 
						||
| 
								 | 
							
								        console.log("USAGE: perProperty `file.geojson` `property-key`")
							 | 
						||
| 
								 | 
							
								        return
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    const path = args[0]
							 | 
						||
| 
								 | 
							
								    const key = args[1]
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    const data= JSON.parse(fs.readFileSync(path, "UTF8"))
							 | 
						||
| 
								 | 
							
								    const perProperty = new Map<string, any[]>()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    console.log("Partitioning",data.features.length, "features")
							 | 
						||
| 
								 | 
							
								    for (const feature of data.features) {
							 | 
						||
| 
								 | 
							
								        const v = feature.properties[key]
							 | 
						||
| 
								 | 
							
								        if(!perProperty.has(v)){
							 | 
						||
| 
								 | 
							
								            console.log("Found a new category:", v)
							 | 
						||
| 
								 | 
							
								            perProperty.set(v, [])
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        perProperty.get(v).push(feature)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    const stripped = path.substr(0, path.length - ".geojson".length) 
							 | 
						||
| 
								 | 
							
								    perProperty.forEach((features, v) => {
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        fs.writeFileSync(stripped+"."+v.replace(/[^a-zA-Z0-9_]/g, "_")+".geojson",
							 | 
						||
| 
								 | 
							
								            JSON.stringify({
							 | 
						||
| 
								 | 
							
								                type:"FeatureCollection",
							 | 
						||
| 
								 | 
							
								                features
							 | 
						||
| 
								 | 
							
								            }))
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let args = [...process.argv]
							 | 
						||
| 
								 | 
							
								args.splice(0, 2)
							 | 
						||
| 
								 | 
							
								try {
							 | 
						||
| 
								 | 
							
								    main(args)
							 | 
						||
| 
								 | 
							
								} catch (e) {
							 | 
						||
| 
								 | 
							
								    console.error("Error building cache:", e)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								console.log("All done!")
							 |