Some further improvements to the mapcomplete-changes theme

This commit is contained in:
pietervdvn 2022-01-16 02:45:07 +01:00
parent 2e2a6965e7
commit 68c338e764
6 changed files with 492 additions and 28 deletions

View file

@ -46,6 +46,12 @@
"en": "Shows all MapComplete changes"
},
"tagRenderings": [
{
"id": "render_id",
"render": {
"en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
}
},
{
"id": "contributor",
"render": {
@ -73,9 +79,230 @@
"point",
"centroid"
],
"icon": {"render":"teardrop:#00cc00",
"mappings": [{"if":"theme=aed","then":"./assets/themes/aed/logo.svg"},{"if":"theme=aed_brugge","then":"./assets/themes/aed/logo.svg"},{"if":"theme=artwork","then":"./assets/themes/artwork/artwork.svg"},{"if":"theme=benches","then":"./assets/themes/benches/bench_poi.svg"},{"if":"theme=bicyclelib","then":"./assets/themes/bicyclelib/logo.svg"},{"if":"theme=binoculars","then":"./assets/layers/binocular/telescope.svg"},{"if":"theme=bookcases","then":"./assets/themes/bookcases/bookcase.svg"},{"if":"theme=buurtnatuur","then":"./assets/themes/buurtnatuur/groen_logo.svg"},{"if":"theme=cafes_and_pubs","then":"./assets/layers/cafe_pub/pub.svg"},{"if":"theme=campersite","then":"./assets/themes/campersite/caravan.svg"},{"if":"theme=charging_stations","then":"./assets/themes/charging_stations/logo.svg"},{"if":"theme=climbing","then":"./assets/themes/climbing/climbing_icon.svg"},{"if":"theme=cycle_highways","then":"./assets/themes/cycle_highways/fietssnelwegen-logo.svg"},{"if":"theme=cycle_infra","then":"./assets/themes/cycle_infra/cycle-infra.svg"},{"if":"theme=cyclenodes","then":"./assets/themes/cyclenodes/logo.svg"},{"if":"theme=cyclestreets","then":"./assets/themes/cyclestreets/F111.svg"},{"if":"theme=cyclofix","then":"./assets/themes/cyclofix/logo.svg"},{"if":"theme=drinking_water","then":"./assets/themes/drinking_water/logo.svg"},{"if":"theme=entrances","then":"./assets/layers/entrance/door.svg"},{"if":"theme=etymology","then":"./assets/layers/etymology/logo.svg"},{"if":"theme=facadegardens","then":"./assets/themes/facadegardens/geveltuin.svg"},{"if":"theme=food","then":"./assets/layers/food/restaurant.svg"},{"if":"theme=fritures","then":"./assets/themes/fritures/logo.svg"},{"if":"theme=fruit_trees","then":"./assets/themes/fruit_trees/fruit_tree.svg"},{"if":"theme=ghostbikes","then":"./assets/themes/ghostbikes/logo.svg"},{"if":"theme=grb","then":"./assets/themes/grb_import/housenumber_blank.svg"},{"if":"theme=grb_fixme","then":"./assets/svg/bug.svg"},{"if":"theme=missing_streets","then":"./assets/svg/robot.svg"},{"if":"theme=hackerspaces","then":"./assets/themes/hackerspaces/glider.svg"},{"if":"theme=hailhydrant","then":"./assets/themes/hailhydrant/logo.svg"},{"if":"theme=mapcomplete-changes","then":"./assets/svg/logo.svg"},{"if":"theme=maps","then":"./assets/themes/maps/logo.svg"},{"if":"theme=nature","then":"./assets/themes/nature/logo.svg"},{"if":"theme=natuurpunt","then":"./assets/themes/natuurpunt/natuurpunt.png"},{"if":"theme=notes","then":"./assets/svg/resolved.svg"},{"if":"theme=observation_towers","then":"./assets/layers/observation_tower/Tower_observation.svg"},{"if":"theme=openwindpowermap","then":"./assets/themes/openwindpowermap/wind_turbine.svg"},{"if":"theme=parkings","then":"./assets/themes/parkings/parkings.svg"},{"if":"theme=personal","then":"./assets/svg/addSmall.svg"},{"if":"theme=play_forests","then":"./assets/layers/play_forest/icon.svg"},{"if":"theme=playgrounds","then":"./assets/themes/playgrounds/playground.svg"},{"if":"theme=postal_codes","then":"./assets/themes/postal_codes/townhall.svg"},{"if":"theme=postboxes","then":"./assets/themes/postboxes/postbox.svg"},{"if":"theme=shops","then":"./assets/themes/shops/shop.svg"},{"if":"theme=sidewalks","then":"./assets/svg/bug.svg"},{"if":"theme=speelplekken","then":"./assets/themes/speelplekken/logo.svg"},{"if":"theme=sport_pitches","then":"./assets/layers/sport_pitch/table_tennis.svg"},{"if":"theme=street_lighting","then":"./assets/layers/street_lamps/street_lamp.svg"},{"if":"theme=street_lighting_assen","then":"./assets/layers/street_lamps/street_lamp.svg"},{"if":"theme=surveillance","then":"./assets/themes/surveillance/logo.svg"},{"if":"theme=toerisme_vlaanderen","then":"./assets/svg/teardrop_with_hole_green.svg"},{"if":"theme=toilets","then":"./assets/themes/toilets/toilets.svg"},{"if":"theme=trees","then":"./assets/themes/trees/logo.svg"},{"if":"theme=uk_addresses","then":"./assets/themes/uk_addresses/housenumber_unknown.svg"},{"if":"theme=waste_basket","then":"./assets/themes/waste_basket/waste_basket.svg"}]
"icon": {
"render": "teardrop:#00cc00",
"mappings": [
{
"if": "theme=aed",
"then": "./assets/themes/aed/logo.svg"
},
{
"if": "theme=aed_brugge",
"then": "./assets/themes/aed/logo.svg"
},
{
"if": "theme=artwork",
"then": "./assets/themes/artwork/artwork.svg"
},
{
"if": "theme=benches",
"then": "./assets/themes/benches/bench_poi.svg"
},
{
"if": "theme=bicyclelib",
"then": "./assets/themes/bicyclelib/logo.svg"
},
{
"if": "theme=binoculars",
"then": "./assets/layers/binocular/telescope.svg"
},
{
"if": "theme=bookcases",
"then": "./assets/themes/bookcases/bookcase.svg"
},
{
"if": "theme=buurtnatuur",
"then": "./assets/themes/buurtnatuur/groen_logo.svg"
},
{
"if": "theme=cafes_and_pubs",
"then": "./assets/layers/cafe_pub/pub.svg"
},
{
"if": "theme=campersite",
"then": "./assets/themes/campersite/caravan.svg"
},
{
"if": "theme=charging_stations",
"then": "./assets/themes/charging_stations/logo.svg"
},
{
"if": "theme=climbing",
"then": "./assets/themes/climbing/climbing_icon.svg"
},
{
"if": "theme=cycle_highways",
"then": "./assets/themes/cycle_highways/fietssnelwegen-logo.svg"
},
{
"if": "theme=cycle_infra",
"then": "./assets/themes/cycle_infra/cycle-infra.svg"
},
{
"if": "theme=cyclenodes",
"then": "./assets/themes/cyclenodes/logo.svg"
},
{
"if": "theme=cyclestreets",
"then": "./assets/themes/cyclestreets/F111.svg"
},
{
"if": "theme=cyclofix",
"then": "./assets/themes/cyclofix/logo.svg"
},
{
"if": "theme=drinking_water",
"then": "./assets/themes/drinking_water/logo.svg"
},
{
"if": "theme=entrances",
"then": "./assets/layers/entrance/door.svg"
},
{
"if": "theme=etymology",
"then": "./assets/layers/etymology/logo.svg"
},
{
"if": "theme=facadegardens",
"then": "./assets/themes/facadegardens/geveltuin.svg"
},
{
"if": "theme=food",
"then": "./assets/layers/food/restaurant.svg"
},
{
"if": "theme=fritures",
"then": "./assets/themes/fritures/logo.svg"
},
{
"if": "theme=fruit_trees",
"then": "./assets/themes/fruit_trees/fruit_tree.svg"
},
{
"if": "theme=ghostbikes",
"then": "./assets/themes/ghostbikes/logo.svg"
},
{
"if": "theme=grb",
"then": "./assets/themes/grb_import/housenumber_blank.svg"
},
{
"if": "theme=grb_fixme",
"then": "./assets/svg/bug.svg"
},
{
"if": "theme=missing_streets",
"then": "./assets/svg/robot.svg"
},
{
"if": "theme=hackerspaces",
"then": "./assets/themes/hackerspaces/glider.svg"
},
{
"if": "theme=hailhydrant",
"then": "./assets/themes/hailhydrant/logo.svg"
},
{
"if": "theme=mapcomplete-changes",
"then": "./assets/svg/logo.svg"
},
{
"if": "theme=maps",
"then": "./assets/themes/maps/logo.svg"
},
{
"if": "theme=nature",
"then": "./assets/themes/nature/logo.svg"
},
{
"if": "theme=natuurpunt",
"then": "./assets/themes/natuurpunt/natuurpunt.png"
},
{
"if": "theme=notes",
"then": "./assets/svg/resolved.svg"
},
{
"if": "theme=observation_towers",
"then": "./assets/layers/observation_tower/Tower_observation.svg"
},
{
"if": "theme=openwindpowermap",
"then": "./assets/themes/openwindpowermap/wind_turbine.svg"
},
{
"if": "theme=parkings",
"then": "./assets/themes/parkings/parkings.svg"
},
{
"if": "theme=personal",
"then": "./assets/svg/addSmall.svg"
},
{
"if": "theme=play_forests",
"then": "./assets/layers/play_forest/icon.svg"
},
{
"if": "theme=playgrounds",
"then": "./assets/themes/playgrounds/playground.svg"
},
{
"if": "theme=postal_codes",
"then": "./assets/themes/postal_codes/townhall.svg"
},
{
"if": "theme=postboxes",
"then": "./assets/themes/postboxes/postbox.svg"
},
{
"if": "theme=shops",
"then": "./assets/themes/shops/shop.svg"
},
{
"if": "theme=sidewalks",
"then": "./assets/svg/bug.svg"
},
{
"if": "theme=speelplekken",
"then": "./assets/themes/speelplekken/logo.svg"
},
{
"if": "theme=sport_pitches",
"then": "./assets/layers/sport_pitch/table_tennis.svg"
},
{
"if": "theme=street_lighting",
"then": "./assets/layers/street_lamps/street_lamp.svg"
},
{
"if": "theme=street_lighting_assen",
"then": "./assets/layers/street_lamps/street_lamp.svg"
},
{
"if": "theme=surveillance",
"then": "./assets/themes/surveillance/logo.svg"
},
{
"if": "theme=toerisme_vlaanderen",
"then": "./assets/svg/teardrop_with_hole_green.svg"
},
{
"if": "theme=toilets",
"then": "./assets/themes/toilets/toilets.svg"
},
{
"if": "theme=trees",
"then": "./assets/themes/trees/logo.svg"
},
{
"if": "theme=uk_addresses",
"then": "./assets/themes/uk_addresses/housenumber_unknown.svg"
},
{
"if": "theme=waste_basket",
"then": "./assets/themes/waste_basket/waste_basket.svg"
}
]
},
"iconSize": "30,30,bottom"
}
@ -156,15 +383,16 @@
"_embedded_cs:themes=feat.get('_embedded_cs').map(cs => cs.theme)",
"_embedded_cs:users=feat.get('_embedded_cs').map(cs => cs['_last_edit:contributor'])"
],
"+mapRendering": [{
"location": [
"point"
],
"icon":"statistics:black",
"iconSize": "30,30,center"
}]
"+mapRendering": [
{
"location": [
"point"
],
"icon": "statistics:black",
"iconSize": "30,30,center"
}
]
}
}
]
}
}

View file

@ -0,0 +1,176 @@
{
"id": "mapcomplete-changes",
"title": {
"en": "Changes made with MapComplete"
},
"shortDescription": {
"en": "Shows changes made by MapComplete"
},
"description": {
"en": "This maps shows all the changes made with MapComplete"
},
"language": [
"en"
],
"maintainer": "",
"icon": "./assets/svg/logo.svg",
"hideFromOverview": true,
"version": "0",
"startLat": 0,
"startLon": 0,
"startZoom": 1,
"widenFactor": 0.05,
"clustering": false,
"layers": [
{
"id": "mapcomplete-changes",
"name": {
"en": "Changeset centers"
},
"minzoom": 0,
"source": {
"osmTags": "editor~*",
"geoJson": "https://raw.githubusercontent.com/pietervdvn/MapComplete-data/main/mapcomplete-changes/tile_{z}_{x}_{y}.geojson",
"geoJsonZoomLevel": 8,
"maxCacheAge": 0
},
"calculatedTags": [
"_last_edit:contributor:lc:=feat.properties['_last_edit:contributor'].toLowerCase()"
],
"title": {
"render": {
"en": "Changeset for {theme}"
}
},
"description": {
"en": "Shows all MapComplete changes"
},
"tagRenderings": [
{
"id": "render_id",
"render": {
"en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
}
},
{
"id": "contributor",
"render": {
"en": "Change made by <a href='https://openstreetmap.org/user/{_last_edit:contributor}' target='_blank'>{_last_edit:contributor}</a>"
}
},
{
"id": "theme",
"render": {
"en": "Change with theme <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>"
},
"mappings": [
{
"if": "theme~http.*",
"then": {
"en": "Change with <b>unofficial</b> theme <a href='https://mapcomplete.osm.be/theme.html?userlayout={theme}'>{theme}</a>"
}
}
]
}
],
"mapRendering": [
{
"location": [
"point",
"centroid"
],
"icon": {
"render": "teardrop:#00cc00"
},
"iconSize": "30,30,center"
}
],
"filter": [
{
"id": "theme-search",
"options": [
{
"osmTags": "theme~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Themename contains {search}"
}
}
]
},
{
"id": "created_by",
"options": [
{
"osmTags": "_last_edit:contributor:lc~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Made by contributor {search}"
}
}
]
},
{
"id": "not_created_by",
"options": [
{
"osmTags": "_last_edit:contributor:lc!~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "<b>Not</b> made by contributor {search}"
}
}
]
}
]
},
{
"builtin": "current_view",
"override": {
"title": "Statistics on changesets in the current view",
"tagRenderings": [
{
"id": "link_to_more",
"render": {
"en": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>"
}
},
{
"id": "hist_themes",
"render": "{histogram(_embedded_cs:themes, Themename, Number of changesets)}"
},
{
"id": "hist_themes",
"render": "{histogram(_embedded_cs:users, Contributor, Number of changesets)}"
}
],
"calculatedTags": [
"_embedded_cs=feat.overlapWith('mapcomplete-changes').map(f => f.feat.properties)",
"_embedded_cs:themes=feat.get('_embedded_cs').map(cs => cs.theme)",
"_embedded_cs:users=feat.get('_embedded_cs').map(cs => cs['_last_edit:contributor'])"
],
"+mapRendering": [
{
"location": [
"point"
],
"icon": "statistics:black",
"iconSize": "30,30,center"
}
]
}
}
]
}

