Improve statistics page

This commit is contained in:
Pieter Vander Vennet 2023-12-06 03:07:36 +01:00
parent d04132d42c
commit 6200b420b3
6 changed files with 161 additions and 198 deletions

View file

@ -1,33 +1,13 @@
{
"id": "mapcomplete-changes",
"title": {
"en": "Changes made with MapComplete",
"ca": "Canvis fets amb MapComplete",
"cs": "Změny provedené pomocí MapComplete",
"de": "Mit MapComplete erstellte Änderungen",
"es": "Cambios realizados con MapComplete",
"fr": "Changements faits avec MapComplete",
"nl": "Wijzigingen gemaakt met MapComplete",
"pl": "Zmiany wprowadzone za pomocą MapComplete"
"en": "Changes made with MapComplete"
},
"shortDescription": {
"en": "Show changes made with MapComplete",
"ca": "Mostra els canvis fets amb MapComplete",
"cs": "Zobrazení změn provedených pomocí nástroje MapComplete",
"de": "Mit MapComplete erstellte Änderungen anzeigen",
"es": "Mostrar cambios realizados con MapComplete",
"nl": "Toon wijzigingen gemaakt met MapComplete",
"pl": "Pokaż zmiany wprowadzone za pomocą MapComplete"
"en": "Shows changes made by MapComplete"
},
"description": {
"en": "This maps shows all the changes made with MapComplete",
"ca": "Aquest mapa mostra tots els canvis fets amb MapComplete",
"cs": "Tato mapa zobrazuje všechny změny provedené pomocí MapComplete",
"de": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen",
"es": "Este mapa muestra todos los cambios realizados con MapComplete",
"fr": "Cette carte montre tous les changements faits avec MapComplete",
"nl": "Deze kaart toont alle wijzigingen die met MapComplete gemaakt werden",
"pl": "Ta mapa pokazuje wszystkie zmiany wprowadzone za pomocą MapComplete"
"en": "This maps shows all the changes made with MapComplete"
},
"icon": "./assets/svg/logo.svg",
"hideFromOverview": true,
@ -40,13 +20,7 @@
{
"id": "mapcomplete-changes",
"name": {
"en": "Changeset centers",
"ca": "Centre del conjunt de canvis",
"cs": "Centrum změn",
"de": "Zentrum der Änderungssätze",
"es": "Centro del conjunto de cambios",
"nl": "Centerpunt van changeset",
"pl": "Centra zmian"
"en": "Changeset centers"
},
"minzoom": 0,
"source": {
@ -57,85 +31,41 @@
},
"title": {
"render": {
"en": "Changeset for {theme}",
"ca": "Conjunt de canvis per a {theme}",
"cs": "Změna pro {theme}",
"de": "Änderungssatz für {theme}",
"es": "Conjunto de cambios para {theme}",
"fr": "Groupe de modifications pour {theme}",
"pl": "Zestaw zmian dla {theme}"
"en": "Changeset for {theme}"
}
},
"description": {
"en": "Show all MapComplete changes",
"ca": "Mostra tots els canvis de MapComplete",
"cs": "Zobrazit všechny změny MapComplete",
"de": "Alle MapComplete-Änderungen anzeigen",
"es": "Mostrar todos los cambios de MapComplete",
"nl": "Toon alle MapComplete wijzigingen",
"pl": "Wyświetl wszystkie zmiany MapComplete"
"en": "Shows all MapComplete changes"
},
"tagRenderings": [
{
"id": "show_changeset_id",
"render": {
"en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
"ca": "Conjunt de canvi <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
"cs": "Změny <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
"de": "Änderungssatz <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
"es": "Conjunto de cambios <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
"fr": "Groupe de modifications <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>",
"pl": "Zestaw zmian <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
"en": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
}
},
{
"id": "contributor",
"question": {
"en": "Which contributor made this change?",
"ca": "Quin col·laborador va fer aquest canvi?",
"cs": "Který přispěvatel tuto změnu provedl?",
"de": "Wer hat diese Änderung vorgenommen?",
"es": "¿Qué contribuidor hizo este cambio?",
"fr": "Quel contributeur a fait cette modification ?",
"nl": "Welke bijdrager maakte deze wijziging?",
"pl": "Który współautor dokonał tej zmiany?"
"en": "What contributor did make this change?"
},
"freeform": {
"key": "user"
},
"render": {
"en": "Change made by <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
"ca": "Canvi fet per <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
"cs": "Změna provedená <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
"de": "Änderung von <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
"es": "Cambio realizado por <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
"fr": "Modification faite par <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
"nl": "Wijziging gemaakt door <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>",
"pl": "Zmiana dokonana przez <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>"
"en": "Change made by <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>"
}
},
{
"id": "theme-id",
"question": {
"en": "What theme was used to make this change?",
"ca": "Quin tema es va utilitzar per fer aquest canvi?",
"cs": "Jaké téma bylo použito k provedení této změny?",
"de": "Welches Thema wurde für diese Änderung verwendet?",
"es": "¿Qué tema se utilizó para realizar este cambio?",
"fr": "Quel thème a été utilisé pour faire cette modification ?",
"pl": "Jakiego tematu użyto do wprowadzenia tej zmiany?"
"en": "What theme was used to make this change?"
},
"freeform": {
"key": "theme"
},
"render": {
"en": "Change with theme <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
"ca": "Canvi amb el tema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
"cs": "Změna s motivem <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
"de": "Geändert mit Thema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
"es": "Cambio con tema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
"fr": "Modifié avec le thème <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>",
"pl": "Zmiana za pomocą motywu <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>"
"en": "Change with theme <a href='https://mapcomplete.org/{theme}'>{theme}</a>"
}
},
{
@ -144,45 +74,19 @@
"key": "locale"
},
"question": {
"en": "What locale (language) was this change made in?",
"ca": "Amb quina configuració regional (idioma) s'ha fet aquest canvi?",
"cs": "V jakém národním prostředí (jazyce) byla tato změna provedena?",
"de": "In welcher Benutzersprache wurde diese Änderung vorgenommen?",
"es": "¿En qué configuración regional (idioma) se realizó este cambio?",
"fr": "En quelle langue est-ce que ce changement a été fait ?",
"nl": "In welke locale (taal) werd deze wijziging gemaakt?",
"pl": "W jakim języku wprowadzono tę zmianę?"
"en": "What locale (language) was this change made in?"
},
"render": {
"en": "User locale is {locale}",
"ca": "La configuració regional de l'usuari és {locale}",
"cs": "Uživatelské prostředí je {locale}",
"de": "Benutzersprache {locale}",
"es": "La configuración regional del usuario es {locale}",
"nl": "De gebruikerstaal is {locale}",
"pl": "Ustawienia regionalne użytkownika to {locale}"
"en": "User locale is {locale}"
}
},
{
"id": "host",
"render": {
"en": "Change made with <a href='{host}'>{host}</a>",
"ca": "Canviat fet amb <a href='{host}'>{host}</a>",
"cs": "Změna provedená pomocí <a href='{host}'>{host}</a>",
"de": "Geändert über <a href='{host}'>{host}</a>",
"es": "Cambio realizado con <a href='{host}'>{host}</a>",
"fr": "Modification faite avec <a href='{host}'>{host}</a>",
"nl": "Wijziging gemaakt met <a href='{host}'>{host}</a>",
"pl": "Zmiana dokonana w <a href='{host}'>{host}</a>"
"en": "Change with with <a href='{host}'>{host}</a>"
},
"question": {
"en": "What host (website) was this change made with?",
"ca": "Amb quin amfitrió (lloc web) es va fer aquest canvi?",
"cs": "U jakého hostitele (webové stránky) byla tato změna provedena?",
"de": "Über welchen Host (Webseite) wurde diese Änderung vorgenommen?",
"es": "¿Con qué host (página web) se realizó este cambio?",
"nl": "Met welke host (website) werd deze wijziging gemaakt?",
"pl": "Na jakim hoście (stronie internetowej) dokonano tej zmiany?"
"en": "What host (website) was this change made with?"
},
"freeform": {
"key": "host"
@ -203,22 +107,10 @@
{
"id": "version",
"question": {
"en": "What version of MapComplete was used to make this change?",
"ca": "Quina versió de MapComplete es va utilitzar per fer aquest canvi?",
"cs": "Jaká verze aplikace MapComplete byla použita k provedení této změny?",
"de": "Mit welcher Version von MapComplete wurde diese Änderung gemacht?",
"es": "¿Qué versión de MapComplete se usó para realizar este cambio?",
"fr": "Quelle version de MapComplete a été utilisée pour faire cette modification ?",
"pl": "Która wersja MapComplete została wykorzystana, aby zrobić tę zmianę?"
"en": "What version of MapComplete was used to make this change?"
},
"render": {
"en": "Made with {editor}",
"ca": "Fet amb {editor}",
"cs": "Vyrobeno pomocí {editor}",
"de": "Erstellt mit {editor}",
"es": "Realizado con {editor}",
"fr": "Fait avec {editor}",
"pl": "Zrobione za pomocą {editor}"
"en": "Made with {editor}"
},
"freeform": {
"key": "editor"
@ -392,6 +284,10 @@
"if": "theme=kerbs_and_crossings",
"then": "./assets/layers/kerbs/KerbIcon.svg"
},
{
"if": "theme=mapcomplete-changes",
"then": "./assets/svg/logo.svg"
},
{
"if": "theme=maproulette",
"then": "./assets/layers/maproulette/logomark.svg"
@ -564,13 +460,45 @@
}
],
"question": {
"en": "Theme name contains {search}",
"ca": "El nom del tema conté {search}",
"cs": "Název motivu obsahuje {search}",
"de": "Themenname enthält {search}",
"es": "El nombre del tema contiene {search}",
"nl": "Themenaam bevat {search}",
"pl": "Nazwa tematu zawiera {search}"
"en": "Themename contains {search}"
}
}
]
},
{
"id": "theme-not-search",
"options": [
{
"osmTags": "theme!~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Themename does <b>not</b> contain {search}"
}
}
]
},
{
"id": "exclude_grb",
"options": [
{
"osmTags": "theme!=grb",
"question": {
"en": "Exclude GRB theme"
}
}
]
},
{
"id": "exclude_etymology",
"options": [
{
"osmTags": "theme!=etymology",
"question": {
"en": "Exclude etymology theme"
}
}
]
@ -586,13 +514,7 @@
}
],
"question": {
"en": "Made by contributor {search}",
"ca": "Fet pel col·laborador {search}",
"cs": "Vytvořil přispěvatel {search}",
"de": "Erstellt von {search}",
"es": "Hecho por el colaborador {search}",
"nl": "Gemaakt door bijdrager {search}",
"pl": "Wykonane przez współautora {search}"
"en": "Made by contributor {search}"
}
}
]
@ -608,13 +530,7 @@
}
],
"question": {
"en": "<b>Not</b> made by contributor {search}",
"ca": "<b>No</b> fet pel col·laborador {search}",
"cs": "<b>Není</b> vytvořeno přispěvatelem {search}",
"de": "<b>Nicht</b> erstellt von {search}",
"es": "<b>No</b> hecho por el colaborador {search}",
"nl": "<b>Niet</b> gemaakt door bijdrager {search}",
"pl": "<b>Nie</b> wykonane przez współautora {search}"
"en": "<b>Not</b> made by contributor {search}"
}
}
]
@ -631,13 +547,7 @@
}
],
"question": {
"en": "Made before {search}",
"ca": "Fet abans de {search}",
"cs": "Vytvořeno před {search}",
"de": "Erstellt vor {search}",
"es": "Hecho antes de {search}",
"nl": "Gemaakt voor {search}",
"pl": "Stworzone przed {search}"
"en": "Made before {search}"
}
}
]
@ -654,13 +564,7 @@
}
],
"question": {
"en": "Made after {search}",
"ca": "Fet després de {search}",
"cs": "Vytvořeno po {search}",
"de": "Erstellt nach {search}",
"es": "Hecho después de {search}",
"nl": "Gemaakt na {search}",
"pl": "Stworzone po {search}"
"en": "Made after {search}"
}
}
]
@ -676,14 +580,7 @@
}
],
"question": {
"en": "User language (iso-code) {search}",
"ca": "Idioma de l'usuari (codi iso) {search}",
"cs": "Jazyk uživatele (iso-kód) {search}",
"de": "Benutzersprache (ISO-Code) {search}",
"es": "Use idioma (ISO-code) {search}",
"fr": "Langage utilisateur (code-ISO) {search}",
"nl": "De taal van de bijdrager is {search}",
"pl": "Język użytkownika (kod iso) {search}"
"en": "User language (iso-code) {search}"
}
}
]
@ -699,13 +596,7 @@
}
],
"question": {
"en": "Made with host {search}",
"ca": "Fet amb l'amfitrió {search}",
"cs": "Vytvořeno pomocí hostitele {search}",
"de": "Erstellt mit Host {search}",
"es": "Hecho con el host {search}",
"nl": "Gemaakt met host {search}",
"pl": "Wykonane z hostem {search}"
"en": "Made with host {search}"
}
}
]
@ -716,14 +607,7 @@
{
"osmTags": "add-image>0",
"question": {
"en": "Changeset added at least one image",
"ca": "El conjunt de canvis ha afegit almenys una imatge",
"cs": "Sada změn přidala alespoň jeden obrázek",
"de": "Im Änderungssatz wurde mindestens ein Bild hinzugefügt",
"es": "El conjunto de cambios ha añadido al menos una imagen",
"fr": "Le groupe de modifications a ajouté au moins une image",
"nl": "Changeset bevat minstens één afbeelding",
"pl": "Zestaw zmian dodał co najmniej jedno zdjęcie"
"en": "Changeset added at least one image"
}
}
]
@ -738,13 +622,7 @@
{
"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>",
"ca": "Es pot trobar més estadística <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>aquí</a>",
"cs": "Další statistiky najdete <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>",
"de": "Mehr Statistiken gibt es <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>hier</a>",
"es": "Puede encontrar más estadísticas <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>aquí</a>",
"fr": "D'autres statistiques sont disponibles <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>ici</a>",
"pl": "Więcej statystyk można znaleźć <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>tutaj</a>"
"en": "More statistics can be found <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>here</a>"
}
},
{

View file

@ -151,6 +151,44 @@
}
]
},
{
"id": "theme-not-search",
"options": [
{
"osmTags": "theme!~i~.*{search}.*",
"fields": [
{
"name": "search"
}
],
"question": {
"en": "Themename does <b>not</b> contain {search}"
}
}
]
},
{
"id": "exclude_grb",
"options": [
{
"osmTags": "theme!=grb",
"question": {
"en": "Exclude GRB theme"
}
}
]
},
{
"id": "exclude_etymology",
"options": [
{
"osmTags": "theme!=etymology",
"question": {
"en": "Exclude etymology theme"
}
}
]
},
{
"id": "created_by",
"options": [

View file

@ -392,8 +392,10 @@ class LayerOverviewUtils extends Script {
const mcChangesPath = "./assets/themes/mapcomplete-changes/mapcomplete-changes.json"
if (
(recompiledThemes.length > 0 &&
!(recompiledThemes.length === 1 && recompiledThemes[0] === "mapcomplete-changes") &&
args.indexOf("--generate-change-map") >= 0) ||
!(
recompiledThemes.length === 1 && recompiledThemes[0] === "mapcomplete-changes"
)) ||
args.indexOf("--generate-change-map") >= 0 ||
!existsSync(mcChangesPath)
) {
// mapcomplete-changes shows an icon for each corresponding mapcomplete-theme

View file

@ -18,6 +18,8 @@ export class StackedRenderingChart extends ChartJs {
options?: {
period: "day" | "month"
groupToOtherCutoff?: 3 | number
// If given, take the sum of these fields to get the feature weight
sumFields?: string[]
}
) {
const { labels, data } = TagRenderingChart.extractDataAndLabels(tr, features, {
@ -78,7 +80,30 @@ export class StackedRenderingChart extends ChartJs {
const countsPerDay: number[] = []
for (let i = 0; i < trimmedDays.length; i++) {
const day = trimmedDays[i]
countsPerDay[i] = perDay[day]?.length ?? 0
const featuresForDay = perDay[day]
if (!featuresForDay) {
continue
}
if (options.sumFields !== undefined) {
let sum = 0
for (const featuresForDayElement of featuresForDay) {
const props = featuresForDayElement.properties
for (const key of options.sumFields) {
if (!props[key]) {
continue
}
const v = Number(props[key])
if (isNaN(v)) {
continue
}
sum += v
}
}
countsPerDay[i] = sum
} else {
countsPerDay[i] = featuresForDay?.length ?? 0
}
}
let backgroundColor =
TagRenderingChart.borderColors[i % TagRenderingChart.borderColors.length]

View file

@ -13,8 +13,8 @@
let tags = state.featureProperties.getStore(properties.id) ?? new ImmutableStore(properties);
const favLayer = state.layerState.filteredLayers.get("favourite");
const favConfig = favLayer.layerDef;
const titleConfig = favConfig.title;
const favConfig = favLayer?.layerDef;
const titleConfig = favConfig?.title;
function center() {
const [lon, lat] = GeoOperations.centerpointCoordinates(feature);
@ -50,6 +50,7 @@
</script>
{#if favLayer !== undefined}
<div class="px-1 my-1 border-2 border-dashed border-gray-300 rounded grid grid-cols-2 items-center no-weblate">
<button class="cursor-pointer ml-1 m-0 link justify-self-start" on:click={() => select()}>
<TagRenderingAnswer config={titleConfig} extraClasses="underline" layer={favConfig} selectedElement={feature}
@ -81,3 +82,4 @@
</div>
</div>
</div>
{/if}

View file

@ -6,7 +6,7 @@ import { VariableUiElement } from "./Base/VariableUIElement"
import Loading from "./Base/Loading"
import { Utils } from "../Utils"
import Combine from "./Base/Combine"
import { StackedRenderingChart } from "./BigComponents/TagRenderingChart"
import TagRenderingChart, { StackedRenderingChart } from "./BigComponents/TagRenderingChart"
import BaseUIElement from "./BaseUIElement"
import Title from "./Base/Title"
import { FixedUiElement } from "./Base/FixedUiElement"
@ -150,11 +150,29 @@ class StatsticsForOverviewFile extends Combine {
new Combine([
new Title(tr.question ?? tr.id).SetClass("p-2"),
total > 1 ? total + " unique value" : undefined,
new Title("By number of changesets", 4).SetClass("p-2"),
new StackedRenderingChart(tr, <any>overview._meta, {
period: diffInDays <= 367 ? "day" : "month",
groupToOtherCutoff:
total > 50 ? 25 : total > 10 ? 3 : 0,
}).SetStyle("width: 100%; height: 600px"),
}).SetStyle("width: 75%; height: 600px"),
new TagRenderingChart(<any>overview._meta, tr, {
groupToOtherCutoff:
total > 50 ? 25 : total > 10 ? 3 : 0,
chartType: "doughnut",
chartclasses: "w-8 h-8",
sort: true,
}).SetStyle("width: 25rem"),
new Title("By number of modifications", 4).SetClass("p-2"),
new StackedRenderingChart(
tr,
<any>Utils.Clone(overview._meta),
{
period: diffInDays <= 367 ? "day" : "month",
groupToOtherCutoff: total > 50 ? 10 : 0,
sumFields: valuesToSum,
}
).SetStyle("width: 100%; height: 600px"),
]).SetClass("block border-2 border-subtle p-2 m-2 rounded-xl")
)
} catch (e) {