Style | Standard • Cards

OpenStreetMap Blogs

Sunday, 15. November 2026

OpenStreetMap Blog

Announcing SotM 2027 in Bogota

It’s time to reconnect with familiar faces and meet new friends from the OpenStreetMap family around the world! We are excited to share that State of the Map (SotM), the international gathering of the OpenStreetMap community, will take place in Bogotá, Colombia in 2-4 July 2027! This edition will gather mappers, open data advocates, developers, […]

It’s time to reconnect with familiar faces and meet new friends from the OpenStreetMap family around the world!

We are excited to share that State of the Map (SotM), the international gathering of the OpenStreetMap community, will take place in Bogotá, Colombia in 2-4 July 2027! This edition will gather mappers, open data advocates, developers, and community leaders from across the world to celebrate OSM, open collaboration and community-driven mapping. Learning from past conferences, our goal for 2027 is to open the doors even wider, making it easier for more people to join, contribute, and be heard in this global celebration of open mapping.

Together with our amazing local team in Bogotá, we are working to build a creative, welcoming, and truly inclusive SotM experience, where every session and activity is designed with our global community in mind.

A message from the Bogota Local Team:
¡Hola desde Bogotá! For the Colombian and Latin American OpenStreetMap communities, hosting State of the Map is a dream come true. Our local team, led by AC3, the OpenStreetMap chapter in Colombia, brings together mappers from Bogotá, Medellín, Cúcuta, Yopal, Puerto López and beyond, and we are preparing a conference that feels like home for everyone. You will meet us at the Universidad Nacional de Colombia, a green and historic campus in the heart of the city, 2,600 meters closer to the stars. Bring your questions, your maps and your curiosity: we will bring the coffee, the music and a very warm welcome. ¡Nos vemos en Bogotá!

Save the date and start getting ready for SotM 2027! More details on speakers, program, tickets, and ways to get involved will be coming soon. So bring your maps, bring your ideas, and let’s make this an edition to remember!

SotM Organising Committee

The State of the Map conference is the annual, international conference of OpenStreetMap, organised by the OpenStreetMap Foundation. The OpenStreetMap Foundation is a not-for-profit organisation, formed to support the OpenStreetMap Project. It is dedicated to encouraging the growth, development and distribution of free geospatial data for anyone to use and share.  

The OpenStreetMap Foundation owns and maintains the infrastructure of the OpenStreetMap   project, is financially supported by membership fees and donations, and organises the annual, international State of the Map conference. Our volunteer Working Groups and small core staff work to support the OpenStreetMap project. Donate or Join the OpenStreetMap Foundation for just £15 a year or for free if you are an active OpenStreetMap contributor.

OpenStreetMap was founded in 2004 and is an international project to create a free map of  the world. To do so, we, thousands of volunteers, collect data about roads, railways, rivers, forests, buildings and a lot more worldwide. Our map data can be downloaded for free by everyone and used for any purpose – including commercial usage. It is possible to produce your own maps which highlight certain features, to calculate routes etc. OpenStreetMap is increasingly used when one needs maps which can be very quickly, or easily, updated.


OpenStreetMap User's Diaries

Capitole du Libre 2026

Hier soir, j’ai présenté dans l’amphithéâtre C002 au sein du campus de enseeiht à Toulouse, « Contribuez à OSM ». La bonne surprise fut le taux de remplissage de la salle. J’ai compté plus d’une vingtaine de personnes. La présentation était articulée en deux parties : la première, un tout petit peu de théorie et pas de présentation d’outils ; la deuxième, des démonstrations, des petits trucs fac

Hier soir, j’ai présenté dans l’amphithéâtre C002 au sein du campus de enseeiht à Toulouse, « Contribuez à OSM ». La bonne surprise fut le taux de remplissage de la salle. J’ai compté plus d’une vingtaine de personnes. La présentation était articulée en deux parties : la première, un tout petit peu de théorie et pas de présentation d’outils ; la deuxième, des démonstrations, des petits trucs faciles pour commencer, puis des trucs plus « grands » (de l’infrastructure). En trente minutes, j’avais plié ma présentation. Il restait vingt-cinq minutes, qui se sont très, très facilement remplies par de très nombreuses questions. Merci au plublic pour ces questions. Merci à l’organisation du Capitole du Libre. La présentation est disponible à https://files.hirlimann.net/talks/cdl2026/.


Flow of the River Ilagan

It’s been two months since I started to edit the Ilagan River again. While I had done so in the past, way before these two months, this period turned out to be a great adventure that I’m still hiking.

It was a time after Project CaCau. When I put it to an end, I felt not only disappointed, but ambitious. Why exactly? Well, I don’t know, but the roaring engine I had used to keep me going

It’s been two months since I started to edit the Ilagan River again. While I had done so in the past, way before these two months, this period turned out to be a great adventure that I’m still hiking.

It was a time after Project CaCau. When I put it to an end, I felt not only disappointed, but ambitious. Why exactly? Well, I don’t know, but the roaring engine I had used to keep me going through that project was still on, and I couldn’t just stop it. So, I had to redirect it somewhere.

For a bit, I had just redirected it to OSM. I experimented with multiple things and tried to pick up my old stuff. But one in particular caught my attention. A while ago, I was editing the river area of the Ilagan River. I never picked it up again until then. Despite that, it just stuck. Starting in the 15th of September, I got into the flow of the edits, and I never stopped.

I didn’t just do the main river either. I had also started doing its tributaries because my satisfaction didn’t get put with just that. Then, suddenly, the Bintacan River got finished, then the Nanaguan, and then I was suddenly speeding through the headwaters of the Abuan. I was now pushing 2K-3K edits a day, with the little free time I had.

My satisfaction didn’t stop; I had also started mapping the landslide areas. Now, at that point, I was satisfied. I had forgotten Project CaCau and its shadow that burdened me. Then, I realized: why not make this run official? Make it a project? So, I did.

Enter, Project KarayanIlagan. It meant “Ilagan River” in Ilocano: Karayan as River, and Ilagan as itself. Nothing changed in my workflow; just that I finally had a name to keep it going and back it up, putting hashtag comments for it as #KarayanIlagan (and later on with #ChasingWaterways for my fellow mappers’ initiative), and to give it a history and recognition.

Now, we place it here, right now. By the time I made this diary, I had gotten to 2nd in most map changes in the whole Philippines. I am still going, editing the waters of the River Abuan to contribute to my own project, ChasingWaterways, OpenStreetMap, and the Philippines itself. Eventually, I will finish, but for now, I will keep going.

To the people who see this, please hope for me to succeed. God bless, and Mabuhay!


Tweaked Every-Door editor a bit

I have custom branch of EveryDoor since July. Namely because for recycling containers i need tagging preset with custom field types not supported by iD schema and for ED plugin engine which has a annoying bug regarding NeedsInfo selectors.
Opening and searching presets was occasionally super slow and past few nights ive tried to fix annoyances. Turned out the performance fix was trivial as i

I have custom branch of EveryDoor since July. Namely because for recycling containers i need tagging preset with custom field types not supported by iD schema and for ED plugin engine which has a annoying bug regarding NeedsInfo selectors.
Opening and searching presets was occasionally super slow and past few nights ive tried to fix annoyances. Turned out the performance fix was trivial as i had compiled app with wrong parameter which caused app to not be able to compile something related to presets lookup.

Anyways, 2 nights later, achievements include:

  • saving downloaded map data at least 20x faster (by using already existing db index which existing query disregarded)
  • zoom no longer jams at zoom level 15. Technical reason is that ED has internally 2 map views for different zoom ranges and ones min and other’s max zoom was lvl 15.
  • amenities list scrolling is now vertical instead horizontal (which i thought was unintuitive and waste of space)
  • tiles are loaded while zooming, in current version, after zooming tiles are downloaded only on map drag event. Fixed by updating map library.
  • i discovered ED already has special overview map of downloaded osm data (dark-green rectangles at Menu -> Data Management -> Download tiles), but they are rather useless as they denote simply areas that was downloaded at some point. Merged rectangles into rasterized layer to show up to date and outdated areas as one.
  • haven’t been able to test, but cached map tiles should cleared after 1 month to prevent out of date background layer. I have previously created multiple false positive notes about missing road or building only to find my map layer was outdated
  • dragging to add new element while moving and tracking gps, won’t cause unexpected jumps and zoom changes as user’s location changes.
  • few more changes related to map interactions i forgot

Branch is at https://github.com/kallejre/every_door/tree/stable-dev. I should file PR, but half of those changes are really personal preference, not justifying to change UX flow for lots of people.

In future i wish to look into plugin manager, why is it impossible to update plugins without uninstalling previous version first.


weeklyOSM

weeklyOSM 851

♦[1] Mapped Chronicles: the real places behind books, films and games | map data © by OpenStreetMap Contributors. 05/11/2026-11/11/2026 Mapping Telegram Sam proposed tagging seaplane bases with aeroway=seaplane_base instead of aeroway=aerodrome, as they have no runways or aprons and more closely resemble harbours. The water landing area should use seamark:type=seaplane_landing_area instead of aerow
weeklyOSM 851
[1] Mapped Chronicles: the real places behind books, films and games | map data © by OpenStreetMap Contributors.

05/11/2026-11/11/2026

Mapping

  • Telegram Sam proposed tagging seaplane bases with aeroway=seaplane_base instead of aeroway=aerodrome, as they have no runways or aprons and more closely resemble harbours. The water landing area should use seamark:type=seaplane_landing_area instead of aeroway=runway, while landuse=industrial with industrial=port prevents retagged bases from disappearing from maps. The discussion is ongoing in the forum.

MaggieMaps and Jake Low are proposing to describe wetlands using the new keys wetland:connectivity, wetland:vegetation, and wetland:landform to specify their water source, vegetation, and terrain position, and extending the use of salt=* and anthropogenic=yes to wetlands. OpenStreetMap US is working with the Environmental Policy Innovation Center on OpenWetlandsMap, an OSM-based dataset. The discussion is ongoing on the Wiki and in the OpenStreetMap US Slack.

Mapping campaigns

  • Rphyrin used osm_pantau to highlight where mappers participated in the HOT Global Solidarity Mapathon 1 on Friday 6 November 2026.

Community

  • Rtnf has noticed a growing trend of new tools bringing the Wikidata and OpenStreetMap ecosystems closer together.

  • OSM user infraboiii has analysed the current state of vending machine tagging in France.

  • In the interview at OpenCage, Frank März shared the story behind OpenFireMap, a free web map of fire stations, hydrants, water supply points, and defibrillators from OpenStreetMap data across dozens of European countries. He rebuilt the map with AI assistance and it now serves pre-computed data for most countries with Overpass as a backup.

  • Mateusz Konieczny worked on improving iD and its tagging schema, with funding from the OpenStreetMap Foundation and the European Union through the NLnet Foundation, and has shared an update on the work completed so far.

  • Following a thread on the OSM Community forum, the OpenStreetMap France community started drafting rules to be applied on the forum given the recent influx of generative artificial intelligence issues such as servers and tools overload, wrong map contributions, and self promotion of vibe-coded applications. Some reminders are given, e.g. that LLM-copied code is stolen code, the forum isn’t a self-promoting place, non-free software won’t receive support from the community, and LLM usage should not become common practice.

  • Andres Gomez Casanova is proposing to translate the OSM tag building as ‘Edificación’, a Spanish term encompassing any built structure, regardless of size. Translating it as ’edifício’ would exclude structures such as sheds, kiosks, garages, greenhouses and petrol station canopies.

  • Andy Mabbett, in a blog post made on Remembrance Sunday, described how war memorials and the people named on them can be recorded as open, linked data. This includes photos with transcribed names on Wikimedia Commons, a page on WikiTree, a Wikidata item and a point on OpenStreetMap. The IDs of the services are then cross-referenced so that, for example, Wikidata contains the OSM ID and the OSM point contains the Wikidata ID. The Brierley Hill war memorial served as an example.

OpenStreetMap Foundation

  • Craig Allan, Chair of the OpenStreetMap Foundation Board, will speak at State of the Map Nigeria 2026 on ‘Community Mapping for Climate Change’.

Local chapter news

  • Eugene Alvin Villar, on behalf of the OSMF’s Local Chapters and Communities Working Group, opened a community discussion on the application from Asociación OpenStreetMap España to become an official OSMF Local Chapter. Although its geographic scope overlaps with that of the newer OSM Català chapter, both groups have stated that they do not object to the other’s status. The discussion runs until 24 November 2026.

Events

  • OpenStreetMap US has announced three events: Mapping USA is back as a free two-day virtual conference on 29 and 30 January 2027, with talk proposals open. The November Mappy Hour celebrates the 100th anniversary of Route 66 on 11 November 2026, and State of the Map US will take place in Baltimore, Maryland, from 11 to 13 June 2027.

  • To prepare for the upcoming State of the Map Nigeria 2026, the organising team, led by Victor N Sunday, Chair of SotM Nigeria 2026, paid a courtesy visit to the University of Uyo on Friday 6 November 2026.

  • Diego Gonzalez Ferreiro, Chief of the Solutions and Support Unit at the United Nations Global Service Centre, will speak at State of the Map Nigeria 2026 on ‘Open Geospatial Information for Peace, Development and Resilience: The UN Mappers Approach to Capacity Building, Collaborative Mapping and Humanitarian Action’.

  • The Open Transport Community Conference 2026, an (un)conference about Free Software and Open Data for mobility and public transport, was held at SBB Headquarters in Bern, Switzerland, from 6 to 9 October 2026. Recordings of the event are available on media.ccc.de.

Education

  • Jean-Christophe Becquet announced the return of his OpenData and OpenStreetMap course for undergraduate and master’s students at the Institut d’Urbanisme et de Géographie Alpine, Université Grenoble Alpes. The course aims to explain copyright and free licences, demonstrate the potential of open and collaborative data, and encourage students to contribute.

OSM research

  • AE35 has compared 38 recreational features, such as benches, fire pits, shelters, toilets, and outdoor artworks, in OpenStreetMap Denmark and the municipal dataset GeoFA since May 2024. The increased feature count is taken as an estimation: in OSM, the total number of features increased from 57,700 to 175,500; in GeoFA, it rose from 5,300 to 15,800. This means that OSM contained 159,750 more objects, thus it was approximately 10.9 times more efficient. The full analysis of all 38 objects can be found in a Google sheet. OpenStreetMap wins on every parameter.

Maps

  • Dim Kandin has made Adrenalin Spots, a map showing seasonal locations for kitesurfing, surfing, skiing, climbing, diving, sailing, and other sports throughout the year. The map covers around 580 spots and calculates a nightlife score based on nearby bars, clubs, restaurants, and cafés from OpenStreetMap data queried via Overpass, with locations within 5 km weighted more heavily than those within 15 km. The base map uses OpenFreeMap.

OSM in action

  • [1] Mapped Chronicles shows the real-world locations behind books, films, games, myths, and historical events on maps. Its currently 973 routes guide users through stories, stop by stop, with data, sources, and information about how accurately each location has been identified and whether it can be visited. Through the ‘Studio’, users can design their own routes and submit them for moderation review. The map is based on OpenStreetMap data.

  • MikeHur has been developing Wandering Around, a free browser game that lets players explore any town or city in the world using OpenStreetMap data.

Software

  • The Mangrove Reviews platform now allows people to import their Google Maps reviews by releasing them under an open licence, permitting their reuse in OSM-based tools like MapComplete and CoMaps.

  • devenzi has released ‘Devenzi Map Studio’, a WordPress plugin that embeds OpenStreetMap maps into websites without the need for an API key or account. The vector maps are sourced from OpenFreeMap and are rendered using MapLibre. They are designed in a full-screen editor featuring locations, areas, routes, and 3D buildings. If desired, the map can be set to load only after a click, ensuring that the integration is possible without a cookie banner and is GDPR-compliant.

  • Tina explained how to organise track data using OsmAnd’s Smart Folders feature.

  • A CoMaps contributor wrote a blog post about how the integration of Mangrove reviews with OSM data works.

  • tydo has launched ‘Tourello’, an offline app for hiking, mountain biking, and skiing (Android, iOS, macOS), which generates vector maps using OSM data via Geofabrik, elevation models from Mapterhorn, and BRouter for offline route planning. The OSM wiki lists which tags, such as sac_scale, mtb:scale, trail_visibility, and piste:difficulty the app evaluates. The beta version is free until the end of March 2027; a subscription service is planned thereafter, a move which drew criticism on the OSM Community forum because the app is not open source and free feedback is being sought there. Sarah Hoffmann, who operates Waymarked Trails, pointed out that the site’s terms and conditions only permit open-source, non-commercial use, whereupon tydo removed the API query and now builds the routes directly from OSM relations. According to wiki, the app is proprietary.

Programming

  • Geofabrik has published terms of use for its free Postpass service, which allows users to query OSM data through PostGIS. The service is intended for learners and the OSM community. To use it, a meaningful User-Agent or Referer header is required. Scraping and repeated requests is prohibited. Geofabrik offers a paid tier for commercial users and heavily used applications, or can help them set up their own server.

Releases

  • StreetComplete has just passed Apple’s review and is now officially available on the App Store.

Other “geo” things

  • A research team from National Cheng Kung University in Taiwan and the NASA Goddard Space Flight Centre have found that the manoeuvres carried out by the Artemis 2 rocket in April 2026 altered the ionosphere and disrupted GNSS signals. According to the study published in Geophysical Research Letters, ground-based GNSS systems recorded changes in electron density during three manoeuvres, which can lead to inaccurate position measurements.

  • The German Federal Cartel Office is investigating potential restrictions of completion by Google related to their map services for use in vehicle infotainment systems and is asking car manufacturers and other map service providers for input.

  • David Ding runs ‘Localingual’, an interactive world map where you can listen to recordings of languages and dialects. Clicking on a colour-coded country plays its voices; clicking again shows the regions; and volunteers can contribute their own recordings via their browser. Jornal Nota reported ► that by 2019 the site had around 18,000 recordings.

  • In an editorial, The Guardian argued that Ordnance Survey maps remain a superior way to navigate the landscape.

