OpenStreetMap logo OpenStreetMap

Diary Entries in English

Recent diary entries

Posted by pnorman on 2 September 2025 in English.

Styles for vector tiles are typically written in the MapLibre GL style language. These definitions exist in JSON, which, for various reasons, is not a good language for humans to write in. Software called Charites preprocessed my Street Spirit style to improve readability. This helped a great deal and removed the two largest pain points: no comments and only one file.

Charites’ main features are:1

  1. letting you write in YAML instead of JSON,
  2. importing other YAML files into the main one,
  3. and the use of simple variables to allow common style constants to be set once.

I made use of the first two features, but I still found myself limited by them. I still faced issues where the project’s structure revolved around the styling language rather than what makes sense to a cartographer.

A good example of this was road layers. With Charites I had to have separate files for each layer, so I had separate files for each of the thirteen layers. With glug I was able to have one file for the twelve layers that drew the casings and fill, and one file for the road text layer. This kept related definitions in the same place, which makes everything more readable.

Expressions are essential for writing performant MapLibre GL styles. A simple expression example is filtering to only show labels of larger areas. A filter property such the one below does this.

{"filter":
[">=",
["get","way_area"],
['*', 750, 6126430366.1, ['^', 0.25, ["zoom"]]]
]}

This JSON doesn’t allow comments, so you have to hope it’s obvious from the text what is happening.[2]

Charites lets this be reformulated to YAML

filter:
  - '>='
  - [get, way_area]
  - ['*', 750, 6126430366.1, ['^', 0.25, [zoom]]] # Only show areas larger than 750 pixels at current zoom

It’s a bit better, but the comment shows a limitation of the language. Filtering by area is a very common task. It shouldn’t require a comment to explain the basic math. With glug this instead becomes

See full entry

OSM Accounts

same login:
https://wiki.openstreetmap.org/wiki/User:XXX
https://community.openstreetmap.org/u/XXX

different login:
https://www.openstreetmap.org/user/XXX

Integrations:

Services

  • Github
  • Umap
  • Facilmap
  • Overpass
  • Geojson.io

Desktop Applications

  • josm
  • gnome-maps

Android Applications

… TODO

Posted by anqixu on 30 August 2025 in English.

Hi everyone, this is the update on the final phase of my project in adding transliteration support to Nominatim’s search results! A quick refresher: this project focused on adding transliteration as an option to users who did not understand the local language of a name, in which an understandable tag was not available.

Background

For background, you can check the overview of the project and the midterm report down below:

The bulk of the work can be found in these pull requests:

Detailed Report of the Project

The detailed version of the report can be read here (version pending Github Commit).

What I did

  • Integrated transliteration into Nominatim so search results in unfamiliar scripts (e.g. 北京市) can be displayed in a user-readable form (e.g. Beijing).
  • Built a pluggable transliteration framework supporting Latin script via unidecode, with prototypes for Cantonese, Simplified Chinese, and Traditional Chinese.
  • Refactored the Locales class and results pipeline for clearer responsibilities, modularity, and maintainability.
  • Introduced a languages.yaml configuration file for language normalization and country-language mapping.
  • Implemented new logic for parsing browser language headers, including handling of ambiguous codes like zh.
  • Wrote extensive unit tests and updated GitHub workflows for optional dependencies.
  • Added documentation to explain the new localization and transliteration system.

Possible Next Steps

A summary of a few possible next steps are below:

  • Improve regionalization (e.g. Hong Kong and Macau, which Nominatim does not yet recognize as independent from China).
  • Refine fallback logic when multiple languages are present.
  • Extend the non-Latin transliteration framework with more language-specific implementations.
  • Expand testing for robustness and reliability.

See full entry

Posted by anqixu on 30 August 2025 in English.

Hi everyone, this is the update on the final phase of my project in adding transliteration support to Nominatim’s search results! A quick refresher: this project focused on adding transliteration as an option to users who did not understand the local language of a name, in which an understandable tag was not available.

Background

For background, you can check the overview of the project and the midterm report down below:

The bulk of the work can be found in these pull requests:

Detailed Report of the Project

The detailed version of the report can be read here (version pending Github Commit).

