forked from MapComplete/MapComplete
Add point-overview output option to generateCache
This commit is contained in:
parent
45631a921f
commit
b79be77686
3 changed files with 14824 additions and 45 deletions
14790
package-lock.json
generated
14790
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -20,7 +20,7 @@
|
|||
"generate:layouts": "ts-node scripts/generateLayouts.ts",
|
||||
"generate:docs": "ts-node scripts/generateDocs.ts && ts-node scripts/generateTaginfoProjectFiles.ts",
|
||||
"generate:cache:speelplekken": "npm run generate:layeroverview && ts-node scripts/generateCache.ts speelplekken 14 ../pietervdvn.github.io/speelplekken_cache/ 51.20 4.35 51.09 4.56",
|
||||
"generate:cache:natuurpunt": "npm run generate:layeroverview && ts-node scripts/generateCache.ts natuurpunt 12 ../pietervdvn.github.io/natuurpunt_cache/ 50.40 2.1 51.54 6.4",
|
||||
"generate:cache:natuurpunt": "npm run generate:layeroverview && ts-node scripts/generateCache.ts natuurpunt 12 ../pietervdvn.github.io/natuurpunt_cache/ 50.40 2.1 51.54 6.4 --generate-point-overview nature_reserve,visitor_information_centre",
|
||||
"generate:layeroverview": "npm run generate:licenses && echo {\\\"layers\\\":[], \\\"themes\\\":[]} > ./assets/generated/known_layers_and_themes.json && ts-node scripts/generateLayerOverview.ts --no-fail",
|
||||
"generate:licenses": "ts-node scripts/generateLicenseInfo.ts --no-fail",
|
||||
"generate:report": "cd Docs/Tools && ./compileStats.sh && git commit . -m 'New statistics ands graphs' && git push",
|
||||
|
|
|
@ -17,6 +17,7 @@ import MetaTagging from "../Logic/MetaTagging";
|
|||
import LayerConfig from "../Customizations/JSON/LayerConfig";
|
||||
import {GeoOperations} from "../Logic/GeoOperations";
|
||||
import {UIEventSource} from "../Logic/UIEventSource";
|
||||
import * as fs from "fs";
|
||||
|
||||
|
||||
function createOverpassObject(theme: LayoutConfig) {
|
||||
|
@ -139,7 +140,7 @@ async function downloadExtraData(theme: LayoutConfig)/* : any[] */ {
|
|||
return allFeatures;
|
||||
}
|
||||
|
||||
async function postProcess(targetdir: string, r: TileRange, theme: LayoutConfig, extraFeatures: any[]) {
|
||||
function postProcess(targetdir: string, r: TileRange, theme: LayoutConfig, extraFeatures: any[]) {
|
||||
let processed = 0;
|
||||
const layerIndex = theme.LayerIndex();
|
||||
for (let x = r.xstart; x <= r.xend; x++) {
|
||||
|
@ -211,8 +212,9 @@ async function postProcess(targetdir: string, r: TileRange, theme: LayoutConfig,
|
|||
}
|
||||
}
|
||||
|
||||
async function splitPerLayer(targetdir: string, r: TileRange, theme: LayoutConfig) {
|
||||
function splitPerLayer(targetdir: string, r: TileRange, theme: LayoutConfig) {
|
||||
const z = r.zoomlevel;
|
||||
const generated = {} // layer --> x --> y[]
|
||||
for (let x = r.xstart; x <= r.xend; x++) {
|
||||
for (let y = r.ystart; y <= r.yend; y++) {
|
||||
const file = readFileSync(geoJsonName(targetdir + ".unfiltered", x, y, z), "UTF8")
|
||||
|
@ -227,10 +229,8 @@ async function splitPerLayer(targetdir: string, r: TileRange, theme: LayoutConfi
|
|||
.filter(f => f._matching_layer_id === layer.id)
|
||||
.filter(f => {
|
||||
const isShown = layer.isShown.GetRenderValue(f.properties).txt
|
||||
if (isShown === "no") {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return isShown !== "no";
|
||||
|
||||
})
|
||||
const new_path = geoJsonName(targetdir + "_" + layer.id, x, y, z);
|
||||
console.log(new_path, " has ", geojson.features.length, " features after filtering (dropped ", oldLength - geojson.features.length, ")")
|
||||
|
@ -239,18 +239,63 @@ async function splitPerLayer(targetdir: string, r: TileRange, theme: LayoutConfi
|
|||
continue;
|
||||
}
|
||||
writeFileSync(new_path, JSON.stringify(geojson, null, " "))
|
||||
}
|
||||
|
||||
if (generated[layer.id] === undefined) {
|
||||
generated[layer.id] = {}
|
||||
}
|
||||
if (generated[layer.id][x] === undefined) {
|
||||
generated[layer.id][x] = []
|
||||
}
|
||||
generated[layer.id][x].push(y)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const layer of theme.layers) {
|
||||
const id = layer.id
|
||||
const loaded = generated[id]
|
||||
if(loaded === undefined){
|
||||
console.log("No features loaded for layer ",id)
|
||||
continue;
|
||||
}
|
||||
writeFileSync(targetdir + "_" + id + "_overview.json", JSON.stringify(loaded))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async function createOverview(targetdir: string, r: TileRange, z: number, layername: string) {
|
||||
const allFeatures = []
|
||||
for (let x = r.xstart; x <= r.xend; x++) {
|
||||
for (let y = r.ystart; y <= r.yend; y++) {
|
||||
const read_path = geoJsonName(targetdir + "_" + layername, x, y, z);
|
||||
if (!fs.existsSync(read_path)) {
|
||||
continue;
|
||||
}
|
||||
const features = JSON.parse(fs.readFileSync(read_path, "UTF-8")).features
|
||||
const pointsOnly = features.map(f => {
|
||||
if (f.geometry.type === "Point") {
|
||||
return f
|
||||
} else {
|
||||
return GeoOperations.centerpoint(f)
|
||||
}
|
||||
|
||||
})
|
||||
allFeatures.push(...pointsOnly)
|
||||
}
|
||||
}
|
||||
|
||||
const geojson = {
|
||||
"type": "FeatureCollection",
|
||||
"features": allFeatures
|
||||
}
|
||||
writeFileSync(targetdir + "_" + layername + "_points.geojson", JSON.stringify(geojson, null, " "))
|
||||
}
|
||||
|
||||
async function main(args: string[]) {
|
||||
|
||||
if (args.length == 0) {
|
||||
console.error("Expected arguments are: theme zoomlevel targetdirectory lat0 lon0 lat1 lon1")
|
||||
console.error("Expected arguments are: theme zoomlevel targetdirectory lat0 lon0 lat1 lon1 [--generate-point-overview layer-name]")
|
||||
return;
|
||||
}
|
||||
const themeName = args[0]
|
||||
|
@ -285,8 +330,18 @@ async function main(args: string[]) {
|
|||
} while (failed > 0)
|
||||
|
||||
const extraFeatures = await downloadExtraData(theme);
|
||||
await postProcess(targetdir, tileRange, theme, extraFeatures)
|
||||
await splitPerLayer(targetdir, tileRange, theme)
|
||||
postProcess(targetdir, tileRange, theme, extraFeatures)
|
||||
splitPerLayer(targetdir, tileRange, theme)
|
||||
|
||||
if (args[7] === "--generate-point-overview") {
|
||||
const targetLayers = args[8].split(",")
|
||||
for (const targetLayer of targetLayers) {
|
||||
if (!theme.layers.some(l => l.id === targetLayer)) {
|
||||
throw "Target layer " + targetLayer + " not found, did you mistype the name? Found layers are: " + theme.layers.map(l => l.id).join(",")
|
||||
}
|
||||
createOverview(targetdir, tileRange, zoomlevel, targetLayer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue