No description
Find a file
2022-01-05 17:08:35 +01:00
.devcontainer Add binoculars theme, auto reformat everything 2021-09-09 00:06:21 +02:00
.github Tune down number of CodeQL-runs 2021-11-07 18:41:34 +01:00
assets Add support for 'contact:email','contact:phone' and 'contact:website' (write to 'email', 'phone' and 'website' if changed) - fix #601; remove 'tel:' from phone addresses - fix #602; small fixes to tag preview in case of deletion 2022-01-05 17:08:35 +01:00
css WIP: automaton page 2021-12-12 17:35:08 +01:00
Customizations Cleanup of svg files, move matchpoint to explicit layer 2021-12-22 01:08:11 +01:00
Docs Regenerate docs 2021-12-30 22:02:11 +01:00
langs Add export_as_geojson, open_in_id and open_in_josm special renderings 2021-12-23 21:28:41 +01:00
Logic Add support for 'contact:email','contact:phone' and 'contact:website' (write to 'email', 'phone' and 'website' if changed) - fix #601; remove 'tel:' from phone addresses - fix #602; small fixes to tag preview in case of deletion 2022-01-05 17:08:35 +01:00
Models Add check: layer and theme ids must be lowercase and match [a-z_-]* 2021-12-30 22:36:34 +01:00
scripts Cleanup of svg files, move matchpoint to explicit layer 2021-12-22 01:08:11 +01:00
static Added cyclofix capacity cargo; covered; non-bike shop; pump dyn title 2020-07-29 13:16:21 +02:00
test Add workaround for turf.intersect which can't deal with touching polygons 2021-12-24 02:48:04 +01:00
UI Add support for 'contact:email','contact:phone' and 'contact:website' (write to 'email', 'phone' and 'website' if changed) - fix #601; remove 'tel:' from phone addresses - fix #602; small fixes to tag preview in case of deletion 2022-01-05 17:08:35 +01:00
vendor Remove obsolete css files 2021-10-09 22:39:57 +02:00
.gitattributes Experimental json merge driver 2021-10-01 04:59:22 +02:00
.gitignore When a logged-in user opens a popup, the latest data will be downloaded and tags are updated to prevent duplicate work, fix #505 2021-10-10 00:53:14 +02:00
.prettierrc temporary formatting 2021-07-26 18:00:21 +02:00
.tool-versions Use node16 and asdf 2021-09-22 18:56:51 +02:00
AllTranslationAssets.ts Removed compiled translations from github, they reference the generated file in assets now 2021-05-10 23:45:28 +02:00
apple_touch_icon.png Add apple touch icons, fix for #223 2021-03-17 14:17:33 +01:00
automaton.html Add automaton-page 2021-12-12 17:16:15 +01:00
customGenerator.html Add binoculars theme, auto reformat everything 2021-09-09 00:06:21 +02:00
dependencies.svg Further improvements to entrances theme, add layer-crossdependency detection, add layers which another layer depends on automatically to the theme, add documentation on which layers depends on which other layers, regenerate documentation 2021-12-05 02:06:14 +01:00
generated.license_info.json Wrote a script to autofix issues with themes, applied this on the hailhydrant theme 2021-04-11 14:11:02 +02:00
index.css Add special visualisation for automated actions, add missing_street-theme, various fixes 2021-12-12 02:59:24 +01:00
index.html Full code cleanup 2021-11-07 16:34:51 +01:00
index.manifest Fix build 2021-11-07 16:43:29 +01:00
index.ts Update of latlon2country and use its async interface; small refactoring of simplemetagging, improvements to cacheBuilder which respects isShown and calculated tags now 2021-12-07 02:22:56 +01:00
land.html Add MapComplete 2020-06-24 00:35:19 +02:00
LICENSE Small fixes for the GRB theme and value substitution 2020-08-27 00:08:00 +02:00
manifest.manifest Add binoculars theme, auto reformat everything 2021-09-09 00:06:21 +02:00
package-lock.json Add workaround for turf.intersect which can't deal with touching polygons 2021-12-24 02:48:04 +01:00
package.json Add workaround for turf.intersect which can't deal with touching polygons 2021-12-24 02:48:04 +01:00
preferences.html Add binoculars theme, auto reformat everything 2021-09-09 00:06:21 +02:00
preferences.ts Full code cleanup 2021-11-07 16:34:51 +01:00
professional.html Add professional html page 2021-11-25 21:33:50 +01:00
README.md Readme update 2021-11-25 21:33:34 +01:00
State.ts Full code cleanup 2021-11-07 16:34:51 +01:00
tailwind.config.js Full code cleanup 2021-11-07 16:34:51 +01:00
test.html Add privacy policy 2021-11-16 04:16:51 +01:00
test.ts Add buttons to quickly swap background layers (also in the locationInput), move copyright into home panel, split privacy policy to seperate welcome message tab 2021-11-21 02:44:35 +01:00
tsconfig.json Add binoculars theme, auto reformat everything 2021-09-09 00:06:21 +02:00
Utils.ts Fix non-appearing new icon, remove debug outputs 2021-12-14 17:29:21 +01:00

MapComplete