What I did

  • Integrated transliteration into Nominatim so search results in unfamiliar scripts (e.g. 北京市) can be displayed in a user-readable form (e.g. Beijing).
  • Built a pluggable transliteration framework supporting Latin script via unidecode, with prototypes for Cantonese, Simplified Chinese, and Traditional Chinese.
  • Refactored the Locales class and results pipeline for clearer responsibilities, modularity, and maintainability.
  • Introduced a languages.yaml configuration file for language normalization and country-language mapping.
  • Implemented new logic for parsing browser language headers, including handling of ambiguous codes like zh.
  • Wrote extensive unit tests and updated GitHub workflows for optional dependencies.
  • Added documentation to explain the new localization and transliteration system.

Possible Next Steps

A summary of a few possible next steps are below:

  • Improve regionalization (e.g. Hong Kong and Macau, which Nominatim does not yet recognize as independent from China).
  • Refine fallback logic when multiple languages are present.
  • Extend the non-Latin transliteration framework with more language-specific implementations.
  • Expand testing for robustness and reliability.

See full entry

Posted by Ayush Dhar Dubey on 29 August 2025 in English. Last updated on 3 September 2025.

Introduction

This report reflects on my journey during Google Summer of Code 2025, where I worked on the 3D Model Repository (3DMR): a platform that makes high-quality, CC-licensed 3D assets discoverable, reusable, and directly linkable to OpenStreetMap (OSM) features. At its core, 3DMR is about more than just hosting models: it’s about ensuring provenance, metadata quality, and renderer-friendly optimized delivery.


Initial Project Goals

Details of my original proposal can be found here: OSM: Modernize the 3D Model Repository.

In essence, the goal of the project under GSoC 2025 was to revive the 3DMR project by upgrading Django and related dependencies and standardizing on the widely accepted glTF/GLB format so renderers can load models predictably.


Work Done

My detailed progress notes are documented on the community thread. A high level summary of the major milestones can be highlighted as:

See full entry

Location: Manglaur, Roorkee, Haridwar, Uttarakhand, 247656, India

OSM exists now since more than 20 years. During this time, a tagging scheme evolved. It has undergone several changes since, is partly approved by the community, but never anything was forced. The freedom to invent new tags is considered a strength of OSM.

The OSM tagging scheme is clearly a result of swarm intelligence, which is sometimes said to be superior. I wondered how well this worked and thus started to analyse it. I’ll probably blog about this in a loose series of blog posts, starting today with looking at the highway tag, which according to the wiki identifies “any kind of road, street or path.”

In most cases, OSM elements are categorised in a hierarchical manner, with every step narrowing the meaning of the former step: highway=service, service=driveway, driveway=garage for example. A top level type=highway is missing and has to be derived implicitly.1

The values of a certain tag should ideally be choosen in a way, that there is a match for every object in the real world belonging to this category. And there should be only one match. So, a highway=service must not qualify for a highway=footway at the same time.

Restricting my study further, I choose to look only at values used for linear features, that is, way elements. There are about three dozen of common values in the database. They match the values listed at the wiki page.2

 

The Present: Criteria used for Highway Classification

When you are faced by a highway feature on the ground, which is not yet in the database, you have to decide about the value of the highway tag.

While it’s sometimes really easy to decide which value is correct, other situations lead to endless discussions in the forums. Such discussions are a hint that there is something wrong with these values. So I asked myself, by which criterion the values have been decided. As it turns out, there are severeal criteria in use, and they are mixed.

See full entry

Posted by aRGUM on 26 August 2025 in English.

I once walked past a small building, spotted that it’s got an address, and added it to OSM. Then I walked past it again, the building had its facade updated–and the address was nowhere to be seen.

We map a lot of ‘virtual’ objects in OpenStreetMap, boundaries and routes, but even addresses, the holy grail of survey, often end up virtual.

Take osm.org/way/1173366729: there isn’t an address on the building’s facade, yet 2GIS and Yandex.Maps have one.

Is there a private data agreement between the government and map services? 2GIS had some kind of city district polygons (elections related?) that someone even gave a review to asking what they were, and the Ministry of Information and/or of Digital Development already love giving out personal data of citizens to random software companies and banks in the name of ‘digitization’ (my bank’s app has everyone’s status with the police inspectorate and the psychoneurological dispensary and boldly let you see your own!), so it’s very likely.

