kopia lustrzana https://github.com/osm2vectortiles/osm2vectortiles
				
				
				
			Make output more clear
The output and code is now better structured. Layers, classes and types are alphabetically ordered for semantical comparison
```
name: open-streets
tile: z/y/x
features: [features.length]
layers: [layers.length]
classes: [classes.length]
types: [types.length]
[layer]
    [class]
        [type]
```
			
			
				pull/51/head
			
			
		
							rodzic
							
								
									abe112d851
								
							
						
					
					
						commit
						ab60bbd2c8
					
				|  | @ -2,44 +2,155 @@ var fs = require('fs'); | |||
| var VectorTile = require('vector-tile').VectorTile; | ||||
| var Protobuf = require('pbf'); | ||||
| 
 | ||||
| var tile = new VectorTile(new Protobuf(fs.readFileSync('./vector.pbf'))); | ||||
| 
 | ||||
| // Contains a map of all layers
 | ||||
| tile.layers; | ||||
| 
 | ||||
| for(var k in tile.layers) { | ||||
| 	var layer = tile.layers[k]; | ||||
| 	// place_label: 61 Features
 | ||||
| 	console.log(k+": "+tile.layers[k].length+" Features"); | ||||
| 
 | ||||
| function getTileInfo(layers) { | ||||
| 	var layerCount = 0; | ||||
| 	var featureCount = 0; | ||||
| 	var classSet = new Set(); | ||||
| 	var typeSet = new Set(); | ||||
| 	for(var i=0; i < layer.length; ++i) { | ||||
| 		if(layer.feature(i).properties.class) { | ||||
| 			classSet.add(layer.feature(i).properties.class); | ||||
| 
 | ||||
| 	for(var i in layers) { | ||||
| 		++layerCount; | ||||
| 		var layer = layers[i]; | ||||
| 		featureCount += layer.length; | ||||
| 		for(var j = 0; j < layer.length; ++j) { | ||||
| 			var feature = layer.feature(j); | ||||
| 			if(feature.properties.class) { | ||||
| 				classSet.add(feature.properties.class); | ||||
| 			} | ||||
| 			if(feature.properties.type) { | ||||
| 				typeSet.add(feature.properties.class); | ||||
| 			} | ||||
| 		} | ||||
| 		if(layer.feature(i).properties.type) { | ||||
| 			typeSet.add("class: "+layer.feature(i).properties.class+" type: "+layer.feature(i).properties.type); | ||||
| 	} | ||||
| 	return { "layers": layerCount, "features": featureCount, "classes": classSet.size, "types": typeSet.size }; | ||||
| } | ||||
| 
 | ||||
| function containsClass(classSet, className) { | ||||
| 	var containsClass = false; | ||||
| 	for(var item of classSet) { | ||||
| 		if(item.name === className) { | ||||
| 			containsClass = true; | ||||
| 			return containsClass; | ||||
| 		} else { | ||||
| 			//typeSet.add(layer.feature(i).properties);
 | ||||
| 			containsClass = false; | ||||
| 		} | ||||
| 	} | ||||
| 	// prints all classes available in this layer
 | ||||
| 	console.log("Has classes: "); | ||||
| 	return containsClass; | ||||
| } | ||||
| 
 | ||||
| function addType(classSet, className, type) { | ||||
| 	for(var item of classSet) { | ||||
| 		if(item.name === className) { | ||||
| 			if(type) { | ||||
| 				item.types.add(type); | ||||
| 			} else { | ||||
| 				item.types.add("no type"); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return classSet; | ||||
| } | ||||
| 
 | ||||
| function addClass(classSet, className, type) { | ||||
| 	var layerClass = { | ||||
| 		"name": className, | ||||
| 		"types": new Set() | ||||
| 	}; | ||||
| 
 | ||||
| 	if(type) { | ||||
| 		layerClass.types.add(type); | ||||
| 	} else { | ||||
| 		layerClass.types.add("no type"); | ||||
| 		//layerClass.types.add(layer.feature(i).properties);
 | ||||
| 	} | ||||
| 	classSet.add(layerClass); | ||||
| 	return classSet; | ||||
| } | ||||
| 
 | ||||
| function getSortedItems(unsortedItems, sortByName) { | ||||
| 	var sortedItems = []; | ||||
| 	for(var unsortedItem of unsortedItems) { | ||||
| 		sortedItems.push(unsortedItem); | ||||
| 	} | ||||
| 	if(sortByName) { | ||||
| 		sortedItems.sort(function(a, b) {  | ||||
| 		    if(a.name > b.name) { | ||||
| 		      return 1; | ||||
| 		    } | ||||
| 		    if (a.name < b.name) { | ||||
| 		      return -1; | ||||
| 		    } | ||||
| 			return 0; | ||||
| 		}); | ||||
| 	} else { | ||||
| 		sortedItems.sort(); | ||||
| 	} | ||||
| 	return sortedItems; | ||||
| } | ||||
| 
 | ||||
| function getSortedLayers(layers) { | ||||
| 	var sortedLayerNames = []; | ||||
| 	for(var i in layers) { | ||||
| 		sortedLayerNames.push(i); | ||||
| 	} | ||||
| 	sortedLayerNames.sort(); | ||||
| 	var sortedLayers = []; | ||||
| 	for(var layerName of sortedLayerNames) { | ||||
| 		sortedLayers.push({"name": layerName, "layer": layers[layerName]}); | ||||
| 	} | ||||
| 	return sortedLayers; | ||||
| } | ||||
| 
 | ||||
| function getLayerResult(layerObject, amountOfFeatures) { | ||||
| 	console.log("\n" + layerObject.name + " (features: " + amountOfFeatures + ")"); | ||||
| 
 | ||||
| 	var classSet = new Set(); | ||||
| 	for(var j=0; j < layerObject.layer.length; ++j) { | ||||
| 		var properties = layerObject.layer.feature(j).properties; | ||||
| 		var className = properties.class; | ||||
| 		var type = properties.type; | ||||
| 		if(className) { | ||||
| 			if(containsClass(classSet, className)){ | ||||
| 				classSet = addType(classSet, className, type); | ||||
| 			} else { | ||||
| 				classSet = addClass(classSet, className, type); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return classSet; | ||||
| } | ||||
| 
 | ||||
| function printLayerResult(classSet) { | ||||
| 	if(classSet.size === 0) { | ||||
| 		console.log("no classes") | ||||
| 		console.log("\t"+" no class") | ||||
| 	} else { | ||||
| 		for(var item of classSet ) { | ||||
| 			console.log(item); | ||||
| 		} | ||||
| 	} | ||||
| 	// prints all types available in this class with classname
 | ||||
| 	console.log("Has types: "); | ||||
| 	if(typeSet.size === 0) { | ||||
| 		console.log("no types") | ||||
| 	} else { | ||||
| 		for(var item of typeSet ) { | ||||
| 			console.log(item); | ||||
| 		for(var item of getSortedItems(classSet, true)) { | ||||
| 			console.log("\t"+item.name); | ||||
| 			for(var sortedType of getSortedItems(item.types)) { | ||||
| 				console.log("\t" + "\t" + sortedType); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| function printProlog(layers) { | ||||
| 	var tileInfo = getTileInfo(layers); | ||||
| 	console.log("name: open-streets"); | ||||
| 	console.log("tile: 10/4141/5356"); | ||||
| 	console.log("features: " + tileInfo.features); | ||||
| 	console.log("layers: " + tileInfo.layers); | ||||
| 	console.log("classes: " + tileInfo.classes); | ||||
| 	console.log("types: " + tileInfo.types); | ||||
| } | ||||
| 
 | ||||
| function printResult(layers) { | ||||
| 	var layerArray = getSortedLayers(layers); | ||||
| 	for(var i in layerArray) { | ||||
| 		var layerObject = layerArray[i]; | ||||
| 		printLayerResult(getLayerResult(layerObject, layers[layerObject.name].length)); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| var tile = new VectorTile(new Protobuf(fs.readFileSync('./vector.pbf'))); | ||||
| printProlog(tile.layers); | ||||
| printResult(tile.layers); | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Manuel Roth
						Manuel Roth