View file

@ -934,6 +934,65 @@
"shortDescription": "Map to show hydrants, extinguishers, fire stations, and ambulance stations.",
"title": "Hydrants, Extinguishers, Fire stations, and Ambulance stations."
},
"mapcomplete-changes": {
"description": "This maps shows all the changes made with MapComplete",
"layers": {
"0": {
"description": "Shows all MapComplete changes",
"filter": {
"0": {
"options": {
"0": {
"question": "Themename contains {search}"
}
}
},
"1": {
"options": {
"0": {
"question": "Made by contributor {search}"
}
}
},
"2": {
"options": {
"0": {
"question": "<b>Not</b> made by contributor {search}"
}
}
}
},
"name": "Changeset centers",
"tagRenderings": {
"contributor": {
"render": "Change made by <a href='https://openstreetmap.org/user/{_last_edit:contributor}' target='_blank'>{_last_edit:contributor}</a>"
},
"theme": {
"mappings": {
"0": {
"then": "Change with <b>unofficial</b> theme <a href='https://mapcomplete.osm.be/theme.html?userlayout={theme}'>{theme}</a>"
}
},
"render": "Change with theme <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>"
}
},
"title": {
"render": "Changeset for {theme}"
}
},
"1": {
"override": {
"tagRenderings": {
"link_to_more": {
"render": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>"
}
}
}
}
},
"shortDescription": "Shows changes made by MapComplete",
"title": "Changes made with MapComplete"
},
"maps": {
"description": "On this map you can find all maps OpenStreetMap knows - typically a big map on an information board showing the area, city or region, e.g. a tourist map on the back of a billboard, a map of a nature reserve, a map of cycling networks in the region, ...) <br/><br/>If a map is missing, you can easily map this map on OpenStreetMap.",
"shortDescription": "This theme shows all (touristic) maps that OpenStreetMap knows of",

View file

@ -121,7 +121,7 @@ export default class ScriptUtils {
public static getThemeFiles(): { parsed: LayoutConfigJson, path: string }[] {
return ScriptUtils.readDirRecSync("./assets/themes")
.filter(path => path.endsWith(".json"))
.filter(path => path.endsWith(".json") && !path.endsWith(".proto.json"))
.filter(path => path.indexOf("license_info.json") < 0)
.map(path => {
try {

View file

@ -1,5 +1,5 @@
import ScriptUtils from "./ScriptUtils";
import {existsSync, mkdirSync, writeFileSync} from "fs";
import {existsSync, mkdirSync, readFileSync, writeFileSync} from "fs";
import * as licenses from "../assets/generated/license_info.json"
import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson";
import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson";
@ -15,16 +15,11 @@ import {Translation} from "../UI/i18n/Translation";
import {TagRenderingConfigJson} from "../Models/ThemeConfig/Json/TagRenderingConfigJson";
import * as questions from "../assets/tagRenderings/questions.json";
import * as icons from "../assets/tagRenderings/icons.json";
import PointRenderingConfigJson from "../Models/ThemeConfig/Json/PointRenderingConfigJson";
// This scripts scans 'assets/layers/*.json' for layer definition files and 'assets/themes/*.json' for theme definition files.
// It spits out an overview of those to be used to load them
interface LayersAndThemes {
themes: LayoutConfigJson[],
layers: { parsed: LayerConfigJson, path: string }[]
}
class LayerOverviewUtils {
writeSmallOverview(themes: { id: string, title: any, shortDescription: any, icon: string, hideFromOverview: boolean }[]) {
@ -112,15 +107,21 @@ class LayerOverviewUtils {
writeFileSync("./assets/generated/known_layers.json", JSON.stringify(Array.from(sharedLayers.values())))
/*
writeFileSync('./assets/themes/mapcomplete-changes/icons-mapping.txt', JSON.stringify(
Array.from(sharedThemes.values()).map(th => ({
if: "theme=" + th.id,
then: th.icon
}))
)) //*/
{
// mapcomplete-changes shows an icon for each corresponding mapcomplete-theme
const iconsPerTheme =
Array.from(sharedThemes.values()).map(th => ({
if: "theme=" + th.id,
then: th.icon
}))
const proto: LayoutConfigJson = JSON.parse(readFileSync("./assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json", "UTF8"));
const protolayer = <LayerConfigJson>(proto.layers.filter(l => l["id"] === "mapcomplete-changes")[0])
const rendering = (<PointRenderingConfigJson>protolayer.mapRendering[0])
rendering.icon["mappings"] = iconsPerTheme
writeFileSync('./assets/themes/mapcomplete-changes/mapcomplete-changes.json', JSON.stringify(proto, null, " "))
}
}
private buildLayerIndex(knownImagePaths: Set<string>): Map<string, LayerConfigJson> {

View file

@ -21,7 +21,7 @@ export default class CreateNoteImportLayerSpec extends T {
const layer = new LayerConfig(layerPrepare.convertStrict(desugaringState, bookcases, "ImportLayerGeneratorTest:Parse bookcases"), "ImportLayerGeneratorTest: init bookcases-layer")
const generator = new CreateNoteImportLayer()
const generatedLayer = generator.convertStrict(desugaringState, layer, "ImportLayerGeneratorTest: convert")
fs.writeFileSync("bookcases-import-layer.generated.json", JSON.stringify(generatedLayer, null, " "), "utf8")
// fs.writeFileSync("bookcases-import-layer.generated.json", JSON.stringify(generatedLayer, null, " "), "utf8")
console.log(JSON.stringify(generatedLayer, null, " "))
}]
]);