P.S. The first building is on the cadastre, but there’s no building number, and the latter isn’t even on there at all :/ And don’t even ask whether one may copy from there.

Location: Солтүстік, Pavlodar, Pavlodar Region, 140006, Kazakhstan

I have noticed that the Apple mapping team, in their work within Kazakhstan, consistently mismapped various highway=* ways, for example:

  • Mistagging of courtyard highways from highway=service to highway=residential.[2]
  • Retagging of a highway=footway to a highway=residential, seemingly without any on-the-ground knowledge.[3][4]
  • Various other bizarre additions or edits to service highways (also often mistagged), that I sometimes corrected or rolled back.[5]

If the Apple team does not have familiarity with how the highway tags are applied in a country[6] (a country here with a small OpenStreetMap community at that), or the specifics of urban development that span half the continent, then they, simply, should not map, and definitely not make the state of the map ever so slightly worse.

P.S. If anyone wants to fix the scary copy-pasted magically north-aligned square houses that were mapped all across the country, which previously, in part, made me register an alternative account and instead map pointless foreign stuff you’re welcome :P

Location: Солтүстік, Pavlodar, Pavlodar Region, 140006, Kazakhstan

UMAP OF THE ATTENDEES CITIES - III WORKSHOP ON PARTICIPATORY MAPPING AND SOCIAL CARTOGRAPHY - MPCS 2025


– Portuguese below

We would like to thank the 462 participants from 151 cities in eight countries for taking part of our event!

Tomorrow, August 27th, 2025, at 2 p.m. (UTC-3), the program of lectures, mapping workshop with OpenStreetMap, mapathon, and the release of the book Case studies in collaborative and participatory mapping (book in portuguese).

Information and registration on the portal:

https://eventyay.com/e/b4950013

Follow the entire program 100% ONLINE and LIVE on the Virtual Institute for Sustainable Development channel - IVIDES.org on YouTube:

https://www.youtube.com/@IVIDES

Event’s Chairwoman: Dr. Raquel Dezidério Souto (IVIDES and UFRJ, Brazil)

 

See the full map - Veja o mapa em tela cheia

uMap MPCS 2025

Map Data (Dados do mapa) 2025 © OpenStreetMap Contributors. License.

 


 

See full entry

Location: Recreio dos Bandeirantes, Rio de Janeiro, Região Geográfica Imediata do Rio de Janeiro, Região Metropolitana do Rio de Janeiro, Região Geográfica Intermediária do Rio de Janeiro, Rio de Janeiro, Brazil
Posted by brinnnnnn on 26 August 2025 in English.

A few bike lanes were added in the part of town I live in (yay!) and I’d like to add them.

However, I’ve mostly been using these apps to map things: * everydoor * map complete website * go map !! (rarely)

I cant find any way in map compete to add bike lanes – they added on the street, so effectively making the space for the cars narrower. Is there any simple way of going about and adding these types of lanes?

Thanks!

I’d like to share a simple method I’ve devised to map unfamiliar areas outdoors. Suppose you’d like create a GPX track of a park under the following constraints:

  • GPS data is inherently inaccurate, so you’d like to walk each path exactly twice to improve accuracy.
  • You’d like to finish an the exact point you started.
  • You’re in the field, so you want to keep things simple and not use something too complicated.

Since the diary does not allow posting GIFs, the full post is in the community forum.

Posted by Archit Rathod on 25 August 2025 in English. Last updated on 31 August 2025.

🎉 GSoC 2025 Final: Temporary Road Closures Database and API

Google Summer of Code 2025 • OpenStreetMap Foundation • Archit Rathod

After 15 weeks of intensive development, I’m thrilled to announce the successful completion of my Google Summer of Code 2025 project: Temporary Road Closures Database and API for the OpenStreetMap Foundation! 🎯

🚀 Live Demo - Try It Now!

Frontend: https://closures.osm.ch/
Backend API: https://api.closures.osm.ch/
GitHub: https://github.com/Archit1706/temporary-road-closures
GSoC Project: summerofcode.withgoogle.com

🎯 Problem Solved