Let a thousand flowers bloom

MapComplete is an OpenStreetMap viewer and editor. It shows map features on a certain topic, and allows to see, edit and add new features to the map. It can be seen as a webversion crossover of StreetComplete and MapContrib. It tries to be just as easy to use as StreetComplete, but it allows to focus on one single theme per instance (e.g. nature, bicycle infrastructure, ...)

The design goals of MapComplete are to be:

  • Easy to use, both on web and on mobile
  • Easy to deploy (by not having a backend)
  • Easy to set up a custom theme
  • Easy to fall down the rabbit hole of OSM

The basic functionality is to download some map features from Overpass and then ask certain questions. An answer is sent back to directly to OpenStreetMap.

Furthermore, it shows images present in the image tag or, if a wikidata or wikimedia_commons-tag is present, it follows those to get these images too.

An explicit non-goal of MapComplete is to modify geometries of ways, especially generic geometry-editing. (Splitting roads is possible and in some restricted themes is geometry-conflation possible too)

More about MapComplete: Watch Pieter's talk on the 2021 State Of The Map Conference (YouTube) about the history, vision and future of MapComplete.

Creating your own theme

It is possible to quickly make and distribute your own theme

Examples

There are plenty more. Discover them in the app.

Statistics

To see statistics, consult OsmCha or the analytics page

User journey

MapComplete is set up to lure people into OpenStreetMap and to teach them while they are on the go, step by step.

A typical user journey would be:

  1. Oh, this is a cool map of my specific interest! There is a lot of data already...

    • The user might discover the explanation about OSM in the second tab
    • The user might share the map and/or embed it in the third tab
    • The user might discover the other themes in the last tab
  2. The user clicks that big tempting button 'login' in order to answer questions - there's enough of these login buttons... The user creates an account.

  3. The user answers a question! Hooray! The user transformed into a contributor now.

    • When at least one question is answered (aka: having one changeset on OSM), adding a new point is unlocked
  4. The user adds a new POI somewhere

    • Note that all messages must be read before being able to add a point.
    • In other words, sending a message to a misbehaving MapComplete user acts as having a zero-day-block. This is added deliberately to make sure new users have to read feedback from the community.
  5. At 50 changesets, the personal layout is advertised. The personal theme is a theme where contributors can pick layers from all the official themes. Note that the personal theme is always available.

  6. At 200 changesets, the tags become visible when answering questions and when adding a new point from a preset. This is to give more control to power users and to teach new users the tagging scheme

  7. At 250 changesets, the tags get linked to the wiki

  8. At 500 changesets, I expect contributors to be power users and to be comfortable with tagging scheme and such. The custom theme generator is unlocked.

License

GPLv3.0 + recommended pingback.

I love it to see where the project ends up. You are free to reuse the software (under GPL) but, when you have made your own change and are using it, I would like to know about it. Drop me a line, give a pingback in the issues,...

Dev

To develop or deploy a version of MapComplete, have a look to the guide.

Translating MapComplete

The core strings and builtin themes of MapComplete are translated on Hosted Weblate. You can easily make an account and start translating in their web-environment - no installation required.

Translation status

Architecture

High-level overview

The website is purely static. This means that there is no database here, nor one is needed as all the data is kept in OpenStreetMap, Wikimedia (for images), Imgur. Settings are saved in the preferences-space of the OSM-website, amended by some local-storage if the user is not logged-in.

When viewing, the data is loaded from overpass. The data is then converted (in the browser) to geojson, which is rendered by Leaflet.

When a map feature is clicked, a popup shows the information, images and questions that are relevant for that object. The answers given by the user are sent (after a few seconds) to OpenStreetMap directly - if the user is logged in. If not logged in, the user is prompted to do so.

The UI-event-source is a class where the entire system is built upon, it acts as an observable object: another object can register for changes to update when needed.

Searching images

Images are fetched from:

  • The OSM image, image:0, image:1, ... tags
  • The OSM wikimedia_commons tags
  • If wikidata is present, the wikidata P18 (image) claim and, if a commons link is present, the commons images

Uploading images

Images are uploaded to Imgur, as their API was way easier to handle. The URL is written into the changes.

The idea is that once in a while, the images are transferred to wikipedia or that we hook up wikimedia directly (but I need some help in getting their API working).

Uploading changes

In order to avoid lots of small changesets, a changeset is opened and kept open. The changeset number is saved into the users preferences on OSM.

Whenever a change is made -even adding a single tag - the change is uploaded into this changeset. If that fails, the changeset is probably closed and we open a new changeset.

Note that changesets are closed automatically after one hour of inactivity, so we don't have to worry about closing them.

Documentation

All documentation can be found in here

Privacy

Privacy is important, we try to leak as little information as possible. All major personal information is handled by OSM. Geolocation is available on mobile only through the device's GPS location (so no geolocation is sent of to Google).

TODO: erase cookies of third party websites and API's

Attribution and Copyright

The code is available under GPL; all map data comes from OpenStreetMap (both foreground and background maps).

Background layer selection: curated by https://github.com/osmlab/editor-layer-index

Icons are attributed in various 'license_info.json'-files and can be found in the app.