diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 964b5c27f1..0000000000 --- a/.gitpod.yml +++ /dev/null @@ -1,20 +0,0 @@ -tasks: - - init: npm run init - command: npm run start - name: Initialize and start MapComplete - - name: Generate Layeroverview - command: npm run generate:layeroverview - -ports: - - name: MapComplete Website - port: 1234 - onOpen: open-browser - -vscode: - extensions: - - "esbenp.prettier-vscode" - - "eamodio.gitlens" - - "github.vscode-pull-request-github" - - "svelte.svelte-vscode" - - "bradlc.vscode-tailwindcss" - - "editorconfig.editorconfig" diff --git a/Docs/Development_deployment.md b/Docs/Development_deployment.md index 317cbddb80..4836505e43 100644 --- a/Docs/Development_deployment.md +++ b/Docs/Development_deployment.md @@ -31,17 +31,17 @@ You need at least 3GB RAM available to run MapComplete, but you'll preferably ha To develop and build MapComplete, you 0. Make a fork and clone the repository. (We recommend a shallow clone with `git clone --filter=blob:none `) -1. Install `python3` if you do not have it already - On Linux: `sudo apt install python3` +1. Install `python3` if you do not have it already - On Linux: `sudo apt install python3` or `sudo dnf install python3` 2. Install `nvm` to easily install node: - `wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash` - Restart your terminal - Run `nvm install` and `nvm use` to install and use the correct version of node. (_Note: nvm might complain that the relevant version is not yet installed. It'll have it installed only for the current user account but not system-wide - which is fine) -4. Run `npm run init` (including **run**, not ~~`npm init`~~)which … +3. Run `npm run init` (including **run**, not ~~`npm init`~~)which … - runs `npm ci` for you - generates some additional dependencies and files - does various housekeeping and setup. This can take a few minutes the first time as some PNGs need to be created -5. Run `npm run start` to host a local testversion at http://localhost:1234/ -6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` +4. Run `npm run start` to host a local testversion at http://127.0.0.1:1234/ +5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` or `userlayout=true#` as [Query parameter](URL_Parameters.md). Note that the shorter URLs (e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. @@ -52,31 +52,18 @@ Development using Windows You need at least 3GB RAM available to run MapComplete, but you'll preferably have 8GB of free RAM available. -For Windows you can use the devcontainer, or the WSL subsystem. - -To use the devcontainer in Visual Studio Code: - -0. Make sure you have installed - the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) - extension and it's dependencies. -1. Make a fork and clone the repository. -2. After cloning, Visual Studio Code will ask you if you want to use the devcontainer. -3. Then you can either clone it again in a volume (for better performance), or open the current folder in a container. -4. By now, you should be able to run `npm run start` to host a local testversion at http://localhost:1234/index.html -5. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` - or `userlayout=true#` as [Query parameter](URL_Parameters.md). Note that the shorter URLs ( - e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. +For Windows you can use the WSL subsystem. To use the WSL in Visual Studio Code: -0. Make sure you have installed the [Remote - WSL]() extension and it's dependencies. -1. Open a remote WSL window using the button in the bottom left. -2. Make a fork and clone the repository. -3. Install `npm` using `sudo apt install npm`. -4. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the +1. Make sure you have installed the [Remote - WSL](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) extension and it's dependencies. +2. Open a remote WSL window using the button in the bottom left. +3. Make a fork and clone the repository. +4. Install `npm` using `sudo apt install npm`. +5. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the dependencies too -5. Run `npm run start` to host a local testversion at http://localhost:1234/index.html -6. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` +6. Run `npm run start` to host a local testversion at http://127.0.0.1:1234/index.html +7. By default, a landing page with available themes is served. In order to load a single theme, use `layout=themename` or `userlayout=true#` as [Query parameter](URL_Parameters.md). Note that the shorter URLs ( e.g. `bookcases.html`, `aed.html`, ...) _don't_ exist on the development version. @@ -95,10 +82,12 @@ Note that `npm run start` is equivalent to `npm run generate:layeroverview && np Automatic deployment -------------------- -Currently, the master branch is automatically deployed to https://mapcomplete.org/ by a Forgejo action. +MapComplete is automatically deployed to various locations, depending on the branch you are working on. -Every branch is automatically built (upon push) to `https://pietervdvn.github.io/mc/` by a GitHub action. +The master branch is automatically deployed to https://mapcomplete.org/, and the development branch is available at +https://dev.mapcomplete.org/. Both are automatically deployed by a Forgejo action. +Other branches are automatically deployed to https://builds.mapcomplete.org/. Deploying a fork ---------------- @@ -113,9 +102,9 @@ This script can be invoked with `npm run prepare-deploy` If you want to deploy your fork: -0. `npm run prepare-deploy` -1. `npm run build` -2. Copy the entire `dist` folder to where you host your website. Visiting `index.html` gives you the landing page, +1. `npm run prepare-deploy` +2. `npm run build` +3. Copy the entire `dist` folder to where you host your website. Visiting `index.html` gives you the landing page, visiting `yourwebsite/` should bring you to the appropriate theme. ### Getting your own API-keys diff --git a/assets/layers/atm/atm.json b/assets/layers/atm/atm.json index 95aedebe57..eda4cbc349 100644 --- a/assets/layers/atm/atm.json +++ b/assets/layers/atm/atm.json @@ -399,6 +399,41 @@ } ] }, + { + "id": "cash_in-types", + "question": { + "en": "In what ways can you deposit cash at this ATM?", + "nl": "Op welke manieren kan je geld storten bij deze geldautomaat?" + }, + "mappings": [ + { + "if": "cash_in:coins=yes", + "ifnot": "cash_in:coins=no", + "then": { + "en": "You can deposit coins at this ATM", + "nl": "Je kan munten storten bij deze geldautomaat" + } + }, + { + "if": "cash_in:notes=yes", + "ifnot": "cash_in:notes=no", + "then": { + "en": "You can deposit notes at this ATM", + "nl": "Je kan biljetten storten bij deze geldautomaat" + } + }, + { + "if": "cash_in:sealbags=yes", + "ifnot": "cash_in:sealbags=no", + "then": { + "en": "You can deposit sealed bags at this ATM", + "nl": "Je kan sealbags storten bij deze geldautomaat" + } + } + ], + "condition": "cash_in=yes", + "multiAnswer": true + }, { "id": "cash_out-denominations-notes", "question": { diff --git a/assets/layers/mobility_hub/logo-hub.svg b/assets/layers/mobility_hub/logo-hub.svg index ea9f6c8072..9f6424ced5 100644 --- a/assets/layers/mobility_hub/logo-hub.svg +++ b/assets/layers/mobility_hub/logo-hub.svg @@ -8,7 +8,7 @@ height="500" viewBox="0 0 500 500" sodipodi:docname="logo-hub.svg" - inkscape:version="1.4 (e7c3feb100, 2024-10-09)" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" @@ -25,10 +25,10 @@ inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:zoom="0.68921927" - inkscape:cx="263.34145" - inkscape:cy="171.93367" - inkscape:window-width="1704" - inkscape:window-height="996" + inkscape:cx="264.06691" + inkscape:cy="172.65913" + inkscape:window-width="2560" + inkscape:window-height="1371" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" @@ -45,17 +45,11 @@ d="m 436.5236,681.36291 c -6.74741,-2.13918 -14.9843,-7.26966 -34.32508,-21.37991 -68.5756,-50.02998 -120.91693,-107.10242 -149.04086,-162.51261 -17.0909,-33.67273 -25.59741,-65.40593 -26.628,-99.33465 -1.15068,-37.88281 6.06308,-71.70048 22.46148,-105.29805 30.02816,-61.52265 86.3781,-106.04268 152.70885,-120.6497 17.43029,-3.83841 28.50629,-4.98052 48.30017,-4.98052 19.79387,0 30.86987,1.14211 48.30016,4.98052 94.21933,20.7485 164.51505,100.20844 174.54536,197.3003 1.58552,15.34767 0.64021,42.86331 -1.97525,57.4944 -13.20508,73.87025 -65.11208,147.83867 -152.43593,217.22396 -13.05291,10.37151 -39.96705,29.70314 -46.65434,33.51044 -10.2471,5.83402 -23.90103,7.24594 -35.25656,3.64582 z" id="path1" sodipodi:nodetypes="sssssssssssss" /> - hub + diff --git a/assets/layers/street_lamps/street_lamps.json b/assets/layers/street_lamps/street_lamps.json index bd30f2286d..57500bc578 100644 --- a/assets/layers/street_lamps/street_lamps.json +++ b/assets/layers/street_lamps/street_lamps.json @@ -270,7 +270,8 @@ "ca": "Aquest fanal es troba al final d'un pal recte", "cs": "Tato lampa je umístěna na vrcholu rovného stožáru", "it": "Questo lampione si trova in cima a un palo dritto" - } + }, + "icon": "./assets/layers/street_lamps/straight_pole.svg" }, { "if": "lamp_mount=bent_mast", @@ -282,7 +283,8 @@ "ca": "Aquest fanal es troba al final d'un pal doblegat", "cs": "Tato lampa je umístěna na konci ohnutého stožáru", "it": "Questo lampione si trova all'estremità di un palo curvo" - } + }, + "icon": "./assets/layers/street_lamps/bent_pole_1.svg" } ], "condition": { @@ -675,4 +677,4 @@ "enableImproveAccuracy": true, "enableRelocation": false } -} +} \ No newline at end of file diff --git a/assets/layers/surveillance_camera/surveillance_camera.json b/assets/layers/surveillance_camera/surveillance_camera.json index a1f2de1dc0..d483aad4af 100644 --- a/assets/layers/surveillance_camera/surveillance_camera.json +++ b/assets/layers/surveillance_camera/surveillance_camera.json @@ -27,7 +27,12 @@ "source": { "osmTags": { "and": [ - "man_made=surveillance", + { + "or": [ + "man_made=surveillance", + "disused:man_made=surveillance" + ] + }, { "or": [ "surveillance:type=camera", @@ -52,7 +57,15 @@ "es": "Cámara de vigilancia", "cs": "Bezpečnostní kamera", "sl": "Nadzorna kamera" - } + }, + "mappings": [ + { + "if": "disused:man_made=surveillance", + "then": { + "en": "Disused surveillance camera" + } + } + ] }, "pointRendering": [ { @@ -122,7 +135,13 @@ "then": "calc({_direction:numerical}deg - 90deg)" } ] - } + }, + "iconBadges": [ + { + "if": "disused:man_made=surveillance", + "then": "close:red" + } + ] } ], "lineRendering": [ @@ -237,6 +256,35 @@ ], "tagRenderings": [ "images", + { + "id": "active", + "question": { + "en": "Is this camera currently in use?", + "nl": "Is deze camera momenteel in gebruik?" + }, + "mappings": [ + { + "if": "man_made=surveillance", + "then": { + "en": "This camera is currently in use.", + "nl": "Deze camera is momenteel in gebruik." + }, + "addExtraTags": [ + "disused:man_made=" + ] + }, + { + "if": "disused:man_made=surveillance", + "then": { + "en": "This camera is not used anymore", + "nl": "Deze camera is niet meer in gebruik" + }, + "addExtraTags": [ + "man_made=" + ] + } + ] + }, { "id": "has_alpr", "question": { @@ -910,4 +958,4 @@ "enableRelocation": false }, "enableMorePrivacy": true -} +} \ No newline at end of file diff --git a/assets/layers/transit_routes/transit_routes.json b/assets/layers/transit_routes/transit_routes.json index 2d1b1ca770..709e0ef0b8 100644 --- a/assets/layers/transit_routes/transit_routes.json +++ b/assets/layers/transit_routes/transit_routes.json @@ -1,9 +1,9 @@ { "id": "transit_routes", "name": { - "en": "Bus lines", + "en": "Transit Routes", "de": "Buslinien", - "nl": "Buslijnen", + "nl": "OV-lijnen", "da": "Buslinjer", "ca": "Línies de bus", "cs": "Autobusové linky", @@ -11,9 +11,9 @@ "it": "Linee degli autobus" }, "description": { - "en": "Layer showing bus lines", + "en": "Layer showing transit routes", "de": "Ebene mit Buslinien", - "nl": "Laag met buslijnen", + "nl": "Laag met OV-lijnen", "da": "Lag, der viser buslinjer", "ca": "Capa que mostra les línies d'autobús", "cs": "Vrstva zobrazující autobusové linky", @@ -22,9 +22,14 @@ }, "source": { "osmTags": { - "and": [ - "type=route", - "route=bus" + "or": [ + "route=bus", + "route=tram", + "route=trolleybus", + "route=light_rail", + "route=subway", + "route=train", + "route=ferry" ] } }, @@ -34,9 +39,9 @@ "minzoom": 15, "title": { "render": { - "en": "Bus line", + "en": "Transit route", "de": "Buslinie", - "nl": "Buslijn", + "nl": "OV-lijn", "da": "Buslinje", "ca": "Línia de bus", "cs": "Autobusová linka", @@ -65,7 +70,14 @@ "condition": { "and": [ "id~relation/[0-9]+", - "_numeric_id~*" + "_numeric_id~*", + { + "or": [ + "route=bus", + "route=tram", + "route=trolleybus" + ] + } ] }, "render": "on relatify" @@ -90,9 +102,9 @@ { "id": "name", "question": { - "en": "What is the name for this bus line? (i.e. Bus XX: From => Via => To)", + "en": "What is the name for this transit route? (i.e. Bus XX: From => Via => To)", "de": "Wie lautet der Name der Buslinie? (z.B. Bus XX: Von => Über => Nach)", - "nl": "Wat is de naam van deze buslijn (bv. Bus XX: Van => Via => Naar)", + "nl": "Wat is de naam van deze OV-lijn (bv. Bus XX: Van => Via => Naar)", "cs": "Jak se jmenuje tato autobusová linka? (tj. Autobus XX: Od => Přes => Do)", "es": "¿Cuál es el nombre de esta línea de autobús? (es decir, Autobús XX: Desde => Vía => Hasta)", "ca": "Quin és el nom d'aquesta línia d'autobús? (és a dir, Bus XX: De : Via ) A)", @@ -108,9 +120,9 @@ { "id": "from", "question": { - "en": "What is the starting point for this bus line?", + "en": "What is the starting point for this transit route?", "de": "Wo ist der Startpunkt dieser Buslinie?", - "nl": "Wat is het beginpunt van deze buslijn?", + "nl": "Wat is het beginpunt van deze OV-lijn?", "da": "Hvad er udgangspunktet for denne buslinje?", "ca": "Quin és el punt inicial d'aquesta línea d'autobús?", "cs": "Jaký je výchozí bod této autobusové linky?", @@ -118,9 +130,9 @@ "it": "Qual è il punto di partenza di questa linea di autobus?" }, "render": { - "en": "This bus line begins at {from}", + "en": "This transit route begins at {from}", "de": "Die Buslinie startet von {from}", - "nl": "Deze buslijn begint bij {from}", + "nl": "Deze OV-lijn begint bij {from}", "da": "Denne buslinje starter kl. {from}", "fr": "Cette ligne de bus commence à {from}", "ca": "Aquesta línia d'autobús comença a {from}", @@ -138,9 +150,9 @@ { "id": "via", "question": { - "en": "What is the via point for this bus line?", + "en": "What is the via point for this transit route?", "de": "Über welchen Zwischenhalt fährt die Buslinie?", - "nl": "Via welk punt gaat deze buslijn?", + "nl": "Via welk punt gaat deze OV-lijn?", "cs": "Jaký je průjezdní bod této autobusové linky?", "ru": "Где находится конечный пункт этого автобусного маршрута?", "es": "¿Cuál es el punto intermedio de esta línea de autobús?", @@ -149,9 +161,9 @@ "uk": "Яка кінцева зупинка цієї автобусної лінії?" }, "render": { - "en": "This bus line goes via {via}", + "en": "This transit route goes via {via}", "de": "Die Buslinie fährt über {via}", - "nl": "Deze buslijn gaat via {via}", + "nl": "Deze OV-lijn gaat via {via}", "da": "Denne buslinje går via {via}", "fr": "Cette ligne de bus passe par {via}", "ca": "Aquesta línia d'autobús passa per {via}", @@ -168,9 +180,9 @@ { "id": "to", "question": { - "en": "What is the ending point for this bus line?", + "en": "What is the ending point for this transit route?", "de": "Wo ist der Endpunkt der Buslinie?", - "nl": "Wat is het eindpunt van deze buslijn?", + "nl": "Wat is het eindpunt van deze OV-lijn?", "da": "Hvad er endestationen for denne buslinje?", "ca": "Quin és el punt final d'aquesta línea d'autobús?", "cs": "Jaký je konečný bod této autobusové linky?", @@ -178,9 +190,9 @@ "it": "Qual è il punto di arrivo di questa linea di autobus?" }, "render": { - "en": "This bus line ends at {to}", + "en": "This transit route ends at {to}", "de": "Der Endpunkt der Buslinie ist {to}", - "nl": "Deze buslijn eindigt bij {to}", + "nl": "Deze OV-lijn eindigt bij {to}", "da": "Denne buslinje slutter ved {to}", "fr": "Cette ligne de bus termine à {to}", "ca": "Aquesta línia d'autobús acaba a {to}", @@ -198,9 +210,9 @@ { "id": "colour", "question": { - "en": "What is the colour for this bus line?", + "en": "What is the colour for this transit route?", "de": "Welche Farbe hat diese Buslinie?", - "nl": "Wat is de kleur van deze buslijn?", + "nl": "Wat is de kleur van deze OV-lijn?", "da": "Hvad er farven på denne buslinje?", "ca": "Quin és el color d'aquest línia d'autobús?", "cs": "Jakou barvu má tato autobusová linka?", @@ -208,9 +220,9 @@ "it": "Qual è il colore di questa linea di autobus?" }, "render": { - "en": "This bus line has the color {colour}", + "en": "This transit route has the color {colour}", "de": "Die Buslinie hat die Farbe {colour}", - "nl": "Deze buslijn heeft de kleur {colour}", + "nl": "Deze OV-lijn heeft de kleur {colour}", "da": "Denne buslinje har farven {colour}", "ca": "Aquesta línea d'autobús té el color {colour}", "cs": "Tato autobusová linka má barvu {colour}", @@ -225,9 +237,9 @@ { "id": "network", "question": { - "en": "What network does this bus line belong to?", + "en": "What network does this transit route belong to?", "de": "Zu welchem Verkehrsverbund gehört die Buslinie?", - "nl": "Bij welk netwerk hoort deze buslijn?", + "nl": "Bij welk netwerk hoort deze OV-lijn?", "da": "Hvilket netværk tilhører denne buslinje?", "ca": "A quina xarxa pertany aquesta línea d'autobús?", "cs": "Do jaké sítě tato autobusová linka patří?", @@ -235,9 +247,9 @@ "it": "A quale rete appartiene questa linea di autobus?" }, "render": { - "en": "This bus line is part of the {network} network", + "en": "This transit route is part of the {network} network", "de": "Die Buslinie gehört zum Verkehrsverbund {network}", - "nl": "Deze buslijn is onderdeel van het {network} netwerk", + "nl": "Deze OV-lijn is onderdeel van het {network} netwerk", "ca": "Aquesta línea d'autobús és part de la xarxa {network}", "fr": "Cette ligne de bus fait partie du réseau {network}", "cs": "Tato autobusová linka je součástí sítě {network}", @@ -254,9 +266,9 @@ "builtin": "operator", "override": { "question": { - "en": "What company operates this bus line?", + "en": "What company operates this transit route?", "de": "Welches Unternehmen betreibt die Buslinie?", - "nl": "Welk bedrijf exploiteert deze buslijn?", + "nl": "Welk bedrijf exploiteert deze OV-lijn?", "da": "Hvilket selskab driver denne buslinje?", "ca": "Quina companyia opera aquesta línia d'autobús?", "cs": "Jaká společnost provozuje tuto autobusovou linku?", @@ -264,9 +276,9 @@ "it": "Quale azienda gestisce questa linea di autobus?" }, "render": { - "en": "This bus line is operated by {operator}", + "en": "This transit route is operated by {operator}", "de": "Die Buslinie wird betrieben von {operator}", - "nl": "Deze buslijn wordt geëxploiteerd door {operator}", + "nl": "Deze OV-lijn wordt geëxploiteerd door {operator}", "da": "Denne buslinje drives af {operator}", "ca": "{operator} opera aquesta línea d'autobús", "fr": "Cette ligne de bus est gérée par {operator}", diff --git a/assets/layers/transit_stops/ferry.svg b/assets/layers/transit_stops/ferry.svg new file mode 100644 index 0000000000..44ee50cf58 --- /dev/null +++ b/assets/layers/transit_stops/ferry.svg @@ -0,0 +1,12 @@ + + +ANCHOR + + + + + + + + +