OSM provides excellent static map data, but temporary road closures (construction, accidents, events) aren’t captured quickly enough for navigation apps. This project creates an open platform where communities can report closures in real-time and navigation apps can calculate closure-aware routes.

What We Built

Complete Backend System

  • FastAPI + PostgreSQL + PostGIS - Production-ready API with 25+ endpoints
  • OpenLR integration - Universal location referencing for cross-platform compatibility
  • OAuth2 + JWT authentication - Secure user management with Google/GitHub login
  • Advanced spatial queries - Bounding box searches, proximity filtering, route analysis

Modern Frontend Application

  • Next.js 15 + TypeScript - Interactive web interface with mobile optimization
  • Leaflet maps - Real-time closure visualization with OpenStreetMap tiles
  • Multi-step reporting - Guided forms for accurate closure submission
  • Demo mode - Full functionality without registration for immediate testing

Closure-Aware Routing Innovation

  • Valhalla API integration - Calculate routes that avoid relevant closures
  • Transportation filtering - Car, bicycle, and pedestrian-specific closure relevance
  • Route comparison - Direct vs. closure-aware route analysis
  • Real-time optimization - Live route calculation considering current conditions

🌟 Key Innovations

OpenLR Integration

See full entry

Location: Near West Side, Chicago, West Chicago Township, Cook County, Illinois, United States
Posted by SomeoneElse on 23 August 2025 in English. Last updated on 31 August 2025.

A globe view centred on the Indian Ocean

tl;dr: slightly less than an hour.

This was prompted initially by a forum comment (I can’t actually remember exactly where or by whom) that creating maps based on OSM was for “developers” and not “normal people” (not in those exact words), and by the thread here. The “slightly less than an hour” actually includes setting up a development environment from scratch on a new PC.

On that new PC I’ve already installed a text editor and a web server (“apache2”).

cd ~/src
git clone https://github.com/SomeoneElseOSM/SomeoneElse-vector-web-display
git clone https://github.com/systemed/tilemaker

In the first of those repositories there are a selection of map styles, including one that uses the OSMF demo vector tiles. Let’s first test that that works:

See full entry

Location: 2,470, 17,690

(english translation by OpenAI/chatgpt)

RETEX: Tagging Choices for My Urban Recycling Trekking

Hesitations, discussions, collisions with other contributors, changes, hesitations… but convergence.

to be continued maybe:

  • journal entry (upcoming): Existential questions about my encounter with Panoramax

At first, tagging the operator since it’s the target of the trekking.

The operator is known here as GPSEO, or GPS\&O, or Grand Paris Seine and/& Oise… Which name to choose? Likewise, I encountered clothing containers from Le Relais or Emmaüs, and again, which names should be used?

my encounter with Wikidata

Thanks to the forum, I was guided towards Wikidata, which allows assigning a unique code to a large number of resources (companies, operators, municipalities, associations, widely known people, …).

Once the resource in question is given a Wikidata code, its Wikidata entry contains important data (name, website, Wikipedia reference, revenue, …) and thus allows all Wikipedia collaborative applications to access these elements in a common way. So it is enough to reference the operator’s Wikidata code in OSM tags to identify it uniquely and stably. From this code, it’s easy to retrieve the operator’s website, its Wikipedia reference, and other useful information without having to explicitly add them as OSM tags (which would require updating OSM every time the data changes).

A single concession seems necessary: I retrieved the operator’s official name from its Wikidata entry and added it as an OSM tag for readability.

And therefore:

operator=GRAND PARIS SEINE ET OISE operator:wikidata=Q19945071

Tags deliberately omitted because the information is evolving and can be found in the operator’s Wikidata article:

operator:wikipedia, operator:website, operator:short

And similarly:

operator=Emmaüs operator:wikidata=Q989437

operator=Le Relais operator:wikidata=Q16654240

ref or operator:ref

See full entry

Posted by WilburSunflower on 21 August 2025 in English.

Greetings whoever is reading this, including my future self who may be the only audience.