Upcoming Events

Country Where Venue What When
🇮🇳 Kottayam Kottayam, Kerala State of the Map Kerala (SoTM Kerala) 2026-11-14 - 2026-11-15
🇮🇪 Dublin 4 Inns Court, Winetavern Street, Dublin, D08 XY00 OpenStreetMap Ireland AGM - 2026 2026-11-14
🇹🇷 Hackerspace İstanbul OpenStreetMap İstanbul Mapathon 2026-11-15
🇮🇳 Delhi Avaya Cafe and Bakery, Green Park OSM Delhi Mapping Party No.34 (South Zone) 2026-11-15
🇫🇷 Point Com Rencontre Mapadour 2026-11-16
Politecnico di Milano, Building 4A, Aula Fassò Introduction to OpenStreetMap 2026-11-16
CartONG : Mapathons en ligne 2026-2027 2026-11-16
🇫🇷 Grenoble La Turbine Réunion du groupe local de Grenoble 2026-11-16
State of the Map Nigeria(SotM Nigeria) 2026-11-17 - 2026-11-20
Missing Maps London Mid-Month for Advanced Mappers (no training provided) (Online) [eng] 2026-11-17
🇫🇷 Lyon Tubà Réunion du groupe local de Lyon 2026-11-17
🇩🇪 Chemnitz Kaffeesatz, Chemnitz OSM-Stammtisch Chemnitz 2026-11-17
🇩🇪 Berlin Online FOSSGIS AG OSM und Outdoor 2026-11-17
🇩🇪 Bonn Dotty’s 206. OSM-Stammtisch Bonn 2026-11-17
🇩🇪 Online Lüneburger Mappertreffen (online) 2026-11-17
🇬🇧 Mott MacDonald Offices Mott MacDonald GIS Day Mapathon [18/10/2026] 2026-11-18
🇬🇧 Manchester Pegasus Group Mapathon Charity Day 2026-11-18
UO GIS Day- Knight Library Eugene Bike Infrastructure Mapathon 2026-11-18
🇺🇸 Cal Poly Humboldt Library 121 Cal Poly Humboldt GIS Day Mapathon 2026-11-18
Dublin Office / Online Tetra Tech Ireland GIS Day Mapathon 2026-11-18
🇫🇷 MJC de Vienne Réunion du groupe local de Vienne 2026-11-18
🇩🇪 Karlsruhe Schwarzer Kater Stammtisch Karlsruhe 2026-11-18
Internationale GeoWeek - Online Mapathon ÄRZTE OHNE GRENZEN (AT/CH/DE) 2026-11-18
🇨🇿 Praha Kanceláře Lékařů bez hranic - Qubix Pražský GeoWeek mapathon s Lékaři bez hranic 2026-11-19
GeoWeek Luxembourg Mapathon [FR/EN] - Hybrid 2026-11-19
🇧🇪 Gent Gemeenschappelijke ruimte Wijgaard Meetup in Gent 2026-11-19
Jena EGEA Jena - Mapathon 2026-11-19
OSMF Engineering Working Group meeting 2026-11-20
🇬🇧 Leicester University of Leicester Friends of MSF Leicester Mapathon 2026-11-20
🇫🇷 Metz Espace Arob@se - Metz Atelier OpenStreetMap Metz 2026-11-21
🇫🇮 Espoo Aalto-University, Space 21. OSM Suomi 2026 2026-11-21
DTU Lyngby Building 357 + Aarhus location TBA EWB Student Mapathon Denmark 2026-11-22
🇩🇪 Magrathea Laboratories e.V. 1. OSM Stammtisch Fulda 2026-11-22
🇨🇿 Brno Univerzitní kampus Bohunice, Kamenice 753/5, Brno, Listopadový brněnský Missing Maps Mapathon na Ústavu botaniky a zoologie 2026-11-23
🇬🇧 Llanfairfechan Library Mapwyr Cymru: Mapathon Gogledd Cymru #2 🏴󠁧󠁢󠁷󠁬󠁳󠁿 2026-11-23
CartONG : Mapathons en ligne 2026-2027 2026-11-23
🇩🇪 Stadtgebiet Bremen Online und im Hackerspace Bremen Bremer Mappertreffen 2026-11-23
Room VIII, Viale del Risorgimento 4, Bologna Unibo Mapathon 2026-11 2026-11-24
Pravidelný Missing Maps CZ-SK online Mapathon 2026-11-24
🇺🇸 San Jose Online South Bay Map Night 2026-11-24
🇬🇧 Derby The Brunswick, Railway Terrace, Derby East Midlands pub meet-up 2026-11-24
🇩🇪 Berlin Online OSM-Verkehrswende #80 2026-11-24
🇫🇷 La Fabrique des possibles Réunion du groupe local de Nancy 2026-11-25
🇩🇪 Düsseldorf Online bei https://meet.jit.si/OSM-DUS-2026 Düsseldorfer OpenStreetMap-Treffen (online) 2026-11-25
🇩🇪 Würzburg FabLab Würzburg Würzburger OSM-Treffen 2026-11-25
🇩🇪 Mannheim RaumZeitLabor, Mannheim Rhein-Neckar OSM Treffen 2026-11-25
🇩🇪 Freiburg im Breisgau CCCFR OSM-Treffen Freiburg/Brsg. 2026-11-25
Prírodovedecká fakulta UK Bratislava Missing Maps mapathon Bratislava #15 2026-11-26
CartONG : Mapathons en ligne 2026-2027 2026-11-30

This weeklyOSM was produced by Bastian Greshake Tzovaras, MatthiasMatthias, PierZen, Strubbl, Andrew Davidson, barefootstache, derFred, vicksun.
We welcome link suggestions for the next issue via this form and look forward to your contributions.

Saturday, 14. November 2026

OpenStreetMap User's Diaries

Mi experiencia en el Mapatón Nacional de México 2025: cartografiar edificios para fortalecer la información territorial

Mi experiencia en el Mapatón Nacional de México 2025: cartografiar edificios para fortalecer la información territorial

¿Cómo podemos analizar los riesgos de una comunidad si ni siquiera contamos con información suficiente sobre las edificaciones que existen en su territorio?

Esta pregunta resume una de las razones por las que considero tan importante la cartografía abierta para

Mi experiencia en el Mapatón Nacional de México 2025: cartografiar edificios para fortalecer la información territorial

¿Cómo podemos analizar los riesgos de una comunidad si ni siquiera contamos con información suficiente sobre las edificaciones que existen en su territorio?

Esta pregunta resume una de las razones por las que considero tan importante la cartografía abierta para la Gestión Integral del Riesgo de Desastres.

Durante agosto y septiembre de 2025 tuve la oportunidad de participar como voluntaria en el Mapatón Nacional de México 2025, una iniciativa de cartografía colaborativa vinculada con el Centro Nacional de Prevención de Desastres (CENAPRED), la Secretaría de Desarrollo Agrario, Territorial y Urbano (SEDATU), la Universidad Autónoma del Estado de México (UAEMéx) y Humanitarian OpenStreetMap Team (HOT).

El objetivo fue contribuir a la actualización y precisión de la cartografía base utilizada para la gestión del riesgo y la planeación territorial.

¿En qué consistió mi participación?

Mi actividad se concentró en la digitalización de edificaciones en localidades del estado de Chiapas, donde existían vacíos de información cartográfica.

A través de OpenStreetMap participamos en la identificación y representación de edificios, contribuyendo a mejorar la disponibilidad de información geoespacial abierta.

Aunque pudiera parecer una tarea sencilla, representar correctamente las edificaciones tiene implicaciones importantes para el conocimiento del territorio.

¿Qué relación tiene esto con la Gestión Integral del Riesgo?

Para analizar un riesgo necesitamos conocer, entre otros aspectos, las amenazas presentes, los elementos expuestos y sus condiciones de vulnerabilidad.

La cartografía de edificaciones constituye uno de los insumos que pueden utilizarse para identificar espacialmente elementos potencialmente expuestos a fenómenos como inundaciones, sismos o movimientos de ladera.

Por supuesto, la presencia de un edificio en el mapa no permite determinar por sí sola su vulnerabilidad, ocupación o nivel de riesgo. Para ello se requieren otras fuentes de información, trabajo de campo y metodologías de análisis.

Sin embargo, disponer de una cartografía base más completa representa un avance importante para desarrollar evaluaciones territoriales mejor fundamentadas.

Lo que me dejó esta experiencia

Como consultora especializada en Protección Civil y Gestión Integral del Riesgo de Desastres, esta participación reforzó mi interés por integrar la cartografía abierta, los sistemas de información geográfica y el análisis de datos en los procesos de prevención.

También me permitió valorar el trabajo de las comunidades de mapeadores que, mediante contribuciones voluntarias, ayudan a mejorar información territorial que puede ser utilizada por investigadores, autoridades, organizaciones y ciudadanía.

El 6 de octubre de 2025 recibí el Certificado de Participación Activa en Proyecto de Impacto Social, por mi colaboración en el Mapatón Nacional de México 2025.

Una línea de trabajo que quiero continuar

Soy colaboradora de OpenStreetMap desde diciembre de 2011 y actualmente busco dar mayor continuidad a mis aportaciones, especialmente en temas relacionados con edificaciones, infraestructura esencial, accesibilidad y cartografía útil para la prevención.

Desde mi actividad profesional en Prevención Total, me interesa seguir explorando cómo los datos geoespaciales abiertos pueden complementar los estudios de riesgos, la planeación preventiva y la resiliencia territorial.

Porque antes de analizar los riesgos de un territorio, necesitamos conocerlo.

Y aquello que no está representado en nuestros datos puede quedar fuera de nuestros análisis.

Lizette Adriana Llamas Escamilla

Consultora en Gestión Integral del Riesgo de Desastres y Protección Civil.

Prevención Total Protección Civil 4.0

Sentinel-2 в ложных цветах в JOSM бесплатно через Copernicus

Если вы картируете сельскую местность, вам знакома проблема: снимки Bing или Esri старые, в облаках или просто не показывают, асфальтирована дорога или грунтовая. Sentinel-2 во многом решает эту проблему. Это бесплатные спутниковые снимки, которые обновляются каждые несколько дней, с разрешением 10 м и инфракрасными каналами, невидимыми глазу.

