47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
/**
|
|
* Generates an overview for which tiles exist and which don't
|
|
*/
|
|
import ScriptUtils from "./ScriptUtils"
|
|
import { writeFileSync } from "fs"
|
|
|
|
function main(args: string[]) {
|
|
const directory = args[0]
|
|
let zoomLevel = args[1]
|
|
const files = ScriptUtils.readDirRecSync(directory, 1).filter((f) => f.endsWith(".geojson"))
|
|
|
|
const indices /* Map<string, number[]>*/ = {}
|
|
for (const path of files) {
|
|
const match = path.match(".*_([0-9]*)_([0-9]*)_([0-9]*).geojson")
|
|
if (match === null) {
|
|
continue
|
|
}
|
|
const z = match[1]
|
|
if (zoomLevel === undefined) {
|
|
zoomLevel = z
|
|
} else if (zoomLevel !== z) {
|
|
throw "Mixed zoomlevels detected"
|
|
}
|
|
|
|
const x = match[2]
|
|
const y = match[3]
|
|
if (indices[x] === undefined) {
|
|
indices[x] = []
|
|
}
|
|
indices[x].push(Number(y))
|
|
}
|
|
indices["zoom"] = zoomLevel
|
|
const match = files[0].match("(.*)_([0-9]*)_([0-9]*)_([0-9]*).geojson")
|
|
const path = match[1] + "_" + zoomLevel + "_overview.json"
|
|
writeFileSync(path, JSON.stringify(indices))
|
|
console.log("Written overview for", files.length, " tiles at", path)
|
|
}
|
|
|
|
let args = [...process.argv]
|
|
args.splice(0, 2)
|
|
args.forEach((file) => {
|
|
try {
|
|
main(args)
|
|
} catch (e) {
|
|
console.error("Could not handle file ", file, " due to ", e)
|
|
}
|
|
})
|