I was invited earlier this year to take part in an exhibit called [“Compass Roses”] (https://www.compassroses.art/), which will be on view at Opalka Gallery in Albany, NY this Fall.

“Compass Roses: Maps by Artists is a national artwork co-curated by Nadine Wasserman and Renee Piechocki. The project offers a selection of maps created by visual, literary, and performing artists. “

I chose to make a map of Gun Violence Memorials in Albany. I was inspired by a memorial called Chyna’s World, a mural in memory of an 18-year old high school senior named Chyna Forney. Chyna was killed in crossfire in an incident when her boyfriend fired over 30 rounds at another man. The mural is painted at the location where the incident took place. After seeing this mural, I wondered if there were others like it.

I have been aware of the problem of gun violence for this entire century. I have perceived it from three aspects that touch but are distinct: school shootings, the eclipse of streetfighting, and police murder. I might say more about those three in this diary over the next few months, but for now I will just say that these have been buried the past five years by the sheer numbers of tragic gun deaths in this country, in my city, in my neighborhood, on my street. There were 10 shootings on my street when the world broke down during New York Pause, from April 27 2020 a few weeks into the pandemic through December 19, 2021. The nadir was the late night murder of 15-year old Destiny Greene, on a magical little street called Wilbur. I remembered the temporary monument that Destiny’s family had set up on Wilbur Street, and the attempts by some neighbors to set up a permanent memorial for shooting victims.

See full entry

Location: Mansion District, City of Albany, Albany County, New York, 12223, United States
Posted by pnorman on 20 August 2025 in English.

Vector Tile styles require icons are served in a sprite sheet. This contains all of the icons in one file. Years ago there were a few options for these, none of them great. These days, there are three common options: spreet, @basemaps/sprites, and sprite-one. The first is written in Rust while the other two are written in Javascript.

All have the same basic functionality of turning a folder of SVGs into a json+png spritesheet, and doing so at multiple resolutions. Spreet has the additional option of de-duplicating icons. If two icons are identical it will only put one copy in the PNG and reference the same image twice.

I benchmarked all three options with two sets of sprites: all the SVGs from OpenStreetMap Carto, and the OpenStreetMap Americana icons. The former is 973 icons and the latter is 248 icons. These are larger than a typical set of icons but are a good test.

  Test spreet sprite-one @basemaps/sprites
osm-carto SVGs @1x pixels 4194304 4078074 8339456
osm-carto SVGs @1x bytes 513159 763531 837792
osm-carto SVGs @1x bytes after oxipng 474750 649894 706845
osm-carto SVGs @2x bytes 1442588 2176457 2411489
osm-carto SVGs @2x bytes after oxipng 1325707 1896784 2088729
osm-americana @1x pixels 128265 122400 151760
osm-americana @1x bytes 75749 91870 92066
osm-americana @1x bytes after oxipng 75497 84986 85828
osm-americana @2x bytes 136177 213876 210650
osm-americana @2x bytes after oxipng 132462 197687 194950

See full entry

I’m importing boundaries in Croatia, and I’m almost done. So I wanted to describe my process so that someone else maybe doesn’t have to rediscover this process. Maybe there is a better one, but I didn’t find it.

Croatia in OpenStreetMap had admin_level=7 borders imported, but the borders were not precise. So my job was to import admin_level=8 into these. I had the data in .osm format, and a license that is compatible. I wanted to keep the history of the old boundaries, so deleting everything and just copying inside wasn’t a choice.

First we need JOSM, and some experience with it. We turn on the Expert Mode in View. We need to install the plugin “utilsplugin2”. Then we go to Map Paint Styles in Preferences, and turn on the “Admin Boundaries” style.

So the process goes like this. In JOSM I open the .osm file with all the admin_level=8 boundaries. Then I download the area where I intend to work, but I use “Download from Overpass API” feature. In it I add the next Overpass query:

[out:xml][timeout:90][bbox:{{bbox}}];
(
relation["boundary"="administrative"];
)-> .adminrelations;
(  .adminrelations;
  way(r);
) -> .ways;
(
  node(w.ways);
)-> .nodes;

way(bn.nodes);
(._;<;); (._;>;);
out meta;

What this query does is it downloads all the boundary relations, and all the ways that are connected to them.

1. Disconnecting

Next step I did was to disconnect all the roads, forests, rivers and anything that is not a boundary from the existing boundaries. I upload that, and later download a cleaner situation.

2. Splitting

See full entry