В композиции ложных цветов (каналы B8, B4 и

Если вы картируете сельскую местность, вам знакома проблема: снимки Bing или Esri старые, в облаках или просто не показывают, асфальтирована дорога или грунтовая. Sentinel-2 во многом решает эту проблему. Это бесплатные спутниковые снимки, которые обновляются каждые несколько дней, с разрешением 10 м и инфракрасными каналами, невидимыми глазу.

В композиции ложных цветов (каналы B8, B4 и B3) растительность становится красной, а асфальт выглядит тёмным и контрастным. Асфальтированные дороги, пересекающие кустарник или поля, видны очень отчётливо.

Sentinel-2 в ложных цветах в JOSM: асфальтированная дорога видна как тёмная чёткая линия, растительность красная

Sentinel-2 в ложных цветах в JOSM, сельская местность штата Сеара, Бразилия. Содержит изменённые данные Copernicus Sentinel (2026). Изображение: Wikimedia Commons, CC BY-SA 4.0.

В этом руководстве я покажу, как добавить этот слой в JOSM с помощью бесплатного сервиса Copernicus Data Space Ecosystem Европейского союза.

Важное ограничение: 10 м на пиксель подходит для шоссе, широких грунтовых дорог, воды, растительности, землепользования и гарей. Для зданий и узких городских улиц это не подходит.


1. Создайте аккаунт Copernicus Data Space

  1. Откройте https://dataspace.copernicus.eu и нажмите Login → Register.
  2. Заполните форму и подтвердите e-mail.

Аккаунт бесплатный и включает ежемесячную квоту обработки, которой хватает для обычной работы в JOSM.


2. Создайте конфигурацию и получите свой ID

JOSM не обращается к Copernicus Browser напрямую. Он использует WMS-сервис, который настраивается один раз.

  1. Откройте https://shapps.dataspace.copernicus.eu/dashboard/ под тем же аккаунтом.
  2. В боковом меню откройте Configuration Utility.
  3. Нажмите New configuration.
  4. Задайте имя (например, JOSM) и в поле Create configuration based on выберите Simple Sentinel-2 L2A template.
  5. Нажмите Create configuration.

Не используйте другие шаблоны Sentinel-2. CC Europe покрывает только Европу, а 120 m Mosaic слишком грубый. «L2A» означает снимки с атмосферной коррекцией.

Конфигурация уже содержит несколько готовых слоёв. На левой панели, в разделе Service endpoints, указан ID конфигурации — код вида xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Скопируйте этот ID: он понадобится в URL для JOSM.

Внимание к названиям: слой «False color» из Copernicus Browser в шаблоне называется Color Infrared (vegetation), его ID — COLOR_INFRARED. Слой False color (urban) — это другая композиция (B12, B11, B4). Всегда проверяйте точный ID в столбце Id вашей конфигурации.


3. Добавьте слой в JOSM

  1. В JOSM откройте Правка → Настройки (F12) → вкладка Подложки (Imagery).
  2. Внизу нажмите + WMS.
  3. Вставьте URL ниже, заменив ВАШ_ID на ID, скопированный на предыдущем шаге:

    https://sh.dataspace.copernicus.eu/ogc/wms/ВАШ_ID?SERVICE=WMS&REQUEST=GetMap&VERSION=1.3.0&LAYERS=COLOR_INFRARED&FORMAT=image/png&TRANSPARENT=TRUE&STYLES=&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&TIME=2026-08-01/2026-11-14&MAXCC=30&PRIORITY=leastCC
    
  4. Если JOSM предложит загрузить список слоёв, включите опцию ручного задания сгенерированного WMS URL (Set generated WMS URL manually) и вставьте тот же URL в поле WMS URL.
  5. Задайте имя, например Sentinel-2 Ложные цвета, и подтвердите.
  6. Включите слой через меню Подложка (Imagery).

Быстрый способ: все слои сразу

Если не хочется собирать URL по одному, я написал скрипт, который добавляет все слои вашей конфигурации в меню Imagery JOSM: josm-sentinel2 на GitHub. Перед запуском закройте JOSM.

  • Windows: скачайте josm-sentinel2.bat (Download ZIP или Raw), запустите двойным щелчком и вставьте свой ID. Windows может показать предупреждение SmartScreen, так как файл скачан из интернета.
  • macOS и Linux: скачайте josm-sentinel2.sh и запустите в терминале: bash josm-sentinel2.sh ВАШ_ID

Скрипт спрашивает у Copernicus, какие слои есть в вашей конфигурации, и добавляет только их, с теми же названиями. Бонусные слои (NDWI, NDBI, NIR) появятся, только если вы их создали. Он использует снимки за последние 3 месяца (облачность до 30 %, сначала наименее облачная сцена) и делает резервную копию preferences.xml перед изменением. Повторный запуск обновляет даты без дублирования слоёв. Это обычные текстовые файлы: при желании откройте их в редакторе и проверьте перед запуском.

Что означает каждый параметр

Параметр Назначение
LAYERS=COLOR_INFRARED Какую композицию показывать. Замените на ID другого слоя, чтобы получить другую визуализацию
TIME=2026-08-01/2026-11-14 Диапазон дат используемых снимков. Настройте под нужный период
MAXCC=30 Отбрасывает сцены с облачностью более 30 %
PRIORITY=leastCC Собирает мозаику, отдавая приоритет наименее облачным сценам

Если JOSM игнорирует TIME, MAXCC или PRIORITY: так бывает, когда слой выбран из списка (загрузка слоёв): JOSM строит собственный URL и отбрасывает дополнительные параметры. Надёжнее задать их в самом слое в Configuration Utility: Time range (выберите Relative, например последние 3 месяца, чтобы снимки оставались актуальными), Cloud coverage и Mosaic order (Least cloud coverage).

Совет: создайте две записи с разными датами — одну для сухого сезона и одну для сезона дождей. В засушливых регионах это полностью меняет картину, особенно для водохранилищ и пересыхающих рек.

Частые проблемы

Симптом Вероятная причина Решение
Ошибки тайлов только при сильном отдалении Сервис отклоняет слишком большие области Приблизьте карту. Это нормально
Layer XXX not found ID слоя не совпадает с конфигурацией Проверьте столбец Id в Configuration Utility. Регистр, _ и - имеют значение
B8 is not defined или Failed to evaluate script Скрипт слоя в старом формате Замените скрипт (см. примеры в бонусном разделе)
Смещённое изображение или ошибка координат JOSM в проекции WGS84 (EPSG:4326) Используйте проекцию по умолчанию Mercator (EPSG:3857)
Пустое изображение Нет сцен с облачностью ниже MAXCC % за период Расширьте TIME или увеличьте MAXCC

Чтобы увидеть точную ошибку, щёлкните правой кнопкой по проблемному тайлу → Показать информацию о тайле (Show tile info).

Лицензия

Данные Sentinel открыты (лицензия Copernicus) и могут использоваться для картирования в OSM. Укажите в пакете правок что-то вроде source=Copernicus Sentinel-2.


Бонус: дополнительные слои

Помимо слоёв из шаблона, я создал несколько, которые очень помогают. Чтобы добавить слой, откройте Configuration Utility → New Layer, введите имя (оно станет ID), выберите Source: Sentinel-2 L2A, нажмите на карандаш у Data processing, вставьте скрипт и сохраните.

NDWI: вода

Выделяет водоёмы синим. Отлично подходит для водохранилищ, прудов и рек.

//VERSION=3
// NDWI (McFeeters): (B03 - B08) / (B03 + B08)
function setup() {
  return {
    input: ["B03", "B08", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let ndwi = (s.B03 - s.B08) / (s.B03 + s.B08);
  let c = colorBlend(ndwi,
    [-0.8, -0.3, 0.0, 0.2, 0.5],
    [[0.0, 0.5, 0.0], [0.6, 0.8, 0.4], [0.95, 0.95, 0.85], [0.3, 0.6, 1.0], [0.0, 0.0, 0.6]]);
  return [...c, s.dataMask];
}

NDBI: застроенные территории

Выделяет застройку и открытый грунт жёлтым/красным. В засушливых регионах сухая почва тоже даёт высокие значения, поэтому используйте его вместе с ложными цветами.

//VERSION=3
// NDBI: (B11 - B08) / (B11 + B08)
function setup() {
  return {
    input: ["B08", "B11", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let ndbi = (s.B11 - s.B08) / (s.B11 + s.B08);
  let c = colorBlend(ndbi,
    [-0.5, -0.1, 0.0, 0.1, 0.3],
    [[0.0, 0.3, 0.8], [0.2, 0.7, 0.3], [0.9, 0.9, 0.6], [0.95, 0.6, 0.2], [0.8, 0.1, 0.1]]);
  return [...c, s.dataMask];
}

NIR в оттенках серого: дороги и берега

Только канал B08 (ближний инфракрасный, 10 м). Растительность светлая, а вода и асфальт тёмные. Просто и чётко для отрисовки дорог и берегов рек и водохранилищ. Предложение сообщества, спасибо!

//VERSION=3
// NIR grayscale (B08)
function setup() {
  return {
    input: ["B08", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let v = 2.5 * s.B08;
  return [v, v, v, s.dataMask];
}

False color (urban): исправленный скрипт

Если слой False color (urban) выдаёт ошибку B8 is not defined, замените его скрипт на этот:

//VERSION=3
// False color (urban): B12, B11, B04
function setup() {
  return {
    input: ["B12", "B11", "B04", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(sample) {
  return [2.5 * sample.B12, 2.5 * sample.B11, 2.5 * sample.B04, sample.dataMask];
}

Какой слой использовать для какого картирования

Чтобы переключить слой в JOSM, достаточно изменить LAYERS= в URL. Имеет смысл создать отдельную запись для каждого часто используемого слоя.

Слой (название в шаблоне) LAYERS= Каналы Лучше всего для
Color Infrared (vegetation), «ложные цвета» COLOR_INFRARED B8, B4, B3 Асфальтированные дороги (тёмные на фоне красной растительности), границы растительности, посевы, прибрежные леса
Natural color (true color) TRUE_COLOR B4, B3, B2 Общий обзор, проверка объектов, открытый грунт, городские территории
False color (urban) COLOR_INFRARED__URBAN_ B12, B11, B4 Городская и застроенная территория. Помогает отличить асфальт от грунтовки
Vegetation Index - NDVI VEGETATION_INDEX (B8−B4)/(B8+B4) landuse=farmland, natural=wood/scrub, вырубки, круговое орошение
NDWI (бонус) NDWI (B3−B8)/(B3+B8) natural=water: водохранилища, пруды, широкие реки, поймы
NDBI (бонус) NDBI (B11−B8)/(B11+B8) landuse=residential/industrial, рост городов, новые посёлки
NIR в оттенках серого (бонус) NIR B8 Отрисовка дорог, берегов и границ растительности с максимальным контрастом
Moisture Index MOISTURE_INDEX (B8A−B11)/(B8A+B11) Водно-болотные угодья (natural=wetland), поймы, орошаемая и сухая растительность
SWIR SWIR B12, B8A, B4 Гари, открытый грунт, карьеры, вода (очень тёмная)
Agriculture AGRICULTURE B11, B8, B2 Границы полей, различие посевов и пастбищ
Geology GEOLOGY B12, B4, B2 Скальные выходы, карьеры, natural=bare_rock
Atmospheric penetration ATMOSPHERIC_PENETRATION B12, B11, B8A Дни с дымкой или дымом, когда естественные цвета плохие
Bathymetric BATHYMETRIC B4, B3, B1 Побережье, рифы, отмели на мелководье. Использует B1 (60 м), поэтому изображение более размытое: не используйте для точной отрисовки

Моя любимая комбинация: ложные цвета для дорог и растительности, NDWI для воды и естественные цвета для проверки. Для водохранилищ в засушливых регионах сравните снимок сезона дождей со снимком сухого сезона и картируйте обычный уровень воды (intermittent=yes, если водоём пересыхает каждый год).

Удачного картирования!

Эта запись также доступна на португальском, английском, французском и испанском.


Sentinel-2 en falso color en JOSM, gratis, con Copernicus

Si mapeas zonas rurales, conoces el problema: las imágenes de Bing o Esri son antiguas, tienen nubes o simplemente no muestran si un camino está asfaltado o es de tierra. Sentinel-2 resuelve buena parte de esto. Son imágenes satelitales gratuitas, actualizadas cada pocos días, con 10 m de resolución y bandas infrarrojas que el ojo no ve.

En la composición de falso color (bandas B8, B4 y

Si mapeas zonas rurales, conoces el problema: las imágenes de Bing o Esri son antiguas, tienen nubes o simplemente no muestran si un camino está asfaltado o es de tierra. Sentinel-2 resuelve buena parte de esto. Son imágenes satelitales gratuitas, actualizadas cada pocos días, con 10 m de resolución y bandas infrarrojas que el ojo no ve.

En la composición de falso color (bandas B8, B4 y B3), la vegetación se ve roja y el asfalto aparece oscuro y muy contrastado. Las carreteras pavimentadas que atraviesan el monte o los cultivos se destacan muchísimo.

Sentinel-2 en falso color en JOSM: la carretera asfaltada aparece como una línea oscura y nítida y la vegetación en rojo

Sentinel-2 en falso color en JOSM, zona rural de Ceará, Brasil. Contiene datos Copernicus Sentinel modificados (2026). Imagen: Wikimedia Commons, CC BY-SA 4.0.

En este tutorial muestro cómo añadir esta capa a JOSM usando el servicio gratuito Copernicus Data Space Ecosystem de la Unión Europea.

Limitación importante: 10 m por píxel sirve para carreteras, caminos rurales anchos, agua, vegetación, uso del suelo y áreas quemadas. No sirve para edificios ni para calles estrechas dentro de la ciudad.


1. Crea una cuenta en Copernicus Data Space

  1. Entra en https://dataspace.copernicus.eu y haz clic en Login → Register.
  2. Completa el registro y confirma tu correo.

La cuenta es gratuita e incluye una cuota mensual de procesamiento, suficiente para mapear normalmente en JOSM.


2. Crea la configuración y obtén tu ID

JOSM no accede directamente al Copernicus Browser. Usa un servicio WMS que configuras una sola vez.

  1. Entra en https://shapps.dataspace.copernicus.eu/dashboard/ con la misma cuenta.
  2. En el menú lateral, abre Configuration Utility.
  3. Haz clic en New configuration.
  4. Ponle un nombre (p. ej. JOSM) y, en Create configuration based on, elige Simple Sentinel-2 L2A template.
  5. Haz clic en Create configuration.

No uses las otras plantillas de Sentinel-2. CC Europe solo cubre Europa y el 120 m Mosaic tiene una resolución demasiado baja. “L2A” significa imagen con corrección atmosférica.

La configuración ya trae varias capas listas. En el panel izquierdo, en Service endpoints, aparece el ID de la configuración, un código con el formato xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Copia ese ID, porque va en la URL de JOSM.

Ojo con los nombres: la capa “False color” del Copernicus Browser se llama Color Infrared (vegetation) en la plantilla, con ID COLOR_INFRARED. La capa False color (urban) es otra composición (B12, B11, B4). Revisa siempre el ID exacto en la columna Id de tu configuración.


3. Añade la capa a JOSM

  1. En JOSM, abre Editar → Preferencias (F12) → pestaña Imágenes.
  2. Abajo, haz clic en + WMS.
  3. Pega la URL de abajo, cambiando TU_ID por el ID que copiaste en el paso anterior:

    https://sh.dataspace.copernicus.eu/ogc/wms/TU_ID?SERVICE=WMS&REQUEST=GetMap&VERSION=1.3.0&LAYERS=COLOR_INFRARED&FORMAT=image/png&TRANSPARENT=TRUE&STYLES=&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&TIME=2026-08-01/2026-11-14&MAXCC=30&PRIORITY=leastCC
    
  4. Si JOSM pide obtener las capas, marca la opción para establecer manualmente la URL WMS generada (Set generated WMS URL manually) y pega la misma URL en el campo de la URL WMS.
  5. Ponle un nombre, por ejemplo Sentinel-2 Falso Color, y confirma.
  6. Activa la capa desde el menú Imágenes.

Atajo: todas las capas de una vez

Si prefieres no armar las URL una por una, hice un script que añade todas las capas de tu configuración al menú Imágenes de JOSM: josm-sentinel2 en GitHub. Cierra JOSM antes de ejecutarlo.

  • Windows: descarga josm-sentinel2.bat (Download ZIP o Raw), haz doble clic y pega tu ID. Windows puede mostrar un aviso de SmartScreen por ser un archivo descargado.
  • macOS y Linux: descarga josm-sentinel2.sh y ejecútalo en una terminal: bash josm-sentinel2.sh TU_ID

El script le pregunta a Copernicus qué capas existen en tu configuración y añade solo esas, con los nombres que tienen allí. Las capas extra (NDWI, NDBI, NIR) solo aparecen si las creaste. Usa imágenes de los últimos 3 meses (hasta 30 % de nubes, primero la escena menos nublada) y hace una copia de preferences.xml antes de modificarlo. Si lo vuelves a ejecutar, actualiza las fechas sin duplicar las capas. Son archivos de texto: puedes abrirlos en un editor para revisarlos antes.

Qué hace cada parámetro

Parámetro Qué hace
LAYERS=COLOR_INFRARED Qué composición mostrar. Cámbialo por el ID de otra capa para tener otra visualización
TIME=2026-08-01/2026-11-14 Rango de fechas de las imágenes usadas. Ajústalo al período que quieras
MAXCC=30 Descarta escenas con más del 30 % de nubes
PRIORITY=leastCC Arma el mosaico priorizando las escenas con menos nubes

Si JOSM ignora TIME, MAXCC o PRIORITY: pasa cuando eliges la capa de la lista (Obtener capas), porque JOSM genera su propia URL y elimina los parámetros extra. La opción más robusta es configurarlos en la propia capa, en el Configuration Utility: Time range (usa Relative, p. ej. últimos 3 meses, para que la imagen se mantenga actualizada), Cloud coverage y Mosaic order (Least cloud coverage).

Consejo: crea dos entradas con fechas distintas, una en la estación seca y otra en la de lluvias. En zonas semiáridas esto cambia por completo lo que se ve, sobre todo embalses y ríos intermitentes.

Problemas comunes

Síntoma Causa probable Solución
Teselas con error solo con zoom alejado El servicio rechaza áreas muy grandes Acércate. Es normal
Layer XXX not found El ID de la capa no coincide con la configuración Revisa la columna Id del Configuration Utility. Mayúsculas, _ y - importan
B8 is not defined o Failed to evaluate script El script de la capa está en el formato antiguo Sustituye el script (ver los ejemplos en la sección extra)
Imagen desplazada o error de coordenadas JOSM en proyección WGS84 (EPSG:4326) Usa la proyección por defecto Mercator (EPSG:3857)
Imagen vacía No hay escenas con menos de MAXCC % de nubes en el período Amplía el rango de TIME o sube MAXCC

Para ver el error exacto, haz clic derecho sobre una tesela con error → Mostrar información de la tesela (Show tile info).

Licencia

Los datos Sentinel son abiertos (licencia Copernicus) y se pueden usar para mapear en OSM. Añade al conjunto de cambios algo como source=Copernicus Sentinel-2.


Extra: capas adicionales

Además de las capas de la plantilla, creé algunas que ayudan mucho. Para añadirlas, ve al Configuration Utility → New Layer, escribe un nombre (se convierte en el ID), elige Source: Sentinel-2 L2A, haz clic en el lápiz de Data processing, pega el script y guarda.

NDWI: agua

Resalta los cuerpos de agua en azul. Ideal para embalses, lagunas y ríos.

//VERSION=3
// NDWI (McFeeters): (B03 - B08) / (B03 + B08)
function setup() {
  return {
    input: ["B03", "B08", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let ndwi = (s.B03 - s.B08) / (s.B03 + s.B08);
  let c = colorBlend(ndwi,
    [-0.8, -0.3, 0.0, 0.2, 0.5],
    [[0.0, 0.5, 0.0], [0.6, 0.8, 0.4], [0.95, 0.95, 0.85], [0.3, 0.6, 1.0], [0.0, 0.0, 0.6]]);
  return [...c, s.dataMask];
}

NDBI: áreas construidas

Resalta superficies construidas y suelo desnudo en amarillo/rojo. En zonas semiáridas el suelo seco también sale alto, así que úsalo junto con el falso color.

//VERSION=3
// NDBI: (B11 - B08) / (B11 + B08)
function setup() {
  return {
    input: ["B08", "B11", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let ndbi = (s.B11 - s.B08) / (s.B11 + s.B08);
  let c = colorBlend(ndbi,
    [-0.5, -0.1, 0.0, 0.1, 0.3],
    [[0.0, 0.3, 0.8], [0.2, 0.7, 0.3], [0.9, 0.9, 0.6], [0.95, 0.6, 0.2], [0.8, 0.1, 0.1]]);
  return [...c, s.dataMask];
}

NIR en escala de grises: carreteras y orillas

Solo la banda B08 (infrarrojo cercano, 10 m). La vegetación se ve clara y el agua y el asfalto oscuros. Simple y nítido para trazar carreteras y orillas de ríos y embalses. Sugerencia de la comunidad, ¡gracias!

//VERSION=3
// NIR grayscale (B08)
function setup() {
  return {
    input: ["B08", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let v = 2.5 * s.B08;
  return [v, v, v, s.dataMask];
}

False color (urban): script corregido

Si la capa False color (urban) da el error B8 is not defined, sustituye su script por este:

//VERSION=3
// False color (urban): B12, B11, B04
function setup() {
  return {
    input: ["B12", "B11", "B04", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(sample) {
  return [2.5 * sample.B12, 2.5 * sample.B11, 2.5 * sample.B04, sample.dataMask];
}

Qué capa usar para cada tipo de mapeo

Para cambiar de capa en JOSM, solo cambia LAYERS= en la URL. Vale la pena crear una entrada por cada capa que uses a menudo.

Capa (nombre en la plantilla) LAYERS= Bandas Mejor para
Color Infrared (vegetation), el “falso color” COLOR_INFRARED B8, B4, B3 Carreteras asfaltadas (oscuras sobre la vegetación roja), límites de vegetación, cultivos, bosques de ribera
Natural color (true color) TRUE_COLOR B4, B3, B2 Vista general, confirmar qué es cada elemento, suelo desnudo, zonas urbanas
False color (urban) COLOR_INFRARED__URBAN_ B12, B11, B4 Zonas urbanas y construidas. Ayuda a distinguir asfalto de caminos de tierra
Vegetation Index - NDVI VEGETATION_INDEX (B8−B4)/(B8+B4) landuse=farmland, natural=wood/scrub, deforestación, pivotes de riego
NDWI (extra) NDWI (B3−B8)/(B3+B8) natural=water: embalses, lagunas, ríos anchos, zonas inundables
NDBI (extra) NDBI (B11−B8)/(B11+B8) landuse=residential/industrial, expansión urbana, nuevas urbanizaciones
NIR en escala de grises (extra) NIR B8 Trazar carreteras, orillas y límites de vegetación con el máximo contraste
Moisture Index MOISTURE_INDEX (B8A−B11)/(B8A+B11) Humedales (natural=wetland), llanuras inundables, vegetación regada o seca
SWIR SWIR B12, B8A, B4 Áreas quemadas, suelo desnudo, minería, agua (muy oscura)
Agriculture AGRICULTURE B11, B8, B2 Parcelas agrícolas, distinguir cultivos y pastizales
Geology GEOLOGY B12, B4, B2 Afloramientos rocosos, canteras, natural=bare_rock
Atmospheric penetration ATMOSPHERIC_PENETRATION B12, B11, B8A Días con bruma o humo, cuando el color natural se ve mal
Bathymetric BATHYMETRIC B4, B3, B1 Costa, arrecifes, bancos de arena en aguas poco profundas. Usa B1 (60 m), así que es más borrosa: evítala para trazados precisos

Mi combinación favorita: falso color para carreteras y vegetación, NDWI para el agua y color natural para confirmar. Para embalses en zonas semiáridas, compara una imagen de la estación de lluvias con una de la seca y mapea el nivel normal del agua (intermittent=yes si se seca todos los años).

¡Feliz mapeo!

Esta entrada también está disponible en portugués, inglés y francés.


Sentinel-2 en fausses couleurs dans JOSM, gratuitement, via Copernicus

Si vous cartographiez des zones rurales, vous connaissez le problème : l’imagerie Bing ou Esri est ancienne, nuageuse, ou ne permet tout simplement pas de savoir si une route est goudronnée ou en terre. Sentinel-2 règle une bonne partie de ce problème. C’est une imagerie satellite gratuite, mise à jour tous les quelques jours, avec une résolution de 10 m et des bandes infrarouges invisibles à l’

Si vous cartographiez des zones rurales, vous connaissez le problème : l’imagerie Bing ou Esri est ancienne, nuageuse, ou ne permet tout simplement pas de savoir si une route est goudronnée ou en terre. Sentinel-2 règle une bonne partie de ce problème. C’est une imagerie satellite gratuite, mise à jour tous les quelques jours, avec une résolution de 10 m et des bandes infrarouges invisibles à l’œil nu.

Dans la composition fausses couleurs (bandes B8, B4 et B3), la végétation devient rouge et l’asphalte apparaît sombre et bien contrasté. Les routes goudronnées qui traversent la brousse ou les cultures ressortent très nettement.

Sentinel-2 en fausses couleurs dans JOSM : la route goudronnée apparaît comme une ligne sombre et nette, la végétation en rouge

Sentinel-2 en fausses couleurs dans JOSM, zone rurale du Ceará, Brésil. Contient des données Copernicus Sentinel modifiées (2026). Image : Wikimedia Commons, CC BY-SA 4.0.

Ce tutoriel montre comment ajouter cette couche à JOSM avec le service gratuit Copernicus Data Space Ecosystem de l’Union européenne.

Limite importante : 10 m par pixel suffit pour les routes principales, les grandes pistes, l’eau, la végétation, l’occupation du sol et les zones brûlées. Cela ne suffit pas pour les bâtiments ni pour les rues étroites en ville.


1. Créez un compte Copernicus Data Space

  1. Allez sur https://dataspace.copernicus.eu et cliquez sur Login → Register.
  2. Remplissez le formulaire et confirmez votre e-mail.

Le compte est gratuit et inclut un quota mensuel de traitement, suffisant pour cartographier normalement dans JOSM.


2. Créez une configuration et récupérez votre ID

JOSM n’accède pas directement au Copernicus Browser. Il utilise un service WMS que vous configurez une seule fois.

  1. Allez sur https://shapps.dataspace.copernicus.eu/dashboard/ avec le même compte.
  2. Dans le menu latéral, ouvrez Configuration Utility.
  3. Cliquez sur New configuration.
  4. Donnez-lui un nom (ex. : JOSM) et, dans Create configuration based on, choisissez Simple Sentinel-2 L2A template.
  5. Cliquez sur Create configuration.

N’utilisez pas les autres modèles Sentinel-2. CC Europe ne couvre que l’Europe et la 120 m Mosaic est trop grossière. « L2A » signifie une image avec correction atmosphérique.

La configuration contient déjà plusieurs couches prêtes à l’emploi. Dans le panneau de gauche, sous Service endpoints, se trouve l’ID de la configuration, un code du type xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Copiez cet ID, il va dans l’URL de JOSM.

Attention aux noms : la couche « False color » du Copernicus Browser s’appelle Color Infrared (vegetation) dans le modèle, avec l’ID COLOR_INFRARED. La couche False color (urban) est une autre composition (B12, B11, B4). Vérifiez toujours l’ID exact dans la colonne Id de votre configuration.


3. Ajoutez la couche à JOSM

  1. Dans JOSM, ouvrez Édition → Préférences (F12) → onglet Imagerie.
  2. En bas, cliquez sur + WMS.
  3. Collez l’URL ci-dessous en remplaçant VOTRE_ID par l’ID copié à l’étape précédente :

    https://sh.dataspace.copernicus.eu/ogc/wms/VOTRE_ID?SERVICE=WMS&REQUEST=GetMap&VERSION=1.3.0&LAYERS=COLOR_INFRARED&FORMAT=image/png&TRANSPARENT=TRUE&STYLES=&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&TIME=2026-08-01/2026-11-14&MAXCC=30&PRIORITY=leastCC
    
  4. Si JOSM propose de récupérer les couches, cochez l’option pour définir manuellement l’URL WMS générée (Set generated WMS URL manually) et collez la même URL dans le champ de l’URL WMS.
  5. Donnez-lui un nom, par exemple Sentinel-2 Fausses couleurs, et validez.
  6. Activez la couche depuis le menu Imagerie.

Raccourci : toutes les couches d’un coup

Si vous ne voulez pas construire les URL une par une, j’ai écrit un script qui ajoute toutes les couches de votre configuration au menu Imagerie de JOSM : josm-sentinel2 sur GitHub. Fermez JOSM avant de le lancer.

  • Windows : téléchargez josm-sentinel2.bat (Download ZIP ou Raw), double-cliquez dessus et collez votre ID. Windows peut afficher un avertissement SmartScreen, car il a été téléchargé.
  • macOS et Linux : téléchargez josm-sentinel2.sh et lancez-le dans un terminal : bash josm-sentinel2.sh VOTRE_ID

Le script demande à Copernicus quelles couches existent dans votre configuration et n’ajoute que celles-ci, avec leurs noms. Les couches bonus (NDWI, NDBI, NIR) n’apparaissent que si vous les avez créées. Il utilise les images des 3 derniers mois (30 % de nuages maximum, scène la moins nuageuse d’abord) et sauvegarde preferences.xml avant de le modifier. Relancez-le plus tard pour mettre à jour les dates sans dupliquer les couches. Ce sont de simples fichiers texte : vous pouvez les ouvrir dans un éditeur pour les vérifier avant.

Ce que fait chaque paramètre

Paramètre Rôle
LAYERS=COLOR_INFRARED La composition à afficher. Remplacez-la par l’ID d’une autre couche pour changer de visualisation
TIME=2026-08-01/2026-11-14 Période des images utilisées. Ajustez selon vos besoins
MAXCC=30 Écarte les scènes avec plus de 30 % de nuages
PRIORITY=leastCC Construit la mosaïque en privilégiant les scènes les moins nuageuses

Si JOSM ignore TIME, MAXCC ou PRIORITY : cela arrive quand la couche est choisie dans la liste (récupération des couches), car JOSM construit sa propre URL et supprime les paramètres supplémentaires. L’option la plus robuste est de les régler sur la couche elle-même dans le Configuration Utility : Time range (choisissez Relative, par ex. les 3 derniers mois, pour garder une image à jour), Cloud coverage et Mosaic order (Least cloud coverage).

Astuce : créez deux entrées avec des dates différentes, une en saison sèche et une en saison des pluies. En zone semi-aride, cela change complètement ce que l’on voit, surtout pour les retenues d’eau et les cours d’eau intermittents.

Problèmes courants

Symptôme Cause probable Solution
Tuiles en erreur seulement en zoom éloigné Le service refuse les zones trop grandes Zoomez. C’est normal
Layer XXX not found L’ID de la couche ne correspond pas à la configuration Vérifiez la colonne Id du Configuration Utility. Majuscules, _ et - comptent
B8 is not defined ou Failed to evaluate script Le script de la couche est dans l’ancien format Remplacez le script (voir les exemples dans la section bonus)
Image décalée ou erreur de coordonnées JOSM en projection WGS84 (EPSG:4326) Utilisez la projection par défaut Mercator (EPSG:3857)
Image vide Aucune scène sous MAXCC % de nuages sur la période Élargissez TIME ou augmentez MAXCC

Pour voir l’erreur exacte, faites un clic droit sur une tuile en erreur → Afficher les informations de la tuile (Show tile info).

Licence

Les données Sentinel sont ouvertes (licence Copernicus) et peuvent être utilisées pour cartographier dans OSM. Ajoutez par exemple source=Copernicus Sentinel-2 à votre groupe de modifications.


Bonus : couches supplémentaires

En plus des couches du modèle, j’en ai créé quelques-unes qui aident beaucoup. Pour en ajouter une, allez dans le Configuration Utility → New Layer, saisissez un nom (il devient l’ID), choisissez Source : Sentinel-2 L2A, cliquez sur le crayon de Data processing, collez le script et enregistrez.

NDWI : l’eau

Met en évidence les plans d’eau en bleu. Idéal pour les retenues, étangs et rivières.

//VERSION=3
// NDWI (McFeeters): (B03 - B08) / (B03 + B08)
function setup() {
  return {
    input: ["B03", "B08", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let ndwi = (s.B03 - s.B08) / (s.B03 + s.B08);
  let c = colorBlend(ndwi,
    [-0.8, -0.3, 0.0, 0.2, 0.5],
    [[0.0, 0.5, 0.0], [0.6, 0.8, 0.4], [0.95, 0.95, 0.85], [0.3, 0.6, 1.0], [0.0, 0.0, 0.6]]);
  return [...c, s.dataMask];
}

NDBI : zones bâties

Met en évidence les surfaces bâties et le sol nu en jaune/rouge. En zone semi-aride, le sol sec ressort aussi, donc utilisez-le avec les fausses couleurs.

//VERSION=3
// NDBI: (B11 - B08) / (B11 + B08)
function setup() {
  return {
    input: ["B08", "B11", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let ndbi = (s.B11 - s.B08) / (s.B11 + s.B08);
  let c = colorBlend(ndbi,
    [-0.5, -0.1, 0.0, 0.1, 0.3],
    [[0.0, 0.3, 0.8], [0.2, 0.7, 0.3], [0.9, 0.9, 0.6], [0.95, 0.6, 0.2], [0.8, 0.1, 0.1]]);
  return [...c, s.dataMask];
}

Proche infrarouge en niveaux de gris : routes et berges

Uniquement la bande B08 (proche infrarouge, 10 m). La végétation est claire, l’eau et l’asphalte sont sombres. Simple et net pour tracer les routes et les berges des rivières et retenues. Suggestion de la communauté, merci !

//VERSION=3
// NIR grayscale (B08)
function setup() {
  return {
    input: ["B08", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let v = 2.5 * s.B08;
  return [v, v, v, s.dataMask];
}

False color (urban) : script corrigé

Si la couche False color (urban) renvoie l’erreur B8 is not defined, remplacez son script par celui-ci :

//VERSION=3
// False color (urban): B12, B11, B04
function setup() {
  return {
    input: ["B12", "B11", "B04", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(sample) {
  return [2.5 * sample.B12, 2.5 * sample.B11, 2.5 * sample.B04, sample.dataMask];
}

Quelle couche pour quel type de cartographie

Pour changer de couche dans JOSM, modifiez simplement LAYERS= dans l’URL. Il vaut la peine de créer une entrée par couche que vous utilisez souvent.

Couche (nom dans le modèle) LAYERS= Bandes Idéale pour
Color Infrared (vegetation), les « fausses couleurs » COLOR_INFRARED B8, B4, B3 Routes goudronnées (sombres sur la végétation rouge), limites de végétation, cultures, ripisylves
Natural color (true color) TRUE_COLOR B4, B3, B2 Vue d’ensemble, identifier chaque élément, sol nu, zones urbaines
False color (urban) COLOR_INFRARED__URBAN_ B12, B11, B4 Zones urbaines et bâties. Aide à distinguer asphalte et pistes en terre
Vegetation Index - NDVI VEGETATION_INDEX (B8−B4)/(B8+B4) landuse=farmland, natural=wood/scrub, déforestation, pivots d’irrigation
NDWI (bonus) NDWI (B3−B8)/(B3+B8) natural=water : retenues, étangs, grandes rivières, zones inondables
NDBI (bonus) NDBI (B11−B8)/(B11+B8) landuse=residential/industrial, étalement urbain, nouveaux lotissements
Proche infrarouge en niveaux de gris (bonus) NIR B8 Tracer routes, berges et limites de végétation avec un contraste maximal
Moisture Index MOISTURE_INDEX (B8A−B11)/(B8A+B11) Zones humides (natural=wetland), plaines inondables, végétation irriguée ou sèche
SWIR SWIR B12, B8A, B4 Zones brûlées, sol nu, mines, eau (très sombre)
Agriculture AGRICULTURE B11, B8, B2 Parcelles agricoles, distinguer cultures et pâturages
Geology GEOLOGY B12, B4, B2 Affleurements rocheux, carrières, natural=bare_rock
Atmospheric penetration ATMOSPHERIC_PENETRATION B12, B11, B8A Jours de brume ou de fumée, quand les couleurs naturelles sont mauvaises
Bathymetric BATHYMETRIC B4, B3, B1 Littoral, récifs, bancs de sable en eau peu profonde. Utilise B1 (60 m), donc plus flou : à éviter pour un tracé précis

Ma combinaison préférée : fausses couleurs pour les routes et la végétation, NDWI pour l’eau et couleurs naturelles pour vérifier. Pour les retenues en zone semi-aride, comparez une image de saison des pluies avec une de saison sèche et cartographiez le niveau d’eau normal (intermittent=yes si elle s’assèche chaque année).

Bonne cartographie !

Cet article existe aussi en portugais et en anglais.


Sentinel-2 false color in JOSM, for free, via Copernicus

If you map rural areas, you know the problem: Bing or Esri imagery is old, cloudy, or simply doesn’t show whether a road is paved or dirt. Sentinel-2 solves a good part of that. It is free satellite imagery, refreshed every few days, with 10 m resolution and infrared bands the human eye can’t see.

In the false color composite (bands B8, B4 and B3), vegetation turns red and asphalt turns

If you map rural areas, you know the problem: Bing or Esri imagery is old, cloudy, or simply doesn’t show whether a road is paved or dirt. Sentinel-2 solves a good part of that. It is free satellite imagery, refreshed every few days, with 10 m resolution and infrared bands the human eye can’t see.

In the false color composite (bands B8, B4 and B3), vegetation turns red and asphalt turns dark and high-contrast. Paved roads crossing scrubland or farmland really stand out.

Sentinel-2 false color in JOSM: the paved road shows up as a dark, sharp line and vegetation is red

Sentinel-2 false color in JOSM, rural Ceará, Brazil. Contains modified Copernicus Sentinel data (2026). Image: Wikimedia Commons, CC BY-SA 4.0.

This tutorial shows how to add this layer to JOSM using the free Copernicus Data Space Ecosystem service from the European Union.

Important limitation: 10 m per pixel works for highways, wide rural roads, water, vegetation, land use and burned areas. It does not work for buildings or narrow urban streets.


1. Create a Copernicus Data Space account

  1. Go to https://dataspace.copernicus.eu and click Login → Register.
  2. Fill in the form and confirm your email.

The account is free and comes with a monthly processing quota, which is enough for normal mapping in JOSM.


2. Create a configuration and get your ID

JOSM doesn’t talk to the Copernicus Browser directly. It uses a WMS service that you set up once.

  1. Go to https://shapps.dataspace.copernicus.eu/dashboard/ with the same account.
  2. In the side menu, open Configuration Utility.
  3. Click New configuration.
  4. Give it a name (e.g. JOSM) and, under Create configuration based on, choose Simple Sentinel-2 L2A template.
  5. Click Create configuration.

Don’t use the other Sentinel-2 templates. CC Europe only covers Europe and the 120 m Mosaic is too coarse. “L2A” means atmospherically corrected imagery.

The configuration comes with several ready-made layers. In the left panel, under Service endpoints, you’ll find the configuration ID, a code like xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Copy this ID, because it goes into the JOSM URL.

Watch the names: the “False color” layer in the Copernicus Browser is called Color Infrared (vegetation) in the template, with ID COLOR_INFRARED. The False color (urban) layer is a different composite (B12, B11, B4). Always check the exact ID in the Id column of your configuration.


3. Add the layer to JOSM

  1. In JOSM, open Edit → Preferences (F12) → Imagery tab.
  2. At the bottom, click + WMS.
  3. Paste the URL below, replacing YOUR_ID with the ID you copied in the previous step:

    https://sh.dataspace.copernicus.eu/ogc/wms/YOUR_ID?SERVICE=WMS&REQUEST=GetMap&VERSION=1.3.0&LAYERS=COLOR_INFRARED&FORMAT=image/png&TRANSPARENT=TRUE&STYLES=&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&TIME=2026-08-01/2026-11-14&MAXCC=30&PRIORITY=leastCC
    
  4. If JOSM asks to fetch the layers, tick “Set generated WMS URL manually” and paste the same URL into the WMS URL field.
  5. Give it a name, for example Sentinel-2 False Color, and confirm.
  6. Turn the layer on from the Imagery menu.

Shortcut: all layers at once

If you’d rather not build the URLs one by one, I wrote a script that adds every layer of your configuration to the JOSM Imagery menu: josm-sentinel2 on GitHub. Close JOSM before running it.

  • Windows: download josm-sentinel2.bat (Download ZIP or Raw), double-click it and paste your ID. Windows may show a SmartScreen warning because it was downloaded.
  • macOS and Linux: download josm-sentinel2.sh and run it in a terminal: bash josm-sentinel2.sh YOUR_ID

The script asks Copernicus which layers exist in your configuration and adds only those, with the names they have there. The bonus layers (NDWI, NDBI, NIR) only show up if you created them. It uses imagery from the last 3 months (up to 30% clouds, least cloudy scene first) and backs up preferences.xml before changing it. Run it again later to refresh the dates without duplicating layers. They’re plain text files, so feel free to open them in an editor and check them first.

What each parameter does

Parameter What it does
LAYERS=COLOR_INFRARED Which composite to show. Replace it with another layer ID for a different view
TIME=2026-08-01/2026-11-14 Date range of the images used. Adjust to the period you want
MAXCC=30 Discards scenes with more than 30% cloud cover
PRIORITY=leastCC Builds the mosaic favouring the least cloudy scenes

If JOSM ignores TIME, MAXCC or PRIORITY: this happens when you pick the layer from the list (Get layers), because JOSM builds its own URL and drops extra parameters. A more robust option is to set them on the layer itself in the Configuration Utility: Time range (use Relative, e.g. last 3 months, so the imagery stays current), Cloud coverage and Mosaic order (Least cloud coverage).

Tip: create two entries with different dates, one in the dry season and one in the wet season. In semi-arid regions this completely changes what you see, especially reservoirs and intermittent rivers.

Common problems

Symptom Likely cause Fix
Tile errors only when zoomed out The service refuses very large areas Zoom in. This is normal
Layer XXX not found The layer ID doesn’t match the configuration Check the Id column in the Configuration Utility. Case, _ and - matter
B8 is not defined or Failed to evaluate script The layer script uses the old format Replace the script (see the examples in the bonus section)
Shifted image or coordinate errors JOSM is in WGS84 projection (EPSG:4326) Use the default Mercator (EPSG:3857) projection
Empty image No scene below MAXCC% cloud cover in the period Widen the TIME range or raise MAXCC

To see the exact error, right-click a failed tile → Show tile info.

License

Sentinel data is open (Copernicus license) and can be used for mapping in OSM. Add something like source=Copernicus Sentinel-2 to your changeset.


Bonus: extra layers

Besides the template layers, I created a few that help a lot with mapping. To add one, go to the Configuration Utility → New Layer, enter a name (it becomes the ID), choose Source: Sentinel-2 L2A, click the pencil next to Data processing, paste the script and save.

NDWI: water

Highlights water bodies in blue. Great for reservoirs, ponds and rivers.

//VERSION=3
// NDWI (McFeeters): (B03 - B08) / (B03 + B08)
function setup() {
  return {
    input: ["B03", "B08", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let ndwi = (s.B03 - s.B08) / (s.B03 + s.B08);
  let c = colorBlend(ndwi,
    [-0.8, -0.3, 0.0, 0.2, 0.5],
    [[0.0, 0.5, 0.0], [0.6, 0.8, 0.4], [0.95, 0.95, 0.85], [0.3, 0.6, 1.0], [0.0, 0.0, 0.6]]);
  return [...c, s.dataMask];
}

NDBI: built-up areas

Highlights built-up surfaces and bare soil in yellow/red. In semi-arid regions dry soil also scores high, so use it together with false color.

//VERSION=3
// NDBI: (B11 - B08) / (B11 + B08)
function setup() {
  return {
    input: ["B08", "B11", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let ndbi = (s.B11 - s.B08) / (s.B11 + s.B08);
  let c = colorBlend(ndbi,
    [-0.5, -0.1, 0.0, 0.1, 0.3],
    [[0.0, 0.3, 0.8], [0.2, 0.7, 0.3], [0.9, 0.9, 0.6], [0.95, 0.6, 0.2], [0.8, 0.1, 0.1]]);
  return [...c, s.dataMask];
}

NIR grayscale: roads and shorelines

Just band B08 (near infrared, 10 m). Vegetation is bright, while water and asphalt are dark. Simple and sharp for tracing roads and the edges of rivers and reservoirs. Suggested by the community, thanks!

//VERSION=3
// NIR grayscale (B08)
function setup() {
  return {
    input: ["B08", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let v = 2.5 * s.B08;
  return [v, v, v, s.dataMask];
}

False color (urban): fixed script

If the False color (urban) layer fails with B8 is not defined, replace its script with this one:

//VERSION=3
// False color (urban): B12, B11, B04
function setup() {
  return {
    input: ["B12", "B11", "B04", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(sample) {
  return [2.5 * sample.B12, 2.5 * sample.B11, 2.5 * sample.B04, sample.dataMask];
}

Which layer to use for each kind of mapping

To switch layers in JOSM, just change LAYERS= in the URL. It’s worth creating one entry for each layer you use often.

Layer (template name) LAYERS= Bands Best for
Color Infrared (vegetation), the “false color” COLOR_INFRARED B8, B4, B3 Paved roads (dark against red vegetation), vegetation edges, crops, riparian forest
Natural color (true color) TRUE_COLOR B4, B3, B2 General overview, checking what each feature is, bare soil, urban areas
False color (urban) COLOR_INFRARED__URBAN_ B12, B11, B4 Urban and built-up areas. Helps tell asphalt from dirt roads
Vegetation Index - NDVI VEGETATION_INDEX (B8−B4)/(B8+B4) landuse=farmland, natural=wood/scrub, deforestation, centre-pivot irrigation
NDWI (bonus) NDWI (B3−B8)/(B3+B8) natural=water: reservoirs, ponds, wide rivers, floodplains
NDBI (bonus) NDBI (B11−B8)/(B11+B8) landuse=residential/industrial, urban sprawl, new subdivisions
NIR grayscale (bonus) NIR B8 Tracing roads, shorelines and vegetation edges with maximum contrast
Moisture Index MOISTURE_INDEX (B8A−B11)/(B8A+B11) Wetlands (natural=wetland), floodplains, irrigated vs. dry vegetation
SWIR SWIR B12, B8A, B4 Burned areas, bare soil, mining, water (very dark)
Agriculture AGRICULTURE B11, B8, B2 Field boundaries, telling crops from pasture
Geology GEOLOGY B12, B4, B2 Rock outcrops, quarries, natural=bare_rock
Atmospheric penetration ATMOSPHERIC_PENETRATION B12, B11, B8A Hazy or smoky days, when natural color looks bad
Bathymetric BATHYMETRIC B4, B3, B1 Coastline, reefs, sandbanks in shallow water. Uses B1 (60 m), so it is blurrier: avoid it for precise tracing

My favourite combo: false color for roads and vegetation, NDWI for water and natural color to double-check. For reservoirs in semi-arid regions, compare a wet-season image with a dry-season one and map the normal water level (intermittent=yes when it dries up every year).

Happy mapping!

This entry is also available in Portuguese.


Sentinel-2 em falsa cor no JOSM, de graça, pelo Copernicus

Quem mapeia no interior do Brasil conhece o problema: a imagem do Bing ou da Esri é antiga, cheia de nuvem ou simplesmente não mostra se aquela estrada é asfaltada ou de terra. O Sentinel-2 resolve boa parte disso. É uma imagem de satélite gratuita, atualizada a cada poucos dias, com 10 m de resolução e com bandas de infravermelho que o olho não vê.

Na composição falsa cor (bandas B8, B4

Quem mapeia no interior do Brasil conhece o problema: a imagem do Bing ou da Esri é antiga, cheia de nuvem ou simplesmente não mostra se aquela estrada é asfaltada ou de terra. O Sentinel-2 resolve boa parte disso. É uma imagem de satélite gratuita, atualizada a cada poucos dias, com 10 m de resolução e com bandas de infravermelho que o olho não vê.

Na composição falsa cor (bandas B8, B4 e B3), a vegetação fica vermelha e o asfalto fica escuro e bem contrastado. Rodovias pavimentadas cortando a caatinga ou a lavoura ficam muito evidentes.

Sentinel-2 em falsa cor no JOSM: a rodovia asfaltada aparece como uma linha escura e nítida, e a vegetação em vermelho

Sentinel-2 em falsa cor no JOSM, no interior do Ceará. Contém dados Copernicus Sentinel modificados (2026). Imagem: Wikimedia Commons, CC BY-SA 4.0.

Neste tutorial mostro como colocar essa camada no JOSM usando o serviço gratuito do Copernicus Data Space Ecosystem, da União Europeia.

Limitação importante: 10 m por pixel serve para rodovias, estradas vicinais largas, água, vegetação, uso do solo e áreas queimadas. Não serve para prédios nem para ruas estreitas dentro da cidade.


1. Crie uma conta no Copernicus Data Space

  1. Acesse https://dataspace.copernicus.eu e clique em Login → Register.
  2. Preencha o cadastro e confirme o e-mail.

A conta é gratuita e dá direito a uma cota mensal de processamento, que é suficiente para mapear normalmente no JOSM.


2. Crie a configuração e pegue o seu ID

O JOSM não acessa o Copernicus Browser diretamente. Ele acessa um serviço WMS que você configura uma única vez.

  1. Entre em https://shapps.dataspace.copernicus.eu/dashboard/ com a mesma conta.
  2. No menu lateral, abra Configuration Utility.
  3. Clique em New configuration.
  4. Dê um nome (ex.: JOSM) e, em Create configuration based on, escolha Simple Sentinel-2 L2A template.
  5. Clique em Create configuration.

Não use os outros templates de Sentinel-2. O CC Europe cobre só a Europa e o 120 m Mosaic tem resolução baixa demais. “L2A” significa imagem com correção atmosférica.

A configuração já vem com várias camadas prontas. No painel da esquerda, em Service endpoints, aparece o ID da configuração, um código no formato xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Copie esse ID, porque ele vai na URL do JOSM.

Atenção ao nome: a “False color” do Copernicus Browser aparece no template como Color Infrared (vegetation), com ID COLOR_INFRARED. A camada False color (urban) é outra composição (B12, B11, B4). Confira sempre o ID exato na coluna Id da sua configuração.


3. Adicione a camada ao JOSM

  1. No JOSM, abra Editar → Preferências (F12) → aba Imagens.
  2. Na parte de baixo, clique em + WMS.
  3. Cole a URL abaixo, trocando SEU_ID pelo ID copiado no passo anterior:

    https://sh.dataspace.copernicus.eu/ogc/wms/SEU_ID?SERVICE=WMS&REQUEST=GetMap&VERSION=1.3.0&LAYERS=COLOR_INFRARED&FORMAT=image/png&TRANSPARENT=TRUE&STYLES=&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&TIME=2026-08-01/2026-11-14&MAXCC=30&PRIORITY=leastCC
    
  4. Se o JOSM pedir para buscar as camadas, marque “Definir URL WMS gerada manualmente” e cole a mesma URL no campo da URL WMS.
  5. Dê um nome, por exemplo Sentinel-2 Falsa Cor, e confirme.
  6. Ative a camada pelo menu Imagens.

Atalho: todas as camadas de uma vez

Se preferir não montar URL por URL, fiz um script que adiciona todas as camadas da sua configuração ao menu Imagens do JOSM: josm-sentinel2 no GitHub. Feche o JOSM antes de rodar.

  • Windows: baixe o josm-sentinel2.bat (botão Download ZIP ou Raw), dê dois cliques e cole o seu ID. O Windows pode mostrar um aviso do SmartScreen por ser um arquivo baixado.
  • macOS e Linux: baixe o josm-sentinel2.sh e rode no terminal: bash josm-sentinel2.sh SEU_ID

O script pergunta ao Copernicus quais camadas existem na sua configuração e adiciona só essas, com os nomes que estão lá. As camadas do bônus (NDWI, NDBI, NIR) só aparecem se você as tiver criado. Ele usa as imagens dos últimos 3 meses (até 30% de nuvens, cena menos nublada primeiro) e faz backup do preferences.xml antes de mexer. Rodando de novo, atualiza as datas sem duplicar as camadas. São arquivos de texto: abra num editor para conferir antes de rodar, se quiser.

O que significa cada parâmetro

Parâmetro O que faz
LAYERS=COLOR_INFRARED Qual composição mostrar. Troque pelo ID de outra camada para ter outra visualização
TIME=2026-08-01/2026-11-14 Intervalo de datas das imagens usadas. Ajuste para o período que quiser
MAXCC=30 Descarta cenas com mais de 30% de nuvens
PRIORITY=leastCC Monta o mosaico priorizando as cenas com menos nuvens

Se o JOSM ignorar TIME, MAXCC ou PRIORITY: isso acontece quando a camada é escolhida na lista (Obter camadas), porque o JOSM monta a própria URL e descarta os parâmetros extras. A alternativa mais robusta é configurar isso na própria camada, no Configuration Utility: Time range (use Relative, por exemplo últimos 3 meses, para a imagem não ficar desatualizada), Cloud coverage e Mosaic order (Least cloud coverage).

Dica: crie duas entradas com datas diferentes, uma na estação seca e outra na chuvosa. No semiárido isso muda completamente o que aparece, principalmente açudes e rios intermitentes.

Problemas comuns

Sintoma Causa provável Solução
Tiles com erro só com zoom afastado O serviço recusa áreas muito grandes Aproxime o mapa. É normal
Layer XXX not found O ID da camada não bate com a configuração Confira na coluna Id do Configuration Utility. Maiúsculas, _ e - fazem diferença
B8 is not defined ou Failed to evaluate script O script da camada está no formato antigo Substitua o script (veja os exemplos no bônus)
Imagem deslocada ou com erro de coordenadas JOSM em projeção WGS84 (EPSG:4326) Use a projeção padrão Mercator (EPSG:3857)
Imagem vazia Não há cena com menos de MAXCC% de nuvens no período Aumente o intervalo de TIME ou o valor de MAXCC

Para ver o erro exato, clique com o botão direito sobre um tile com erro → Mostrar informações do tile.

Licença

Os dados Sentinel são abertos (licença Copernicus) e podem ser usados para mapear no OSM. Coloque no changeset algo como source=Copernicus Sentinel-2.


Bônus: camadas extras

Além das camadas do template, criei algumas que ajudam bastante no mapeamento. Para adicionar, vá ao Configuration Utility → New Layer, dê o nome (que vira o ID), escolha Source: Sentinel-2 L2A, clique no lápis de Data processing, cole o script e salve.

NDWI: água

Realça corpos d’água em azul. É ótimo para açudes, lagoas e rios.

//VERSION=3
// NDWI (McFeeters): (B03 - B08) / (B03 + B08)
function setup() {
  return {
    input: ["B03", "B08", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let ndwi = (s.B03 - s.B08) / (s.B03 + s.B08);
  let c = colorBlend(ndwi,
    [-0.8, -0.3, 0.0, 0.2, 0.5],
    [[0.0, 0.5, 0.0], [0.6, 0.8, 0.4], [0.95, 0.95, 0.85], [0.3, 0.6, 1.0], [0.0, 0.0, 0.6]]);
  return [...c, s.dataMask];
}

NDBI: área construída

Realça superfícies construídas e solo exposto em amarelo/vermelho. No semiárido, o solo seco também sai alto, então use junto com a falsa cor.

//VERSION=3
// NDBI: (B11 - B08) / (B11 + B08)
function setup() {
  return {
    input: ["B08", "B11", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let ndbi = (s.B11 - s.B08) / (s.B11 + s.B08);
  let c = colorBlend(ndbi,
    [-0.5, -0.1, 0.0, 0.1, 0.3],
    [[0.0, 0.3, 0.8], [0.2, 0.7, 0.3], [0.9, 0.9, 0.6], [0.95, 0.6, 0.2], [0.8, 0.1, 0.1]]);
  return [...c, s.dataMask];
}

NIR em tons de cinza: estradas e margens

Só a banda B08 (infravermelho próximo, 10 m). A vegetação fica clara, e a água e o asfalto ficam escuros. Simples e nítido para traçar estradas e margens de rios e açudes. Sugestão da comunidade, obrigado!

//VERSION=3
// NIR grayscale (B08)
function setup() {
  return {
    input: ["B08", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(s) {
  let v = 2.5 * s.B08;
  return [v, v, v, s.dataMask];
}

False color (urban): script corrigido

Se a camada False color (urban) der erro B8 is not defined, substitua o script por este:

//VERSION=3
// False color (urban): B12, B11, B04
function setup() {
  return {
    input: ["B12", "B11", "B04", "dataMask"],
    output: { bands: 4 }
  };
}

function evaluatePixel(sample) {
  return [2.5 * sample.B12, 2.5 * sample.B11, 2.5 * sample.B04, sample.dataMask];
}

Qual camada usar para cada tipo de mapeamento

Para trocar de camada no JOSM, mude só o LAYERS= na URL. Vale criar uma entrada para cada camada que você usar com frequência.

Camada (nome no template) LAYERS= Bandas Melhor para
Color Infrared (vegetation), a “falsa cor” COLOR_INFRARED B8, B4, B3 Estradas asfaltadas (escuras contra a vegetação vermelha), limites de vegetação, lavouras, matas ciliares
Natural color (true color) TRUE_COLOR B4, B3, B2 Visão geral, conferir o que é cada feição, solo exposto, áreas urbanas
False color (urban) COLOR_INFRARED__URBAN_ B12, B11, B4 Áreas urbanas e construídas. Ajuda a separar asfalto de estrada de terra
Vegetation Index - NDVI VEGETATION_INDEX (B8−B4)/(B8+B4) landuse=farmland, natural=wood/scrub, desmatamento, pivôs de irrigação
NDWI (bônus) NDWI (B3−B8)/(B3+B8) natural=water: açudes, lagoas, rios largos, áreas alagáveis
NDBI (bônus) NDBI (B11−B8)/(B11+B8) landuse=residential/industrial, expansão urbana, novos loteamentos
NIR em tons de cinza (bônus) NIR B8 Traçar estradas, margens de água e limites de vegetação com contraste máximo
Moisture Index MOISTURE_INDEX (B8A−B11)/(B8A+B11) Áreas úmidas (natural=wetland), várzeas, vegetação irrigada x seca
SWIR SWIR B12, B8A, B4 Áreas queimadas, solo exposto, mineração, água (fica bem escura)
Agriculture AGRICULTURE B11, B8, B2 Talhões agrícolas, diferenciar culturas e pastagens
Geology GEOLOGY B12, B4, B2 Afloramentos rochosos, pedreiras, natural=bare_rock
Atmospheric penetration ATMOSPHERIC_PENETRATION B12, B11, B8A Dias com névoa ou fumaça, quando a cor natural fica ruim
Bathymetric BATHYMETRIC B4, B3, B1 Litoral, recifes, bancos de areia em água rasa. Usa a B1 (60 m), então fica mais borrada: evite para traçado preciso

Minha combinação preferida: falsa cor para estradas e vegetação, NDWI para água e cor natural para conferir. Para açudes no semiárido, compare uma imagem da estação chuvosa com uma da seca e mapeie o nível normal da água (intermittent=yes quando secar todo ano).

Bom mapeamento!

Thursday, 27. October 2022

Florian Lohoff

josm plbuildings for Northrhine-Westfalia

For a long time building imports in Northrhine-Westfalia or NRW was a hassle. The only source would be a WMS server and some people wrote software to convert the WMS tiles back to some useful vector informations and merge into the josm dataset. This solution was pretty fragile and my impression is that its basically unmaintained, although it still works for me.

For a long time i was look

For a long time building imports in Northrhine-Westfalia or NRW was a hassle. The only source would be a WMS server and some people wrote software to convert the WMS tiles back to some useful vector informations and merge into the josm dataset. This solution was pretty fragile and my impression is that its basically unmaintained, although it still works for me.

For a long time i was looking for a solution to use something like generic WFS in JOSM with a rule based merging of tags and or geometries (Which geometries to use nodes from, snap distance etc). Nothing like this popped up in the last 10 years.

So i had a look yesterday and found the plbuildings plugin which just needs the right server component to serve OSM XML files.

So i quickly hacked a server component to server the NRW Open Data Shape dataset.

When you install the plbuildings plugin into josm, and change the URL to:

plbuildings.server_url=https://osm.zz.de/plbuildingsnrw/v1/

You will be able to import building outlines from the Hausumringe NRW dataset. I am not that happy with the amount of nodes this dataset contains, or the usability with the plbuildings plugin, but its a start.

Also this will most like break horribly if you have real multipolygon buildings e.g. with a hole in the middle. This is not yet implemented at least on the server side as it would require to serve back a relation. I have no idea whether the plbuildings plugin supports this.


OpenStreetMap User's Diaries

Emplacement erroné du sommet du Rocher de la Tête Noire (1688)

En se fiant aux courbes de niveaux entourant le sommet virtuel du Rocher de la Tête Noire (1688, Valais, Suisse) sur la carte OpenStreetMap on peut constater que le point (noeud ?) du sommet est mal placé, et qu’il devrait se trouver à environ 170 m plus loin au nord-est, à l’intérieur du cercle formé par la courbe 1680, seule zone 1680-1690 s’apparentant à un mont ou un sommet ; c’est d’ailleur

En se fiant aux courbes de niveaux entourant le sommet virtuel du Rocher de la Tête Noire (1688, Valais, Suisse) sur la carte OpenStreetMap on peut constater que le point (noeud ?) du sommet est mal placé, et qu’il devrait se trouver à environ 170 m plus loin au nord-est, à l’intérieur du cercle formé par la courbe 1680, seule zone 1680-1690 s’apparentant à un mont ou un sommet ; c’est d’ailleurs ce que confirme Swisstopo, la carte la plus fiable en Suisse.


回顾中国大陆 OSM 数据增长历程:2013 – 2025 年乡镇完备度评估与 2026 年前瞻

本文使用 Geofabrik 的数据快照,从行政、道路交通、公共和商业设施、建筑和土地利用、标签等方面分析了 2013–2025 年中国大陆各乡镇 OSM 数据完备程度的增长情况,并以 2026 年 10 月 30 日的快照给出了 2026 年统计结果的前瞻。

以完备度这一指标作为参考,14 年来中国大陆的评分从 10.5 增长到 44.8,增长速度有先快后慢的趋势,原因主要是行政要素尤其是行政节点在近年趋于完善。道路交通一直是近年贡献增长最多的领域。城市的街道类型与乡村的镇、乡类型的得分差距逐年扩大,14 年间从 20 余分扩大到近 40 分。东部省份和部分拥有活跃绘图者的中西部省份是主要的增长地区,辽宁、湖北、海南和陕西四省的增长水平显著滞后于其初始水平。

相关链接:

  • 2025 年中国大陆乡镇 OSM 要素完备度分

本文使用 Geofabrik 的数据快照,从行政、道路交通、公共和商业设施、建筑和土地利用、标签等方面分析了 2013–2025 年中国大陆各乡镇 OSM 数据完备程度的增长情况,并以 2026 年 10 月 30 日的快照给出了 2026 年统计结果的前瞻。

以完备度这一指标作为参考,14 年来中国大陆的评分从 10.5 增长到 44.8,增长速度有先快后慢的趋势,原因主要是行政要素尤其是行政节点在近年趋于完善。道路交通一直是近年贡献增长最多的领域。城市的街道类型与乡村的镇、乡类型的得分差距逐年扩大,14 年间从 20 余分扩大到近 40 分。东部省份和部分拥有活跃绘图者的中西部省份是主要的增长地区,辽宁、湖北、海南和陕西四省的增长水平显著滞后于其初始水平。


相关链接:


1 评价方法

1.1 数据来源

1.1.1 OSM 数据

和去年用发送数万次 Overpass 请求乡镇要素的笨办法不同,本文的作者不久前才注意到通过 Geofabrik 的数据快照来完成这一分析是更加方便的做法,后者也是 Taginfo 的数据来源。对于中国大陆,Geofabrik 自 2014 年起提供有每年 1 月 1 日的数据快照,大小仅 100 MB 到 1.5 GB 不等。除了节省下载周期、缓存体积,以及避免统计时刻前后不一的口径问题以外,Geofabrik 还存有完整的要素位置、标签和几何关系,支持统一的快速提取和复杂的判断操作。

1.1.2 乡镇名单

本文从 adyliu/china_area 与 xiangyuecn/AreaCity-JsSpider-StatsGov 的存档提取了 2013–2023 年的国家统计局统计用区划代码,并将其清洗为乡镇名单,清洗过程与先前日志所描述的相同。由于国家统计局在 2024 年后不再公开统计用区划代码,2024 年的名单沿用自 2023 年。同时,依社区朋友的建议,2025 年与 2026* 年的名单改用民政部国家地名信息库的乡镇名单。

乡镇名单的坐标大多取自其匹配到的 OSM 行政节点。早期的行政节点缺失较多,本文对其进行了跨年份的名称和坐标匹配。对于至今或至被撤销为止都没有对应 OSM 行政节点的乡镇,本文使用高德 API 补上了统计所需的先验坐标。

1.2 统计指标

借助 Geofabrik 中留有的完整的空间信息和标签信息,本文对旧标准中部分过于简单的统计规则进行了些许调整,在保证总分数相对不变的条件下细分了评分项目和计分方法。其中最主要的有三处:

  1. 道路、设施、建筑等的计分方式从特定距离(1 km 或 3 km)内有即计分,调整为按服务半径 r 和与乡镇节点中心的距离 d 加权计分,权重 w 的计算方式为服务面积所占乡镇节点附近的 1 km 生活圈的面积比例;举例来说,当某商店的 r = 1 km 且 d = 1.5 km 时,其服务面积所占 1 km 生活圈的面积比例为 37%,其在旧标准下不得分,在新标准下得到 0.37 分

  2. 从行政节点和边界挪出 5 分、从公共和商业设施挪出 10 分,为标签新设评分标准,合计 15 分;主要用于评价道路、建筑、设施的标签在标识(名称、编号、地址等)和功能(限速、高度、营业时间等)两个维度上的完备程度

  3. 行政节点的搜寻不再绑定 place 标签,而是优先用匹配到的行政关系的成员来判断,避免了一些因 label 成员无 capital 或 place 标签而失分的问题;同名的行政关系靠上级县域关系进一步区分,避免了相邻的同名乡镇匹配到同一节点的问题;以及,受数据快照的边界限制,国界线附近的乡镇得分不再计算国界线外的 OSM 要素

部分 项目 旧标准 新标准
行政 行政节点 7 分 5 分
  行政边界 8 分 7 分
  地名 5 分(3 km 内每个 1 分) 3 分(3 km 内每个 1 分,排除匹配到的行政节点)
道路交通 主要和次要道路 5 分(3 km 内至少 1 条) 5 分(按 r = 3 km 加权,2 km 满分)
  三级和未分类道路 5 分(3 km 内每条 1 分) 5 分(按 r = 3 km 加权,4 km 满分)
  居民和服务道路 10 分(1 km 内每条 0.5 分,1–3 km 每条 0.2 分) 10 分(按 r = 1 km 加权,4 km 满分,含服务道路和辙路)
  公交站 2 分(3 km 内至少 1 个) 2 分(按 r = 3 km 加权,1 个满分)
  停车场 2 分(3 km 内至少 1 个) 2 分(按 r = 3 km 加权,1 个满分)
  能源站 2 分(3 km 内至少 1 个,仅加油站) 2 分(按 r = 3 km 加权,1 个满分,含充电站)
  道路种类 4 分(3 km 内每类 0.5 分) 4 分(3 km 内特定集合中每类 0.5 分)
公共和商业设施 政府机关 5 分(3 km 内至少 1 个) 3 分(3 km 内至少 1 个)
  医院 5 分(1 km 内至少 1 个) 3 分(按 r = 1 km 加权,1 个满分)
  学校 5 分(1 km 内至少 1 个) 3 分(按 r = 1 km 加权,1 个满分)
  派出所 5 分(1 km 内至少 1 个) 3 分(按 r = 1 km 加权,1 个满分)
  邮局 2 分(1 km 内至少 1 个) 1 分(按 r = 1 km 加权,1 个满分)
  银行 2 分(1 km 内至少 1 个) 1 分(按 r = 1 km 加权,1 个满分)
  商店 6 分(1 km 内至少 6 个) 6 分(按 r = 1 km 加权,6 个满分)
建筑和土地利用 建筑或人造物 16 分(1 km 内每个 0.2 分,1–3 km 每个 0.1 分) 16 分(按 r = 1 km 加权,80 个满分)
  土地利用 4 分(3 km 内特定集合中每类 0.5 分) 4 分(3 km 内特定集合中每类 0.5 分)
标签 道路标识 无 3 分(3 km 内干线至三级道路、未分类道路和居民道路中带名称或编号*的比例,80% 或 40 km 满分)
  道路功能 无 2 分(3 km 内干线至三级道路、未分类道路和居民道路中带限速、车道等功能标签的比例,40% 或 20 km 满分)
  建筑标识 无 3 分(带名称或地址的建筑比例,20% 或 30 个满分)
  建筑功能 无 2 分(带建筑类型、高度、层数等功能标签的建筑比例,20% 或 30 个满分)
  设施标识 无 3 分(带名称或地址的设施比例,80% 或 20 个满分)
  设施功能 无 2 分(带营业时间、品牌等功能标签的设施比例,40% 或 10 个满分)

注:“带名称或编号”含 noname 和 noref 等对特意留空的标注情况

以 2025 年末的快照为例,新标准和旧标准的得分相关系数为 0.97,名次相关系数为 0.95,两者实际变化不大。然而,由于省份之间的平均得分差距极小,部分省份的排名受到了较大影响(如甘肃省,排名由第 9 下降至第 15,主要来自行政分的权重下降)。旧标准得分和 2025 年日志中的得分仍然存在差异,其差异则来自快照和 Overpass 缓存的请求时间和数据完整性等的差别。

2 中国大陆总体变化

首先是中国大陆在 2013–2026 年这 14 年间的乡镇平均完备度的变化,其中 2026 年还未结束,使用的数据来自 10 月 30 日的快照。图中黑色数字是新标准下的平均得分,折线及其下方的灰色数字则是旧标准下的平均得分。可见,10 年代初整个大陆的平均得分不到 20,几乎全由道路交通组成,建筑、行政要素寥寥无几,设施更是接近空白。2022 年前各地区得分增长迅速,平均每年都能增长 3 分左右;增长最快的是 2017–2019 年这三年,主要归功于道路要素和行政要素的快速完善,其间全国每年新增标注 4000 到 6500 个乡镇。2022 年后各地区得分增长放缓至每年 1.5–2.1 分,行政要素的增长趋于饱和,道路交通仍是主要的增长来源。

将全国乡镇划为每 20 分一档,观察其得分占比。可以发现,14 年间平均得分的上涨主要归功于低分段乡镇的分数提升。2022 年前,每年约有 6%–11% 的乡镇从 20 分以下升入 20–40 分的区间,2022 年后,20–40 分的乡镇开始批量进入 40–60 分,每年转换率在 1% 左右。零分乡镇的数量在 2013–2019 年间迅速下降,到 2020 年几乎为零,再到 2026 年 10 月就仅剩近年更名或新设的 2 个西部乡镇(新疆的雅克拉镇和哈图镇)。满分乡镇在 2015 年开始出现,2024 年后每年增加 77–114 个,到 2026 年 10 月达到了 479 个。

若按乡镇的行政类型,分为街道、镇、乡(含民族乡)三类各自评价,则会发现,14 年来城乡的得分差距在逐年扩大。2019 年前,街道的平均得分每年增长约 4.5 分,而镇、乡的平均得分每年增长仅 2.5–2.8 分;2019 年后,三者的增速都有所放缓,街道下降至每年增长约 2.8 分,镇、乡的平均得分则下降至每年增长约 1.6–1.9 分。街道和乡的平均分差从 2013 年的约 20 分扩大到 2025 年的近 40 分,扩大将近一倍。即便是镇与乡,平均分差亦从 2013 年的 3.9 分扩大到 2025 年的 7.2 分。扩大的分差来源于城乡差异,还来源于人口密集地区和人口稀疏地区的差异。

最后,按统计指标细分,观察各项达到满分的乡镇比例,以为分数增长提供具体的参考。行政方面,乡镇的行政节点在 2017–2019 年间得到快速补充,至 2025 年已趋于完善。行政边界在 2019 年曾有单年 9% 的快速增长,但其后增长速度回落,至今仍有超过半数乡镇没有行政边界。道路交通方面,主要和次要道路是最早被完善的对象,至 2017 年满分比例已超过 80%;其后道路网的绘制下沉至三级和未分类道路,其满分比例在 2021 年达到 80%;居民和服务道路以及各类交通设施则仍有待提升。公共和商业设施是空白的重灾区,至 2026 年 10 月,仅有 35% 的乡镇在学校上达到了满分,其余项达到满分(注意满分的标准多是 1 个)的比例则在 4%–25% 之间。建筑和土地利用也是有待填补的重点,不过有趣的是,建筑或人造物的满分比例在 14 年间增速非常稳定,约为每年 1%,而这正是需要耗费绘图者最多精力的一项。新增的标签方面,由于绘图速度超过了上标签的速度,道路标识一项的满分比例反而从早年的 20% 下降至近年的 12%,其他项的满分比例仍在稳步上升。

3 各行政区分区变化

3.1 省域变化

上图列出了各省级行政区划的平均得分及其排名在 2013–2026 年间的变化,左侧标签上的名次取自 2025 年,右侧的名次变化则是 2025 年与 2013 年的对比。从排名上看,头部沪、京、津、粤、苏、浙六省市近年的分数增长和排名都非常稳定,粤、苏二省常年分数差距在 2 分以内。中部的 40–50 分区间的变化则非常剧烈,能看出山东、内蒙、安徽、甘肃、西藏的绘图者相当活跃,排名上升有 4–12 名,相对的湖北、河南、辽宁、云南、海南、陕西的排名则下降明显。底部的渝、桂、湘、川、陕、贵六省市则是头部的对照,近年的分数增长和排名都稳定地低。截至 2026 年 10 月,贵州仍是距倒数第二相差 5 分的离群值。

若对比 2013 年的起点和 2013–2025 年的增幅,可见东部省份在初始分数和增幅上都领跑全国,除北京、海南以外,其余省市至少都在拟合线上。中部、西部和东北省份集中在拟合线的左下部,增幅与初始分数的关系接近正比,超出拟合线的有西藏、甘肃、安徽、内蒙古。令人意外的是,贵州虽然是初始分数和当前分数均为最低的省份,但其增长水平离拟合线并不遥远;相反,辽宁、湖北、海南、陕西四省的增长幅度则显著偏离拟合线。辽宁在 12 年间的增幅不到 25 分,为全国最低。

3.2 县域变化

回顾出现在最高榜中的名字,可见各省 OSM 数据最完善的地区大多是省会城市或省内最知名的城市。部分省份的活跃绘图者贡献了例外情况:如河北的唐山市路北区、广西的柳州市城中区、黑龙江省的鸡西市鸡冠区与齐齐哈尔市建华区、河南的洛阳市涧西区、吉林的延吉市,以及山西的阳泉市城区。到 2026 年,这些城市的中心区域大多都能达到平均 90 分以上,中国大陆也终于出现了一个平均得分满分的县级行政区,即上海市黄浦区。最早达到县域平均 95 分的是广州市越秀区,其在 2014–2023 年间一直是中国大陆平均得分最高的县域,直到 2018–2019 年才有杭州市上城区、南昌市西湖区以及兰州市城关区先后达到 95 分。2020 年前后,上海、北京两个国际都市的中心区域的要素完善程度甚至不如有绘图者常驻的鸡西市,活跃绘图者的重要性可见一斑。目前为止,西宁、拉萨、贵阳、海口和银川与其他城市的差距也反映出当地绘图者的匮乏。

反过来看最低榜。到 2026 年,作为直辖市的上海、北京和天津做到了全域跑赢全国平均线,而唯一低于 20 分的是福建的三明市清流县。尽管大部分省市的最低水平都在稳定进步,一些常年占榜、进步缓慢的县域还是需要关注:如海南的白沙县、云南的临沧市永德县、浙江的丽水市景宁县、广西的河池市大化县,以及福建的三明市清流县。

同样将各县的 2013 年初始得分与 2013–2025 年增幅放在一起对比,其表现出的规律倒不像省域平均那么明显。不过,还是能看出达到增幅上限(即满分)的县域大多都地处东部。12 年间,整个中国大陆地区增幅最大的县域依次是防城港市港口区、白银市白银区和宿迁市宿城区、唐山市古冶区和宿迁市宿豫区,增幅都在 78 分以上,其贡献者也在中国社区小有名气。相对地,增幅最小的 4 个县域则是宜昌市兴山县、咸宁市通城县、辽阳市辽阳县和鹤岗市绥滨县,增幅在 11 分以下,多年无人问津。

4 增幅分布

两幅时空分布图分别展示了中国大陆各乡镇和县域平均在 2013 年、2017 年、2021 年和 2025 年四个时间切片上的 OSM 完备度变化。回到 2013 年,中国大陆的 OSM 要素是字面上的“一片空白”,仅有大城市的中心可见深色,整个大陆的 Geofabrik 切片也只有 112 MB 的大小。从 2017 年起,深色从城市中心开始沿人口密集区和交通干线扩散,满分乡镇也开始增多;到 2025 年,大部分的县城中心都能达到 70 分以上,人口密集区能出现视觉上的连片深色。

仅看 2019–2025 年这最近 6 年的变化,可以找出近年 OSM 要素增长最快的连片区域。按增幅看,吉东地区以 7 县区 36 分领跑全国;紧跟的是胶东、苏北鲁东南,以及广东的粤东北和肇庆,平均增幅均在 30 分以上。按县区数量算,长三角的 70 县区无疑是连片增长最突出、最全面的地区,其次是京津唐的 30 县区,鲁中以济南为核心的 18 县区和以成都为核心的成都平原 14 县区则在其之后,平均增幅都在 27 左右。此外,厦漳的 10 县区、大理的 10 县区和南宁的 5 县区,平均得分在近 6 年都有 20 分以上的显著增长。

总结

尽管就本文的评分标准而言,各乡镇完备度的增长速度有先升后降的趋势,但这并不意味着中国大陆的 OSM 社区在近年更加冷清 —— 相反,如果单纯统计各数据快照中全地域的 OSM 要素增量,可见 2024–2026 年仍是大多类要素增量最快的一段时间。近年的完备度评分增长放缓,主要是因为单项评分占比较高的行政类要素趋于完善,以及城市中心的增量超出满分标准而未反映在得分上。从数据分析的角度而言,这体现了对一个不设上限的统计标准的需要。从社区建设的角度而言,这意味着绘图者“求精”的脚步从未放缓。只是,一个更加完善的地理信息数据库,既要有优秀的地区作为示范,也要有足够全面的基础数据作为支撑,希望本文能就此尽些绵薄之力吧。

最后,感谢 OSM 中国社区的诸多朋友对本项工作的讨论,尤其是 @Kisarazu Funya 提出的多项改进意见!这都是本文持续改进的动力。


duckOSM Studio

“The idea is pretty cool. It downloads regional data from Geofabrik directly in the browser and formats the data into Parquet format, then lets you ask the AI ​​to query it using DuckDB.”

“This project looks cool, even though I’m still struggling to understand what use case it is trying to solve. (What does “routable road network” even mean?) (But well.. Perhaps this is partly due to my

“The idea is pretty cool. It downloads regional data from Geofabrik directly in the browser and formats the data into Parquet format, then lets you ask the AI ​​to query it using DuckDB.”

“This project looks cool, even though I’m still struggling to understand what use case it is trying to solve. (What does “routable road network” even mean?) (But well.. Perhaps this is partly due to my own bias, as I’ve never worked on any OSM-based routing or simulation projects)”

“I see data export to SUMO and MATSim, and LinkedIn mentions the possibility of using NetworkX. Judging by the profile, the author is a researcher with a focus on graph algorithms.”


“Export to PMTiles, MBTiles, GeoPackage, GeoJSON, kepler.gl, MATSim or SUMO”

  • PMTiles (Protomaps Tiles) is a file format for storing map tiles in a single file. Normally, a web map requests hundreds or thousands of individual tiles from a tile server. PMTiles packages those tiles into one archive that can be accessed through HTTP Range Requests.
  • MBTiles is another format for storing map tiles in a single file. But MBTiles uses an SQLite database. Instead of storing individual image or vector tiles as separate files, it stores them as records in database tables. It supports raster tiles (PNG, JPEG) and vector tiles (typically PBF).
  • GeoPackage is an open geospatial data format based on SQLite. Unlike PMTiles and MBTiles, which primarily store map tiles, GeoPackage can store actual geographic features and their attributes. GeoPackage can also store raster tiles and other raster data. You can open GeoPackage files directly in QGIS.
  • GeoJSON is a text-based format for representing geographic features using JSON.
  • kepler.gl is an open-source geospatial data visualisation tool originally developed by Uber.
  • MATSim stands for Multi-Agent Transport Simulation. It is an open-source framework for simulating transportation systems using agents. An agent represents an individual traveller with a daily activity plan. MATSim simulates thousands or millions of these individual travel plans interacting with a transportation network. The simulation can model : Private vehicles, Public transportation, Walking, Cycling, Traffic congestion, Travel demand, Route choices.
  • SUMO stands for Simulation of Urban Mobility. It is an open-source microscopic traffic simulation package. Unlike MATSim, which focuses heavily on individual travellers and their transportation choices, SUMO focuses on simulating individual vehicles and their behaviour within a road network. SUMO can model individual vehicles accelerating, braking, changing lanes, queuing and responding to traffic signals. For example, you could compare an intersection before and after changing its traffic signal timings.

“… MATSim is particularly useful for transportation planning, policy evaluation and travel-demand forecasting, while SUMO is particularly useful for road engineering, traffic management and testing vehicle behaviour. MATSim: Planning an entire city’s transportation system. SUMO: Engineering and optimising traffic systems.”


So that’s why I’ve never heard of MATSim or SUMO before. All because i’ve never worked on any transportation planning or road engineering projects.

At the time, I even asked, “What does ‘routable road network’ even mean?” because I simply assumed that freshly downloaded OSM way data, without any further processing, was already routable by default.

And for some reason, I’ve also never touched PMTiles or MBTiles. Because so far, I also haven’t been involved in any projects that required me to self-host map tiles.

However, serving tiles through HTTP range requests is a really interesting concept. Maybe I’ll give PMTiles a try in the future when I actually need to serve map tiles myself.

GeoPackage? I think I’ve heard of this file format somewhere while using QGIS, but I’ve never actually used it. I still prefer the good old SHP format.

Meanwhile, I use GeoJSON extensively in my projects. Storing collections of points, lines and polygons in GeoJSON is nice and straightforward. I also use it as my preferred file format for exporting data from the web apps I develop.

Kepler.gl? I’ve never heard of it either, probably because my projects rarely involve visualising large-scale geospatial datasets.


Organised editing: Machishirube (X-Gate Inc.) / 組織的編集のお知らせ #machishirube

Machishirube (X-Gate Inc.) — organised editing activity

Organisation: X-Gate Inc. (X-Gate株式会社), Shinjuku, Tokyo, Japan Account: まちのお店しるべ (operated by X-Gate Inc.) — contact by OSM message Hashtag: #machishirube Period: from 2026-12 (ongoing) — no edits before two weeks after the announcement Area: Japan

Purpose

X-Gate Inc. helps local businesses in Japan keep their public information ac

Machishirube (X-Gate Inc.) — organised editing activity

Organisation: X-Gate Inc. (X-Gate株式会社), Shinjuku, Tokyo, Japan Account: まちのお店しるべ (operated by X-Gate Inc.) — contact by OSM message Hashtag: #machishirube Period: from 2026-12 (ongoing) — no edits before two weeks after the announcement Area: Japan

Purpose

X-Gate Inc. helps local businesses in Japan keep their public information accurate. At the request and with the consent of each client business, we add the business to OpenStreetMap if it is missing, and correct its basic information if it is outdated.

What we edit

  • Only businesses that are our clients and have consented.
  • Only factual tags: name (as on the signboard), shop/amenity/craft/office tag, address (addr:*), phone, opening_hours, website. No promotional text.
  • Closed or moved businesses are updated or removed promptly.

Sources

  • The business’s official website and statements by the owner/manager. Positions come from the GSI (国土地理院) address search.
  • We do not copy from Google Maps, Tabelog or any other proprietary source.
  • The changeset tag source states the actual source (e.g. business_owner;website;GSI address search).

Method

  • One business per changeset, through the OSM API v0.6 (OAuth 2).
  • A staff member reviews every edit before upload; there is no unattended bulk upload, so this is neither an import nor an automated edit.
  • Before adding, we check for existing objects nearby to avoid duplicates.
  • Changeset comment: Add business info at owner's request #machishirube with a link to this page; hashtags=#machishirube.

Communication

  • Announced on the talk-ja mailing list (Japanese) at least two weeks before the first edit.
  • We answer questions and comments within 2 business days (Japanese or English).

日本語

X-Gate株式会社が「まちのお店しるべ」の名前で行う組織的編集です。お客様である店舗の依頼と同意を受け、店舗の公式サイトと店主の申告だけを情報源として、店舗の基本情報(名称・住所・電話番号・営業時間・公式サイト)を1件ずつ担当者が確認しながら追加・更新します。位置は国土地理院の住所検索で求め、Google マップ・食べログなど他社の地図や媒体からは転記しません。ご意見・ご質問は OSM のメッセージでお寄せください。2営業日以内にお返事します。

Thursday, 12. November 2026

OpenStreetMap User's Diaries

Dakota/Lakota Writing Systems and Orthography

The Dakota/Lakota language has been a written language for only the most recent chapters of its history. Writing systems for the language were first devised by 19th-century missionaries who sought to promote literacy as a part of encouraging Dakota people to convert to Christianity. These missionaries, especially Stephen Riggs, developed an alphabet based on the Latin Alphabet to represent the s

The Dakota/Lakota language has been a written language for only the most recent chapters of its history. Writing systems for the language were first devised by 19th-century missionaries who sought to promote literacy as a part of encouraging Dakota people to convert to Christianity. These missionaries, especially Stephen Riggs, developed an alphabet based on the Latin Alphabet to represent the sounds present in the language. All widely used methods for writing the language today are based on Riggs’ system with some degree of variation.

There is no single writing system accepted by the vast majority of speaker communities. A variety of systems - or orthographies - exist with varying degrees of popularity, and invididual speakers and teachers often have strong preferences one way or another. Areas of debate include:

  • May an orthography make use of special characters (ŋ, ǧ, ḳ, ú) or should writing be done only with characters that can be written with a standard English keyboard?
  • The language contains vowels (a, i, u) that may be nasalized or not, depending on context; should the orthography note the difference?
  • The language contains consonants (z, c, p, t, k, s) that may be aspirated for a harder sound or unaspirated; should the orthography note the difference?
  • The language contains consonants (g, h) that may be guttural or not; should the orthography note when this happens?
  • Some words are distinguished from other words only by which syllable is emphasized when the word is spoken e.g. “máġa” is a field while “maġá” is a goose. Should the orthography note which syllable is emphasized or not?

Whatever orthography is best for the learning journey of any given speaker, I believe that for a reference resource like OpenStreetMap it is best to use a writing system that fully explains how to correctly pronounce the words that make up place names. Speakers and learners who learn names from this resource can always choose to copy or remember information without pronunciation marks that they think are unnecessary. However, it is much harder to infer more information when given less; the starting position ought to be the maximum amount of information that we can give.

For this reason, I write Dakota (:dak) place names in the UMN Orthography developed by Carrie Schommer et al. at the University of Minnesota. This orthography is used by Dakota communities in Minnesota and language programs in Sisseton Wahpeton and Wípazoka Wakpa. This orthography fully communicates all possible pronunciation details that exist in the Dakota dialect. As is typical for this orthography, I note syllable emphasis only in the minority of situations when it is not on the second syllable. The way OSM displays means sometimes I have to use ṗ for aspirated-p consonants instead of the more commonly used p̣.

I write Lakota (:lkt) place names in the Standard Lakota Orthography used by the New Lakota Dictionary, Lakota Grammar Handbook, and related resources. This orthography fully communicates all possible pronunciation details that exist in the Lakota dialect. As is typical for this orthography, I note syllable emphasis on every multi-syllable word.

I am aware that there are speakers, teachers and communities that have preferences for orthographies other than these and come down on other sides of the questions above. The method that helps you learn is never the wrong choice, and once you’ve really internalized any one writing system you’re 95% of the way to understanding any of the others. It is my hope that the information I’ve recorded here will be helpful to you, even if you choose to represent it some other way in your own writing.


Basic Overview of the Dakota/Lakota Language

Dakota (instead called Lakota by speakers of that dialect) is the indigenous language of the Oc̣eṭi Ṡakowiƞ (Seven Council Fires) people of North America, consisting of the Bdewaḳaƞṭuƞwaƞ, Waḣpeḳute, Waḣpeṭuƞwaƞ, Sisiṭuƞwaƞ, Ihaƞkṭuƞwaƞ, Ihaƞkṭuƞwaƞna and Ṭiṭuƞwaƞ communities. Most members of these communities will describe themselves as Dakota (or Lakota for the Ṭiṭuƞwaƞ) people.

Dakota (instead called Lakota by speakers of that dialect) is the indigenous language of the Oc̣eṭi Ṡakowiƞ (Seven Council Fires) people of North America, consisting of the Bdewaḳaƞṭuƞwaƞ, Waḣpeḳute, Waḣpeṭuƞwaƞ, Sisiṭuƞwaƞ, Ihaƞkṭuƞwaƞ, Ihaƞkṭuƞwaƞna and Ṭiṭuƞwaƞ communities. Most members of these communities will describe themselves as Dakota (or Lakota for the Ṭiṭuƞwaƞ) people.

Dakota and Lakota communities can be found in Minnesota, North Dakota, South Dakota, Nebraska, Montana, Manitoba and Saskatchewan. All of these places have a rich geography of names devised by Oc̣eṭi Ṡakowiƞ people in the Dakota/Lakota language, including rivers, lakes, towns, islands, hills and more. People have traveled since the dawn of human history and some areas once had Dakota/Lakota communities that presently do not, and so other areas (such as Wisconsin, Iowa, Wyoming and Ontario) also have locations with names in the language.

Historically, there have been far, far more Dakota and Lakota place names than those that survive for us to learn about them in the present. Colonization has inflicted enormous trauma and language loss on these and other Native communities through allegedly-voluntary but actually forced exile from their lands, wars of conquest, traumatic boarding school assimilation, and more. However, many people who are members of (or in close contact with) these communities have put in heroic efforts in defense of the language. These language protectors have striven to continue learning, speaking and teaching the language, and to record many aspects of the language for future generations - including place names.

The language is cherished by the communities to which it belongs, though in the present only a minority of community members speak it with any degree of fluency. It is a richly detailed language in which large amounts of information are elegantly conveyed by verbs, especially verbs of motion and place. The language is related to (though not fully mutually intelligible with) a range of other languages of North America.

Oc̣eṭi Ṡakowiƞ culture is marked by great devotion and reverence toward the land and all that lives on it, and there have been many small- or large-scale efforts by people in or adjacent to these communities to record and publish place names in the language. However, many of these efforts have been expressed as books that are now out of print, articles behind academic paywalls, papers in archives, or websites with fragile hosting. Many such projects also only describe a small geographic area.

Modern data platforms like OpenStreetMap represent a great opportunity to store, share and present this knowledge. My goal on OSM is to pull together as many genuine Dakota/Lakota place names as I can find from the sources that exist and represent them on the map. I aim to do so in a way that accurately communicates how they are pronounced for the benefit of other learners and speakers, and that can be an aid to understanding their meaning.


Dakota/Lakota Dialects

My mapping on OpenStreetMap includes names in both Dakota and Lakota, with ISO codes dak and lkt respectively. This is an unusual approach compared to a lot of other multilingual mapping, so it’s worth explaining in more detail.

Dakota and Lakota are two different dialects of the same language (and are two possible names for that language). They are mutually intelligible, and a fluent sp

My mapping on OpenStreetMap includes names in both Dakota and Lakota, with ISO codes dak and lkt respectively. This is an unusual approach compared to a lot of other multilingual mapping, so it’s worth explaining in more detail.

Dakota and Lakota are two different dialects of the same language (and are two possible names for that language). They are mutually intelligible, and a fluent speaker of one can understand a fluent speaker of the other without difficulty. An analogy might be made to the Spanish spoken in Mexico vs the Spanish spoken in Spain - a speaker of the other dialect will seem to have a strong accent, unusual pronunciation, and some different word choices, but they are still clearly speaking your language. Both dialects are endangered, but there are substantially more Lakota speakers than Dakota speakers and this has been true for a long time.

Dakota and Lakota share the vast majority of their vocabulary. Most words that differ between these dialects differ in predictable, formulaic ways that do not represent any difference in meaning (e.g. Oṭuƞwe vs Otȟúŋwahe or Bde vs Ble). The most meaningful differences in Lakota vs Dakota speech emerge in conversational flow, which rarely matters for place names. Additionally, names of places in Dakota/Lakota are rarely Proper Nouns as English speakers understand them (words that are only used as names e.g. London, Florida, Catherine, Jesse). Rather, place names in the language - like the names of people in the language - are constructed from normal words.

Thus, while my sources all speak one or the other of Dakota or Lakota, when I add a place name in one dialect from a source I try to also add it in the other dialect - as long as the place name consists entirely of words that are “identical” between the dialects. These words may differ subtly in pronunciation, but are identical in meaning. This matches the approach to dialect differences that I’ve generally heard from speakers in practice - people stay in their dialect when describing the names of places, even if the place is populated by speakers of the other dialect.

There are situations where I will refrain from doing this mirroring between dialects:

  • When I have sources in both dialects and they say different things, I will enter truly different values for the two dialects. For example, see South Dakota’s Paha Waḳaƞ/Pȟežúta Pahá (Medicine Butte).
  • When I have a credible source for a name but it really is presented as a Proper Noun (rare) or at least I don’t feel that I understand what it means well enough to find counterpart words in the other dialect. For example, see the city of Ablíla (Aberdeen) in South Dakota - I have only a Lakota source, can’t break down the structure of the word further, and can’t find a Dakota source for the name of the city.
  • When I understand the name well enough, but the name is composed of words that truly don’t have parallels in the other dialect e.g. Isaƞ vs Míla. For example, see southern Minnesota’s Ṡuƞkṭokca Wakpadaƞ (Wolf Creek); this creek has only a Dakota name because only Dakota speakers say “Ṡuƞkṭokca” (wolf) and the Lakota word for wolf is too different to credibly present it as a counterpart.

People familiar with discourse on the Dakota/Lakota language may ask here “isn’t there a third dialect that we should be discussing?” and indeed you’ll often hear the language described as the “Dakota, Lakota and Nakota dialects”. For completeness’ sake, it’s worth mentioning that the Dakota dialect is further subdivided into Eastern (Isaƞyaṭi or Santee-Sisseton) and Western (Wic̣iyena) variants. Wic̣iyena Dakota is sometimes called “Nakota”. Some (myself included) believe that the term Nakota originated in an error, but in the present many authentic speakers of the language use the term sincerely to describe this dialect. Speakers of Wic̣iyena Dakota do not, however, call themselves Nakota - they still refer to themselves as Dakota people. The people who actually refer to themselves as Nakota are the Assiniboine of Montana and Canada, who speak a language that is related to Dakota/Lakota but not mutually intelligible; their language is outside the scope of my mapping efforts.

Wic̣iyena Dakota has more in common with Santee-Sisseton Dakota than Lakota, but occupies a sort of “middle ground” in pronunciation between the other dialects in ways that would be difficult to explain without a deep dive into linguistics terminology. Like Dakota vs Lakota, the ways Santee-Sisseton and Wic̣iyena Dakota differ are mostly subtle, predictable and formulaic pronunciation differences.

All OSM name:dak values I have added are in Santee-Sisseton Dakota, though locations west of Minnesota will skew toward Sisiṭuƞwaƞ-Waḣpeṭuƞwaƞ use of the diminutive -na instead of Isanyaṭi use of the diminutive -daƞ. There are some reasons for this choice:

  • Unlike Dakota vs Lakota, Santee-Sisseton vs Wic̣iyena Dakota do not have different ISO language codes; the OSM format forces me to choose one when assigning a primary name:dak value.
  • 19th-century Minnesota policies of forced expulsion and (frankly) genocide pushed Santee-Sisseton Dakota-speaking populations westward into traditionally Wic̣iyena-speaking areas. Very little migration has gone the other direction, so there are far fewer places where Wic̣iyena Dakota is the only dialect around.
  • There are much, much more abundant language resources for Santee-Sisseton Dakota than Wic̣iyena Dakota, ranging from historic missionary language texts to 21st-century Dakota-led language revitalization programs. This means I can check the meaning and origin of names in one in a way that I cannot for the other.
  • Santee-Sisseton Dakota is the dialect that I was taught in and thus the dialect that is most intuitive to me.

Whatever the dialect variations, the language I am mapping in is all one language. If the language is part of your heritage (or if it isn’t but you live in this part of the world), I’d encourage you to explore learning it in whatever dialect is spoken in or near your community.


A map of open OSM notes, sorted by what they need

There are about 450,000 open notes on OpenStreetMap. Each one is a message from someone who saw a problem on the map. But to know what a note needs, you have to open it and read it, one by one. That takes a lot of time.

So I trained a machine learning model to do this first read for us. I also made a simple website to show the results:

→ osm-notes.rub21.com

What does the mod

There are about 450,000 open notes on OpenStreetMap. Each one is a message from someone who saw a problem on the map. But to know what a note needs, you have to open it and read it, one by one. That takes a lot of time.

So I trained a machine learning model to do this first read for us. I also made a simple website to show the results:

→ https://osm-notes.rub21.com

What does the model do?

The model reads the first comment of each note and gives it two labels:

  • Category: what the mapper should do. For example: missing place, place closed or changed, wrong name, missing or wrong road, other wrong data, spam, empty, or not mappable (opinions, questions).
  • Theme: what the note is about. For example: food, shops, health, roads, transport.

How I built it

  1. The notes. Andrés (AngocA) built OSM-Notes-Ingestion. It loads all OSM notes into a database and keeps them up to date every minute. On top of it, I built a small pipeline that:
    • loads the full notes dump from the planet file,
    • takes the first comment of each note (the one that explains the problem),
    • detects the language of each note.
  2. Training data. This was the hardest part, and it took several rounds. The AI helped me a lot, but I reviewed many of its labels:
    • I sent about 10,000 notes to three popular AI models: Claude, GPT and Gemini. When all three agreed, I kept the label, and I also reviewed many of them.
    • When they did not agree, I read the note and chose the label myself. I labeled about 1,300 notes this way.
    • After the first training, I looked at the notes where the model failed. In many of them the label was wrong, not the model. So I fixed many labels and trained again, until the results were good enough.

    In the end, I had about 11,700 labeled notes in Spanish and English. I did not train with other languages. The model is multilingual, so I hope it can also work in other languages, but I have not measured it yet.

  3. The model. I fine-tuned XLM-RoBERTa large, a multilingual model, with these notes. Category macro-F1 is 0.78 and theme macro-F1 is 0.83.

The model is not perfect. It still makes mistakes, mostly with “other wrong data” and “not mappable”.

For ML people: model and results

  • Input: the model reads the full text of the first comment. I only remove things that do not help, like URLs, dates, hashtags and app versions. About 31% of the notes come from apps (StreetComplete, Organic Maps, MAPS.ME…). The rest come from the OSM website.
  • Models: I trained one model for category and one for theme. I compared three options: a simple TF-IDF + logistic regression baseline, mDeBERTa-v3 base, and XLM-RoBERTa large (XLM-R).
  • Split: 72% for training, 8% for validation (to pick the best checkpoint and stop early), and 20% for testing, stratified by class. I only used the test notes at the end. The main score is macro-F1, so rare classes like spam count as much as common ones.

Labeled notes per class (click a class to see it on the map):

Category Meaning Labeled notes
missing_place A place exists but is not on the map 3,706
wrong_road A road or path is missing or wrong 1,933
other_data Other wrong data: hours, address, type… 1,843
place_changed A place closed, moved or changed 1,367
wrong_name Wrong or missing name 994
not_mappable Opinions, questions, things not for OSM 785
spam Ads or unrelated links 200
empty Says nothing: “test”, “ok” 192
personal_data Personal data (moderators only) 148
Theme Labeled notes Theme Labeled notes
roads 3,712 shop 952
none 1,379 food 579
services 1,285 nature 524
leisure 1,279 transport 329
buildings 1,224 education 301
    health 194

The classes are not balanced. missing_place has 3,706 notes, but personal_data has only 148. I also labeled 590 notes as unsure, and I did not use them for category.

F1 by class for the three models

XLM-R large gave the best results: category macro-F1 0.78 and theme macro-F1 0.83. For category, it works a bit better in English (0.80) than in Spanish (0.74).

Category confusion matrix

The confidence score helps. If we keep only predictions with 90% confidence or more, category accuracy goes up from 82% to 90%, and we still keep 81% of the notes.

One thing to keep in mind: most test labels come from AI models. So these scores show how well the model agrees with the AI labels, not with people.

A website to see the results and close notes

  • Running the model without a GPU

I did not want to pay for a GPU server. So after training, I exported both models to ONNX with 8-bit weights. Now they are 4 times smaller and run on a normal CPU. They give the same answer as the GPU model for 96% of the test notes.

  • The website

The website is simple and looks a bit like OSMCha. You can list notes by category, theme and confidence, and filter by language and app. I hope this makes it easier to find notes you can fix and close. You can also export the notes as GeoJSON for MapRoulette.

You can log in with your OSM account. Then you can tell the model if a prediction is right or wrong (👍 or 👎), and help label notes.

Some notes have personal data, like “this is my house” or a phone number. I did not want to show them on a public map. So the public map only shows how many there are, and only OSM moderators can see them after they log in.

Next step

  • Use closed notes. The closing comment often says what the mapper did, like “added the shop” or “spam”. This gives a label confirmed by a real person. The model will still read only the first comment, but these labels can help me train and test it in more languages.

  • Use the work of Mateusz Konieczny - bot. He used an LLM to find notes that can be closed (spam, junk, personal data, duplicates) and closed many of them. These notes were checked by a person, so they are good training data, especially for rare classes like spam and personal_data.

Feedback welcome

I hope this helps people solve notes faster. I would love to hear from you:

  • Are these categories useful? Would you change any?
  • Does the map help in your area?
  • You can also help: log in and press 👍 or 👎 on a note, or label notes at https://osm-notes.rub21.com/label.

Note: this runs on my own small server, so the website may be slow sometimes.


Wandering Around 1.0: what's new in the OSM-powered browser game

A few weeks ago I wrote here about Wandering Around, a free browser game in which you can walk through any town or city on Earth, built on the fly from OpenStreetMap. Thanks to your comments and feedback, the game has now left beta: version 1.0 is live.

Play it here: wanderingaround.games (phone and desktop, no download, no account needed)

This post is about what changed on the O

A few weeks ago I wrote here about Wandering Around, a free browser game in which you can walk through any town or city on Earth, built on the fly from OpenStreetMap. Thanks to your comments and feedback, the game has now left beta: version 1.0 is live.

Play it here: https://wanderingaround.games (phone and desktop, no download, no account needed)

This post is about what changed on the OSM side since then.

Buildings that look like the real thing

  • Churches are built from their real outline. The game reads the shape of the building and finds the nave, the transepts and the choir, and each part gets its own roof that follows the shape. A square part that sticks out becomes the tower. A church mapped carefully as a cross shape now also looks like one at eye level.
  • Mosques get a dome on a drum, pointed windows and a minaret. They are recognised by religion=muslim, building=mosque or the name.
  • Cemeteries (landuse=cemetery) are laid out with gravel paths, rows of graves in neutral shapes, low hedges and trees.
  • Sidewalks now run along the whole street as one continuous strip. Short gaps are filled and corners join neatly.
  • Shop fronts, front doors and porches get their own place in the facade, so windows don’t end up behind a door.

Walking along OSM streets

When you tap somewhere on the map, your avatar now finds the way over the OSM road and path network: tiles stitched together, loose ends of footpaths connected, no private roads and no tunnels. Before, it walked in a straight line and got stuck against the first wall. If the straight line is free it still walks straight, so it doesn’t make strange detours across an open square.

Trains and ferries, everywhere

Asking Overpass for train routes from the browser became slow and unreliable in busy areas. So railway routes (route=train relations with their stops) are now extracted from the Geofabrik continent files with osmium and stored in tiles of 2 × 2 degrees. Opening a station takes one short request, anywhere in the world. Ferry routes come from Overture Maps in the same tiled way.

Wikipedia in the local language

Thanks to Frederik’s comment on my previous post: a monument now shows the Wikipedia article in the language of the place first (in Aarhus that is Danish), and falls back to the language of your device. The wikidata tag on the object is what makes this possible.

Museums and their shops

Every museum with a Wikidata link gets a little museum shop at the street, where you can buy prints of paintings from that museum’s own collection (from Wikidata, public domain works only) and souvenirs. A museum is recognised by tourism=museum, or, when that tag is missing, by Wikidata “instance of” (museum, art museum, gallery …). So adding wikidata to a museum building is directly visible in the game.

And more

Does your area look right? A church with an odd roof, a cemetery that isn’t recognised, or a station without trains usually means a tagging pattern I don’t handle yet. Please tell me in the comments, or use the feedback button in the game.

Thanks again to everyone who maps. Every building you trace ends up in someone’s walk.

Map data © OpenStreetMap contributors · tiles by OpenFreeMap · Wikidata · Wikipedia · Wikimedia Commons · Overture Maps

Wednesday, 11. November 2026

OpenStreetMap User's Diaries

Highway Classificaiton within the Greater Cairo Metropolitan Area

According to sources (such as this a general rule of thumb for roads within urban areas is 40 for busy traffic roads and 60 for main roads. I believe that the highway=’primary’ tag should generally align for these roads (usually long stretching across a district, 2-3 lanes) such as Ramsis St. For the less important roads they should be secondary of tertiary depending on importance, where tertiar

According to sources (such as this a general rule of thumb for roads within urban areas is 40 for busy traffic roads and 60 for main roads. I believe that the highway=’primary’ tag should generally align for these roads (usually long stretching across a district, 2-3 lanes) such as Ramsis St. For the less important roads they should be secondary of tertiary depending on importance, where tertiary is more likely to intersect more with busier residential areas and roads. This can help routing algorithms better impute speeds depending on the highway, helping in this region as road speeds are rarely defined for non-trunk roads.


OpenCage

Interview: Frank März on OpenFireMap

Frank talks about the history and evolution of OpenFireMap.

Today in our OpenStreetMap (OSM) interview series, we are speaking with Frank März about the story behind OpenFireMap. What started as an effort to replace an outdated, hand-drawn village map has grown into a free map showing fire stations, hydrants, water supply points and defibrillators across dozens of European countries. We spoke with Frank about the project, how AI helped him rebuild it, and his hopes for the future of community mapping.

1. Tell us a bit about who you are and how you first got involved with OpenStreetMap?

I’m Frank März (52) from a small village in Franconia, Germany. I work in network operations for a German mobile operator. I found OpenStreetMap around 2010 as a passionate marathon runner: I started by mapping all the routes and paths around where I live, later the buildings and everything else that was missing. Then I realized that our volunteer fire brigade, in a village of about 1,000 people, still had an ancient hand-drawn map hanging in the fire station. I wondered whether OpenStreetMap could be the basis for a new village and hydrant plan. That question took me from running routes to fire-service mapping.

OpenFireMap

2. What is OpenFireMap, how did the idea for the project come about, and what motivated you to create a dedicated map for fire services and emergency infrastructure?

OpenFireMap is a free web map that shows fire stations, hydrants, water supply points and defibrillators from OpenStreetMap. It started with that village plan question. I brought it up at the OSM meetup in Nuremberg and got a few people on board. I can barely program, so I didn’t build it, but I gave the impulse, proposed the design and later organized the domain. The first OpenFireMap then ran largely unchanged for about 12 years, operated by the admin of our meetup.

What changed was AI. I had moved to a different department at work and had to get to grips with GitHub, Docker and CI/CD, and OpenFireMap became my learning project for exactly that. In January 2026 I tried to set up a hydrant map purely with vibe coding, and it worked very well. After a few weeks I released a new version, on my own together with AI, and moved my domain over to it. I haven’t looked at a single line of code since. I use the 20-euro plans of Claude and OpenAI, and I’m amazed at what has become possible within a year.

3. What kind of information does OpenFireMap display, and where does the data come from? How does it build on the wider OpenStreetMap database?

OpenFireMap has no database of its own. It’s purely a visualization of OpenStreetMap data, and I’ve always liked that: if someone wants to add or correct something, they do it in OSM and it shows up on the map. For the fire service, the relevant objects are hydrants, suction points, fire ponds and water tanks, plus fire stations as a small extra. Recently I’ve added AEDs. I’m registered with the first-responder app “Region der Lebensretter”, so that topic matters to me, and I’m tinkering with a small side project: photograph an AED, and it’s either added to OSM or, if it’s already there, confirmed as still present.

To keep the map fast, I first set up pre-built vector tiles for Germany, Austria, Switzerland, Luxembourg and Liechtenstein. In a second step I extended that to 40 more European countries. Everywhere else, and for recent changes, the map asks Overpass live.

Overlay Display

4. Who uses OpenFireMap, and how can it help in practical situations? Have you come across any particularly interesting examples of how people use the map?

People use it in three ways. At a desk, you choose a place and export a PDF or PNG, for example a village plan; GPX and CSV came later. Our own fire station now has a village plan made this way on the wall. I’m currently working on a special export for printing that draws streets wider than they really are, so a printed map is easier to read. On the phone, you locate yourself and see the nearest hydrants. And some fire-service software, such as the Alarminator app, uses the data.

Feedback has led to real changes. The plant fire brigade of a car manufacturer in Baden-Württemberg had Württemberg shaft hydrants, and there was no symbol for them. I added one, and now the map has it.

There’s also a statistics page. Some regions are very thin; in my valley, with my two neighboring municipalities, I’d say we’ve mapped 99% of all hydrants, even along new roads that aren’t open yet. It’s not an official dispatch map, and the data should be checked locally before operational use.

5. What are the biggest challenges in maintaining OpenFireMap and keeping its data useful and up to date? How can the OpenStreetMap community contribute to the project?

Reliability. The map used to depend entirely on the Overpass API, and as that became less dependable, the map was useless whenever it was down. After a summer break, when I’d rather be outside, I picked it up again at the end of September and set out to fix that: pre-computed data served from Cloudflare, so the map appears within one or two seconds. Overpass is now only a backup. The data for Germany, Austria, Switzerland, Liechtenstein and Luxembourg is updated daily, the other countries weekly. Building it scared me at first, but it could all be vibe-coded.

Where I’d like help: Android. AI can only judge to a limited extent how things look on phones, and Android doesn’t look like the iPhone. If you use Android and are a bit of a design genius, feedback would be great.

For mapping, I’d like local fire brigades and their youth groups to turn it into an exercise: split the village into quadrants, walk them with phones, and a complete map exists two days later. hydrantenjaeger.de makes that fast: photograph a hydrant, add a few details, upload, and it’s in OSM about 20 seconds later. I’d love to see people use it. A short tutorial video that explains it quickly is on my to-do list, but I haven’t found the time yet. I’m not a big fan of long texts myself, so it will be a video rather than a manual.

Fire Hydrant icon

6. OpenStreetMap has come a long way since it began. Looking ahead, what do you hope the project will achieve over the next 10 years, and what role do you see OpenFireMap playing in that future?

OSM is a huge project. I love it when people look closely at their surroundings so that the map is really good where they live, and then all sorts of apps use it, even my own employer. It’s a great feeling to see a map and know that about 80% of what’s around me I mapped myself 10 or 12 years ago, and it’s still there.

My wish for the next ten years: that very many fire brigades map their own village and surroundings, so that all hydrants end up in the OpenStreetMap database. That would be really cool.

Where OpenFireMap will be in ten years isn’t that relevant. All of Europe is in already, and the whole world would be possible; the question is just where the server space is. It’s a purely private project, and I don’t want to make money from it. I want to give something back. If someone wants their country, I can set it up within a day. What would help me most is feedback from fire brigades and other users: what’s missing? With AI agents, building it takes one or two evenings, not weeks.

Everything is on GitHub, under the MIT license, so anyone can contribute, or copy it and build something of their own. And I’m a friend of simplicity. Many maps I see based on OSM are completely overloaded, and keeping it simple is my small contribution.


OpenFireMap is a great example of how OpenStreetMap data can be put to practical use, supporting local communities and emergency services. Frank hopes more fire brigades will get involved in mapping their surroundings, helping make essential emergency infrastructure visible and accessible to everyone. Thank you, Frank, for sharing your story and for your contributions to the OpenStreetMap community.

Happy mapping

Danielle

Please let us know if your community would like to be part of our interview series here on our blog. If you are or know of someone we should interview, please get in touch, we’re always looking to promote people doing interesting things with open geo data.


OpenStreetMap User's Diaries

My phone's 'Organic Maps equipped'

So maybe I’ll map in the big capital city today…

So maybe I’ll map in the big capital city today…