<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>OpenStreetMap &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/openstreetmap/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Fri, 20 Feb 2026 10:41:43 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>OpenStreetMap &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Adding OpenStreetMap login to Auth0]]></title>
		<link>https://shkspr.mobi/blog/2026/02/adding-openstreetmap-login-to-auth0/</link>
					<comments>https://shkspr.mobi/blog/2026/02/adding-openstreetmap-login-to-auth0/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 24 Feb 2026 12:34:21 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Auth0]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=67593</guid>

					<description><![CDATA[So you want to add OSM as an OAuth provider to Auth0? Here&#039;s a tip - you do not want to create a custom social connection!  Instead, you need to create an &#34;OpenID Connect&#34; provider. Here&#039;s how.  OpenSteetMap  As per the OAuth documentation you will need to:   Register a new app at https://www.openstreetmap.org/oauth2/applications/ Give it a name that users will recognise Give it a redirect of…]]></description>
										<content:encoded><![CDATA[<p>So you want to add OSM as an OAuth provider to Auth0? Here's a tip - you do <em>not</em> want to create a custom social connection!</p>

<p>Instead, you need to create an "OpenID Connect" provider. Here's how.</p>

<h2 id="opensteetmap"><a href="https://shkspr.mobi/blog/2026/02/adding-openstreetmap-login-to-auth0/#opensteetmap">OpenSteetMap</a></h2>

<p>As per <a href="https://wiki.openstreetmap.org/wiki/OAuth#Using_OpenStreetMap_as_identity_provider">the OAuth documentation</a> you will need to:</p>

<ul>
<li>Register a new app at <a href="https://www.openstreetmap.org/oauth2/applications/">https://www.openstreetmap.org/oauth2/applications/</a></li>
<li>Give it a name that users will recognise</li>
<li>Give it a redirect of <code>https://Your Auth0 Tenant.eu.auth0.com/login/callback</code></li>
<li>Tick the box for "Sign in using OpenStreetMap"</li>
</ul>

<p>Once created, you will need to securely save your Client ID and Client Secret.</p>

<h2 id="auth0"><a href="https://shkspr.mobi/blog/2026/02/adding-openstreetmap-login-to-auth0/#auth0">Auth0</a></h2>

<p>These options change frequently, so use this guide with care.</p>

<ul>
<li>Once you have logged in to your Auth0 Tennant, go to Authentication → Enterprise → OpenID Connect → Create Connection</li>
<li>Provide the new connection with the Client ID and Client Secret</li>
<li>Set the "scope" to be <code>openid</code></li>
<li>Set the OpenID Connect Discovery URL to be <code>https://www.openstreetmap.org/.well-known/openid-configuration</code></li>
<li>In the "Login Experience" tick the box for "Display connection as a button"</li>
<li>Set the favicon to be <code>https://blog.openstreetmap.org/wp-content/uploads/2022/07/osm-favicon.png</code> or other suitable graphic</li>
</ul>

<h2 id="next-steps"><a href="https://shkspr.mobi/blog/2026/02/adding-openstreetmap-login-to-auth0/#next-steps">Next Steps</a></h2>

<p>We're not quite done, sadly.</p>

<p>The details which OSM sends back to Auth0 are limited, so Auth0 is missing a few bits:</p>

<pre><code class="language-json">{
    "created_at": "2026-02-29T12:34:56.772Z",
    "identities": [
        {
            "user_id": "openstreetmap-openid|123456",
            "provider": "oidc",
            "connection": "openstreetmap-openid",
            "isSocial": false
        }
    ],
    "name": "",
    "nickname": "",
    "picture": "https://cdn.auth0.com/avatars/default.png",
    "preferred_username": "Terence Eden",
    "updated_at": "2026-02-04T12:01:33.772Z",
    "user_id": "oidc|openstreetmap-openid|123456",
    "last_ip": "12.34.56.78",
    "last_login": "2026-02-29T12:34:56.772Z",
    "logins_count": 1,
    "blocked_for": [],
    "guardian_authenticators": [],
    "passkeys": []
}
</code></pre>

<p>Annoyingly, Auth0 doesn't set a name or nickname - so you'll need to manually get the <code>preferred_username</code>, or create a "User Map":</p>

<pre><code class="language-json">{
  "mapping_mode": "use_map",
  "attributes": {
    "nickname": "${context.tokenset.preferred_username}",
    "name":     "${context.tokenset.preferred_username}"
  }
}
</code></pre>

<p>There's also no avatar image - only the default one.</p>

<h3 id="getting-the-avatar-image"><a href="https://shkspr.mobi/blog/2026/02/adding-openstreetmap-login-to-auth0/#getting-the-avatar-image">Getting the Avatar Image</a></h3>

<p>The <a href="https://wiki.openstreetmap.org/wiki/API_v0.6">OSM API</a> has a method for <a href="https://wiki.openstreetmap.org/wiki/API_v0.6#Methods_for_user_data">getting user data</a>.</p>

<p>For example, here's all my public data: <a href="https://api.openstreetmap.org/api/0.6/user/98672.json">https://api.openstreetmap.org/api/0.6/user/98672.json</a> - thankfully no authorisation required!</p>

<pre><code class="language-json">{
  "user": {
    "id": 98672,
    "display_name": "Terence Eden",
    "img": {
      "href": "https://www.gravatar.com/avatar/52cb49a66755f31abf4df9a6549f0f9c.jpg?s=100&amp;d=https%3A%2F%2Fapi.openstreetmap.org%2Fassets%2Favatar_large-54d681ddaf47c4181b05dbfae378dc0201b393bbad3ff0e68143c3d5f3880ace.png"
    }
  }
}
</code></pre>

<p>Alternatively, you can <a href="https://github.com/microlinkhq/unavatar/issues/488">use the Unavatar service</a> to get the image indirectly.</p>

<p>I hope that's helpful to someone!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=67593&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2026/02/adding-openstreetmap-login-to-auth0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[OpenBenches 💖 OpenStreetMap]]></title>
		<link>https://shkspr.mobi/blog/2025/11/openbenches-%f0%9f%92%96-openstreetmap/</link>
					<comments>https://shkspr.mobi/blog/2025/11/openbenches-%f0%9f%92%96-openstreetmap/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 17 Nov 2025 12:34:41 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[OpenBenches]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=63630</guid>

					<description><![CDATA[When Liz and I created the OpenBenches website, it was just designed to be a fun way for people to record memorial benches.  Since then things have got out of hand and we now have over thirty-nine thousand benches recorded!  Our plan was never to compete with something like OpenStreetMap. The OSM project is vast, complex, and brilliant - we are small, simple, and differently brilliant. But, over…]]></description>
										<content:encoded><![CDATA[<p>When Liz and I created <a href="https://openbenches.org/">the OpenBenches website</a>, it was just designed to be a fun way for people to record memorial benches.  Since then things have got out of hand and we now have over thirty-nine <em>thousand</em> benches recorded!</p>

<p>Our plan was never to compete with something like OpenStreetMap. The OSM project is vast, complex, and brilliant - we are small, simple, and <em>differently</em> brilliant. But, over the years, people have repeatedly asked if there's any way to combine the two data sets.</p>

<p>This has proved logistically complex for several reasons.</p>

<ol>
<li>Our users aren't experienced mappers.

<ul>
<li>Most of our entries are uploaded with fairly fuzzy GPS co-ordinates. Mobile phones aren't always the best at accurate locations and, besides, people tend to stand away from the bench when taking its photo. So our data isn't quite at the level of quality rightly demanded by OSM.</li>
</ul></li>
<li>OSM didn't have a tag specifically for memorial benches.

<ul>
<li>We started out site in 2017. OSM <a href="https://wiki.openstreetmap.org/wiki/Tag:memorial%3Dbench">added the <code>Tag:memorial=bench</code> in 2021</a>. Up until then, there wasn't a great way to record that a bench was a memorial.</li>
</ul></li>
<li>Data licencing is complicated.

<ul>
<li>We chose the Creative Commons Attribution ShareAlike licence - it seemed like a good idea at the time! OSM use ODbL which is <a href="https://blog.openstreetmap.org/2017/03/17/use-of-cc-by-data/">subtly incompatible</a>. As such, OSM volunteers asked us to sign a waiver so they could use the data - which we happily did.</li>
</ul></li>
<li>Adding or editing data on OSM can be complicated.

<ul>
<li>OpenBenches is designed to be an upload-and-forget process. It doesn't matter much to us if a bench is recorded a dozen metres away from its true location. But that isn't the way OSM works. We didn't want to bulk upload data which was inaccurate, incomplete, or inappropriate. Luckily, there are now tools to help with that!</li>
</ul></li>
</ol>

<p>Things have been working away in the background. Some people have <a href="https://wiki.openstreetmap.org/wiki/Key:openbenches:id?uselang=en-GB">manually added <code>Key:openbenches:id</code> to appropriate benches</a>, and others have edited our database to make the locations closer to reality.</p>

<p>And now, thanks to the sterling work of the brilliant <a href="https://pietervdvn.me/">Pieter Vander Vennet</a> we're moving to our next phase of increased collaboration!</p>

<p>Firstly, there are about 1,060 benches on OpenStreetMap which have an OpenBenches ID. I've taken all those OSM IDs and put them into our database. Which means that the OpenBenches website can display a button like this:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/10/OpenBenches-website-with-an-OSM-link.webp" alt="OpenBenches website with an OSM link." width="1434" height="472" class="aligncenter size-full wp-image-63633">

<p>One click and you're looking at OSM - ready to investigate, edit, or admire.</p>

<p>But what about the <em>other</em> 38,000 benches? Well, that's where <a href="https://mapcomplete.org/">MapComplete</a> comes in.  MapComplete is sort of like Pokémon Go for maps. As you wander this Earth, you can complete little quests to help improve OpenStreetMap. For example, on the "Pubs" quest, you can add details of all the pubs you visit.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/10/MapComplete-screenshot-with-various-questions-about-a-pub.webp" alt="MapComplete screenshot with various questions about a pub." width="640" height="898" class="aligncenter size-full wp-image-63634">

<p>With the "Bench" quest, it is a little different.  If an OpenBench is sufficiently nearby an OSM bench, you'll get the option to link the two with a couple of clicks.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/10/MapComplete-screenshot-showing-two-benches-being-linked.webp" alt="MapComplete screenshot showing two benches being linked." width="1214" height="816" class="aligncenter size-full wp-image-63635">

<p>But there are <em>loads</em> of benches we have discovered which aren't in the OSM database. In which case, you can add a new bench to OSM using the data from OpenBenches!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/10/MapRoulette-screenshot-adding-a-new-bench.webp" alt="MapRoulette screenshot adding a new bench." width="640" height="635" class="aligncenter size-full wp-image-63636">

<p>This has been <a href="https://community.openstreetmap.org/t/guided-mapping-import-of-openbenches-org/97455">a couple of years in the making</a> - but it looks like most of the kinks are now sorted out.  I'm sure there will be a few early problems, and no doubt a bit of late-night bug fixing, but I hope that this is the start of something long-lasting.  The joy of decentralised sites using open data is that we can all build on each others' work in a spirit of fun and exploration.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=63630&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/11/openbenches-%f0%9f%92%96-openstreetmap/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Minimum Viable Clustered-Marker Globe using OpenFreeMap and MapLibre GL]]></title>
		<link>https://shkspr.mobi/blog/2025/01/minimum-viable-clustered-marker-globe-using-openfreemap-and-maplibre-gl/</link>
					<comments>https://shkspr.mobi/blog/2025/01/minimum-viable-clustered-marker-globe-using-openfreemap-and-maplibre-gl/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 14 Jan 2025 12:34:14 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[OpenBenches]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=55240</guid>

					<description><![CDATA[I love OpenFreeMap it is a quick, easy, and free way to add beautiful maps to your Open Source projects.  With the latest release of MapLibre-GL I wanted to see if there was an easy way to use both to make an interactive globe with clustered markers.  Spoiler alert: yes!  Basic Globe  Here&#039;s a basic example which I&#039;ve trimmed down from this example.    When you load the below code, you&#039;ll get a…]]></description>
										<content:encoded><![CDATA[<p>I love <a href="https://openfreemap.org/">OpenFreeMap</a> it is a quick, easy, and <em>free</em> way to add beautiful maps to your Open Source projects.  With the latest release of <a href="https://maplibre.org/maplibre-gl-js/docs/">MapLibre-GL</a> I wanted to see if there was an easy way to use both to make an interactive globe with clustered markers.</p>

<p>Spoiler alert: yes!</p>

<h2 id="basic-globe"><a href="https://shkspr.mobi/blog/2025/01/minimum-viable-clustered-marker-globe-using-openfreemap-and-maplibre-gl/#basic-globe">Basic Globe</a></h2>

<p>Here's a basic example which I've trimmed down from <a href="https://maplibre.org/maplibre-gl-js/docs/examples/globe-vector-tiles/">this example</a>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/01/globe.webp" alt="A globe of the planet Earth with labels for countries." width="720" height="714" class="aligncenter size-full wp-image-55241">

<p>When you load the below code, you'll get a globe which you can spin and zoom. Nifty!</p>

<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;Globe Projection using OpenFreeMap&lt;/title&gt;
        &lt;meta charset="utf-8"&gt;
        &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
        &lt;link rel="stylesheet" href="https://unpkg.com/maplibre-gl@5.0.0/dist/maplibre-gl.css"&gt;
        &lt;script src="https://unpkg.com/maplibre-gl@5.0.0/dist/maplibre-gl.js"&gt;&lt;/script&gt;
        &lt;style&gt;
            body { margin: 0;padding: 0; }
            html, body, #map { height: 100%; }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div id="map"&gt;&lt;/div&gt;
        &lt;script type="module"&gt;
            const map = new maplibregl.Map({
                container: "map",
                style: "https://tiles.openfreemap.org/styles/liberty",
                zoom: 2,
                center: [0.123, 51.2345],
                pitch: 0,
                canvasContextAttributes: { antialias: true }
            });

            map.on('style.load', () =&gt; {
                map.setProjection({
                    type: 'globe',
                });
            });
        &lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;
</code></pre>

<h2 id="adding-markers"><a href="https://shkspr.mobi/blog/2025/01/minimum-viable-clustered-marker-globe-using-openfreemap-and-maplibre-gl/#adding-markers">Adding Markers</a></h2>

<p>In most respects, this acts like a normal MapLibre GL map.  To add a marker, add this code:</p>

<pre><code class="language-js">const marker = new maplibregl.Marker()
    .setLngLat([12.345, 54.321])
    .addTo(map);
</code></pre>

<h2 id="geojson-clusters"><a href="https://shkspr.mobi/blog/2025/01/minimum-viable-clustered-marker-globe-using-openfreemap-and-maplibre-gl/#geojson-clusters">GeoJSON Clusters</a></h2>

<p>Now for the big one!  On <a href="https://openbenches.org/">OpenBenches</a> we display markers and <em>clusters</em> of markers. On a flat map, it looks like this:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/01/ob-clusters.webp" alt="Map of Europe. There are big circles on it saying how many markers are inside." width="655" height="655" class="aligncenter size-full wp-image-55243">

<p>We want to turn it into this beauty:</p>

<p></p><div style="width: 620px;" class="wp-video"><video class="wp-video-shortcode" id="video-55240-2" width="620" height="687" preload="metadata" controls="controls"><source type="video/mp4" src="https://shkspr.mobi/blog/wp-content/uploads/2025/01/b169e7bb1cfc045f.mp4?_=2"><a href="https://shkspr.mobi/blog/wp-content/uploads/2025/01/b169e7bb1cfc045f.mp4">https://shkspr.mobi/blog/wp-content/uploads/2025/01/b169e7bb1cfc045f.mp4</a></video></div><p></p>

<p>Here's the code, <a href="https://maplibre.org/maplibre-gl-js/docs/examples/cluster/">adapted from the tutorial</a>:</p>

<pre><code class="language-js">const map = new maplibregl.Map({
    container: "map",
    style: "https://tiles.openfreemap.org/styles/liberty",
    zoom: 2,
    center: [0.123, 51.2345],
    pitch: 0,
    canvasContextAttributes: { antialias: true }
});

map.on('style.load', () =&gt; {
    map.setProjection({
        type: 'globe',
    });
});

//  Load GeoJSON
async function load_GeoJSON() {
    const response = await fetch( "geo.json" )
    var benches_json = await response.json();
    return benches_json;
}

//  Asynchronous function to add custom layers and sources
async function addCustomLayersAndSources() {
    //  Get the data
    var geo_data = await load_GeoJSON();
    //  Load the GeoJSON
    if (!map.getSource('geo_data')) {
        map.addSource('geo_data', {
            type: 'geojson',
            data: geo_data,
            cluster: true,
            clusterMaxZoom: 17, // Max zoom to cluster points on
            clusterRadius: 50 // Radius of each cluster when clustering points (defaults to 50)
        });
    }

    //  Custom point marker
    if ( map.listImages().includes("marker-icon") == false ) {
        var image = await map.loadImage('/marker.png');
        map.addImage('marker-icon', image.data);
    }

    //  Add the clusters
    if (!map.getLayer('clusters')) {
        map.addLayer({
            id: 'clusters',
            type: 'circle',
            source: 'geo_data',
            filter: ['has', 'point_count'],
            paint: {
                // Use step expressions (https://maplibre.org/maplibre-style-spec/expressions/#step)
                // with three steps to implement three types of circles:
                //   * Blue, 20px circles when point count is less than 100
                //   * Yellow, 30px circles when point count is between 100 and 750
                //   * Pink, 40px circles when point count is greater than or equal to 750
                'circle-color': [
                    'step', ['get', 'point_count'],
                        '#51bbd655',
                    100, '#f1f07555',
                    750, '#f28cb155'
                ],
                'circle-radius': [
                    'step', ['get', 'point_count'],
                        20,
                    100, 30,
                    750, 40
                ],
                'circle-stroke-width': [
                    'step', ['get', 'point_count'],
                        1,
                    100, 1,
                    750, 1
                ],
                'circle-stroke-color': [
                    'step', ['get', 'point_count'],
                        '#000',
                    100, '#000',
                    750, '#000'
                ],
            }
        });

        //  Show number of markers in each cluster
        map.addLayer({
            id: 'cluster-count',
            type: 'symbol',
            source: 'geo_data',
            filter: ['has', 'point_count'],
            layout: {
                'text-field': '{point_count_abbreviated}',
                'text-font': ['Noto Sans Regular'],
                'text-size': 25
            }
        });

        //  Show individual markers
        map.addLayer({
            id: 'unclustered-point',
            source: 'geo_data',
            filter: ['!', ['has', 'point_count']],
            type: 'symbol',
            layout: {
                "icon-overlap": "always",
                'icon-image': 'marker-icon',  // Use the PNG image
                'icon-size': .1              // Adjust size if necessary
            }
        });
    }
}

//  Start by drawing the map
map.on('load', async () =&gt; {
    await addCustomLayersAndSources();
});
</code></pre>

<p>Obviously, there's a lot more you can do - but I hope this shows just how quickly you can get a clustermap working on a globe.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=55240&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/01/minimum-viable-clustered-marker-globe-using-openfreemap-and-maplibre-gl/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		<enclosure url="https://shkspr.mobi/blog/wp-content/uploads/2025/01/b169e7bb1cfc045f.mp4" length="4330564" type="video/mp4" />

			</item>
		<item>
		<title><![CDATA[1,000 edits on OpenStreetMap]]></title>
		<link>https://shkspr.mobi/blog/2024/05/1000-edits-on-openstreetmap/</link>
					<comments>https://shkspr.mobi/blog/2024/05/1000-edits-on-openstreetmap/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 16 May 2024 11:34:36 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[ReDeCentralize]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=50552</guid>

					<description><![CDATA[Today was quite the accidental milestone! I&#039;ve edited OpenStreetMap over a thousand times!    For those who don&#039;t know, OSM (OpenStreetMap) is like the Wikipedia of maps. Anyone can go in and edit the map. This isn&#039;t a corporate-controlled space where your local knowledge is irrelevant compared to the desire for profit. You can literally go and correct any mistakes that you find, add recently…]]></description>
										<content:encoded><![CDATA[<p>Today was quite the accidental milestone! I've edited OpenStreetMap over a thousand times!</p>

<p><a href="https://www.openstreetmap.org/user/Terence%20Eden"><img src="https://shkspr.mobi/blog/wp-content/uploads/2024/05/OSM-edits.png" alt="My OSM profile showing 1,000 edits." width="504" height="390" class="aligncenter size-full wp-image-50586"></a></p>

<p>For those who don't know, OSM (OpenStreetMap) is like the Wikipedia of maps. Anyone can go in and edit the map. This isn't a corporate-controlled space where your local knowledge is irrelevant compared to the desire for profit. You can literally go and correct any mistakes that you find, add recently built roads, remove abandoned buildings, and provide useful local information.</p>

<p>Editing the full map is... complicated. For simple edits like changing the times of a postal collection, there are simple forms you can fill in.  There's also an aerial view so you can drag and drop misplaced locations. But for anything more complicated than that, you'll need to spend some time understanding the interface.  There's a friendly community who are happy to check or correct your submissions.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/05/OSM.webp" alt="Screenshot of the OSM interface." width="1080" height="658" class="aligncenter size-full wp-image-50553">

<p>I'll be honest, I don't use the web editor much. Instead, I use <a href="https://streetcomplete.app/">the Android app StreetComplete</a>. It's like an endless stream of sidequests. As you travel through the world, it will ask if a shop is still open, or if the highway is lit, or how many steps there are on a bridge, or whether a playground is suitable for all children, or if restaurants serve vegetarian food, or if a bus-stop has a bench, or... the list is almost endless!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/05/Quests.png" alt="Map showing lots of quest markers." width="504" height="518" class="aligncenter size-full wp-image-50585">

<p>I use it when I'm walking around somewhere new, or on holiday, or waiting for a bus. I used it so much that, for a short while, <a href="https://shkspr.mobi/blog/2023/01/how-i-became-the-1-mapper-in-new-zealand/">I became the #1 mapper in New Zealand</a>!</p>

<p>So get stuck in! Make mapping more equitable and more accurate.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=50552&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/05/1000-edits-on-openstreetmap/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Rebuilding FourSquare for ActivityPub using OpenStreetMap]]></title>
		<link>https://shkspr.mobi/blog/2024/01/rebuilding-foursquare-for-activitypub-using-openstreetmap/</link>
					<comments>https://shkspr.mobi/blog/2024/01/rebuilding-foursquare-for-activitypub-using-openstreetmap/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 27 Jan 2024 12:34:55 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[ActivityPub]]></category>
		<category><![CDATA[fediverse]]></category>
		<category><![CDATA[FourSquare]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=49432</guid>

					<description><![CDATA[I used to like the original FourSquare. The &#34;mayor&#34; stuff was a bit silly, and my friends never left that many reviews, but I loved being able to signal to my friends &#34;I am at this cool museum&#34; or &#34;We&#039;re at this pub if you want to meet&#34; or &#34;Spending the day at the park&#34;.  So, is there a way to recreate that early Web 2.0 experience with open data and ActivityPub? Let&#039;s find out!  This quest is…]]></description>
										<content:encoded><![CDATA[<p>I used to like the original FourSquare. The "mayor" stuff was a bit silly, and my friends never left that many reviews, but I loved being able to signal to my friends "I am at this cool museum" or "We're at this pub if you want to meet" or "Spending the day at the park".</p>

<p>So, is there a way to recreate that early Web 2.0 experience with open data and ActivityPub? Let's find out!</p>

<p>This quest is divided into two parts.</p>

<ol>
<li>Get nearby "Points of Interest" (POI) from OpenStreetMap.</li>
<li>Share a location on the Fediverse.</li>
</ol>

<h2 id="openstreetmap-api"><a href="https://shkspr.mobi/blog/2024/01/rebuilding-foursquare-for-activitypub-using-openstreetmap/#openstreetmap-api">OpenStreetMap API</a></h2>

<p>OpenStreetMap is the Wikipedia of maps. It is a freely available resource which anyone can edit (if they're skilled enough).</p>

<p>It also comes with a pretty decent API for querying things.  For example, <a href="https://overpass-turbo.eu/s/1GaE"><code>nw["amenity"]({{bbox}});</code> finds all "amenities" near a specific location</a>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/01/amenities-fs8.png" alt="Map of a part of London. Some parts are highlighted." width="826" height="504" class="aligncenter size-full wp-image-49441">

<p>As you can see, it has highlighted <em>some</em> useful areas - a pharmacy and a pub. But it has <em>ignored</em> other useful locations - the train station and the park. It has also included some things that we may not want - bike parking and a taxi rank.</p>

<p>What API call is needed to get <em>useful</em> locations of of OverPass?</p>

<p>It's possible to specify the <em>type</em> of thing to find using <code>nw["amenity"="restaurant"];</code> - but adding every single type of thing would quickly end up with a very large query containing hundreds of types.</p>

<p>It is also possible to <em>exclude</em> specific types of places. This retrieves all amenities except for fast food joints:</p>

<pre><code class="language-_">nw["amenity"]({{bbox}});
-
nw["amenity"="fast_food"]({{bbox}});
</code></pre>

<p>Again, that would be complex.</p>

<p>Perhaps one solution is just to return <em>everything</em> and let the user decide if they want to check in to a telephone kiosk or a fire hydrant?  That's a bit user-hostile.</p>

<p>Instead, <a href="https://overpass-turbo.eu/s/1GaP">this query returns everything which has a name</a> <code>nw["name"]({{bbox}});</code></p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/01/names-fs8.png" alt="Map of London with several bits highlighted." width="826" height="504" class="aligncenter size-full wp-image-49442">

<p>That cuts out any unnamed things - like park benches and car-sharing spots. But it does add named roads and train lines.</p>

<p>It is possible to <a href="https://osm-queries.ldodds.com/tutorial/05-nodes-combined-filter.osm.html">use filters to exclude results from OverPass</a>. The best that I can come up with is: <a href="https://overpass-turbo.eu/s/1GaR"><code>nw["name"][!"highway"][!"railway"][!"waterway"][!"power"]({{bbox}});</code></a></p>

<p>That gets everything which has a name, but isn't a highway or railway or waterway or powerline. It isn't perfect - but it will do!</p>

<p>This is the query which will retrieve the 25 nearest things within 100 metres of a specific latitude and longitude. It includes the name and any other tags, the location, and the OSM ID.</p>

<p><a href="https://overpass-api.de/api/interpreter?data=[out:json];nw%5B%22name%22%5D%5B%21%22highway%22%5D%5B%21%22railway%22%5D%5B%21%22waterway%22%5D%5B%21%22power%22%5D(around:100,51.5202,-0.1040);out%20center%20qt%2025;"><code>overpass-api.de/api/interpreter?data=[out:json];nw["name"][!"highway"][!"railway"][!"waterway"][!"power"](around:100,51.5202,-0.1040);out center qt 25;</code></a></p>

<h2 id="activitypub"><a href="https://shkspr.mobi/blog/2024/01/rebuilding-foursquare-for-activitypub-using-openstreetmap/#activitypub">ActivityPub</a></h2>

<p>There's good news and bad news here. Firstly, ActivityStreams (which are subscribed to in ActivityPub) <a href="https://www.w3.org/TR/activitystreams-vocabulary/#places">supports the concept of "Place"</a> and <a href="https://www.w3.org/ns/activitystreams#location">"Location"</a>.</p>

<p>Once the user has a latitude and longitude, the can share it - along with a message, photo, or anything else.</p>

<p>Something like:</p>

<pre><code class="language-json">{
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Note",
    "content": "Here in NYC! &lt;a href=\"https://www.openstreetmap.org/way/958999496\"&gt;John Lennon's Imagine Mosaic&lt;/a&gt;.",
    "attachment": [
        {
            "type": "Image",
            "mediaType": "image\/jpeg",
            "url": "https:\/\/fastly.4sqi.net\/img\/general\/590x786\/56367_9pxuZJD7d1hgPdaMFcFq1pipvTTMynBJsYcpHH-b8mU.jpg",
            "name": "A photo of a mosaic which says 'Imagine'."
        }
    ],
    "location": {
        "name": "John Lennon's Imagine",
        "type": "Place",
        "longitude": 40.77563,
        "latitude": -73.97474
    }
}
</code></pre>

<p>For example, here's <a href="https://pixelfed.social/p/dansup/75783646421848064?fs=1">a PixelFed post with an attached location</a> - and this is the <a href="https://pixelfed.social/p/dansup/75783646421848064.json">JSON representation</a>. That status can be reposted into other social networks.</p>

<p>It is worth noting that Mastodon doesn't (natively) support location - if you <a href="https://mastodon.social/@Edent/100581317169164202">view my repost of that PixelFed post</a> you'll see there's no location metadata attached. That's OK! It just means that the status needs to include human-readable data.</p>

<p>Similarly, Mastodon doesn't support the <a href="https://www.w3.org/TR/activitystreams-vocabulary/#dfn-arrive"><code>arrive</code></a> vocabulary. So this will be limited to a message with a location attached.</p>

<p><a href="https://benjojo.co.uk/u/benjojo/h/5j4yjq8JbrKY6Vp79K">Other ActivityPub services <em>do</em> support location</a>.</p>

<h2 id="putting-it-all-together"><a href="https://shkspr.mobi/blog/2024/01/rebuilding-foursquare-for-activitypub-using-openstreetmap/#putting-it-all-together">Putting it all together</a></h2>

<p>Well… that's a job for next week. Probably!</p>

<ul>
<li>Building a web site which gets the user's location is easy.</li>
<li>Getting the data from OverPass should be straightforward.</li>
<li>Creating an ActivityPub server which can post geotagged notes into the Fediverse might be a little beyond my skillset!  Some testing with <a href="https://tinysubversions.com/notes/activitypub-tool/">Darius Kazemi's AP Glitch</a> suggests this should work.</li>
</ul>

<p>If you'd like to help, please leave a comment.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=49432&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/01/rebuilding-foursquare-for-activitypub-using-openstreetmap/feed/</wfw:commentRss>
			<slash:comments>30</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How I became the #1 mapper in New Zealand]]></title>
		<link>https://shkspr.mobi/blog/2023/01/how-i-became-the-1-mapper-in-new-zealand/</link>
					<comments>https://shkspr.mobi/blog/2023/01/how-i-became-the-1-mapper-in-new-zealand/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 24 Jan 2023 12:34:59 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=44499</guid>

					<description><![CDATA[I hate leaderboards. I think competition tends to corrupt the incentives people have to contribute to a goal.  Yet, at the same time, I was delighted to see that I was the top mapper in the whole of Aotearoa New Zealand.  For one specific week in December.    They say golf is a good walk spoiled. StreetComplete is a good walk enhanced with sidequests.  As you wander around, it asks you little…]]></description>
										<content:encoded><![CDATA[<p>I hate leaderboards. I think competition tends to corrupt the incentives people have to contribute to a goal.</p>

<p>Yet, at the same time, I was <em>delighted</em> to see that I was the top mapper in the whole of Aotearoa New Zealand.</p>

<p>For one specific week in December.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/01/NZ-Rank-fs8.png" alt="Screenshot showing that in the last 7 days I was the number 1 mapper in New Zealand the 42nd in the world." width="540" height="518" class="aligncenter size-full wp-image-44604">

<p>They say golf is a good walk spoiled. <a href="https://streetcomplete.app/">StreetComplete</a> is a good walk enhanced with sidequests.  As you wander around, it asks you little questions about your environment. Is that post-box still there? Does this restaurant serve vegetarian food? Can you sit down at this bus stop? What's the surface of this footpath?  All the data feeds in to <a href="https://www.openstreetmap.org/">OpenStreetMap</a> to make better maps for the whole world.</p>

<p>I love it! As we took our roadtrip around the South Island I whipped out StreetComplete any chance I could.  Walking along a hidden-away scenic track. Riding the bus through a new city. Bored while waiting for food to be served. Even in a taxi just meandering along, it's a great way to kill time.</p>

<p>It's more useful and productive than checking social media or doomscrolling the news.  The quests can be a little repetitive - turns out there are a lot of roads which need to have their surface recorded - but there's always <em>something</em> to be done.  Whether in a tiny village or a sprawling metropolis there are loads of quests.</p>

<p>You can <a href="https://www.openstreetmap.org/user/Terence%20Eden/history#map=9/-40.8959/175.0257">see a history of all the quests I've completed</a></p>

<p><a href="https://www.openstreetmap.org/user/Terence%20Eden/history#map=9/-40.8959/175.0257"><img src="https://shkspr.mobi/blog/wp-content/uploads/2023/01/Edits-to-OpenStreetMap-fs8.png" alt="Map of the South Island covered with squares where I made edits." width="1024" height="592" class="aligncenter size-full wp-image-44606"></a></p>

<p>I'm not sure whether me getting - albeit briefly - to the top spot was because I had a lot of time on holiday, or if the Kiwis just aren't that interested in mapping. But, either way, it was a fun way to see the country and engage with the built environment.</p>

<p>You can <a href="https://streetcomplete.app/">Download StreetComplete for Android</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=44499&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/01/how-i-became-the-1-mapper-in-new-zealand/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Creating an "Organization of Cartographers for Social Equality" map with OpenStreetMap]]></title>
		<link>https://shkspr.mobi/blog/2019/11/creating-an-organization-of-cartographers-for-social-equality-map-with-openstreetmap/</link>
					<comments>https://shkspr.mobi/blog/2019/11/creating-an-organization-of-cartographers-for-social-equality-map-with-openstreetmap/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 20 Nov 2019 07:27:48 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[OCSE]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=32724</guid>

					<description><![CDATA[If you&#039;ve seen that episode of The West Wing, you&#039;ll remember this scene:    I&#039;m not a paying member of the OCSE, but I fully support their aims. Because messing around with maps is fun.  So, can I build a web-first maps which is South-up, Pacific-centred, and Peters-projected?  Here&#039;s what I managed to do using OpenLayers - an Open Source web maps library which is pretty hackable.  Get started …]]></description>
										<content:encoded><![CDATA[<p>If you've seen <em>that</em> episode of The West Wing, you'll remember this scene:</p>

<iframe title="Gall--Peters Projection" width="620" height="349" src="https://www.youtube.com/embed/vVX-PrBRtTY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>I'm not a paying member of the OCSE, but I fully support their aims. Because messing around with maps is fun.  So, can I build a web-first maps which is South-up, Pacific-centred, and Peters-projected?</p>

<p>Here's what I managed to do using <a href="https://openlayers.org/">OpenLayers</a> - an Open Source web maps library which is pretty hackable.</p>

<h2 id="get-started"><a href="https://shkspr.mobi/blog/2019/11/creating-an-organization-of-cartographers-for-social-equality-map-with-openstreetmap/#get-started">Get started</a></h2>

<p>Following <a href="https://openlayers.org/en/latest/doc/quickstart.html">the example documentation</a> gets us a boring North-up map. Booo!</p>

<h2 id="flip-that-reverse-it"><a href="https://shkspr.mobi/blog/2019/11/creating-an-organization-of-cartographers-for-social-equality-map-with-openstreetmap/#flip-that-reverse-it">Flip that, reverse it</a></h2>

<p>Rotating a map about 180° is pretty easy:</p>

<pre><code class="language-JavaScript">view: new ol.View({
        maxZoom: 19,
        zoom: 3,
        rotation: Math.PI
})
</code></pre>

<p>The <code>rotation</code> option is is <em>radians</em> - so you'll need to remember your GCSE maths in order to recall that Pi radians = 180°.  There's a small but significant problem.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/09/everything-upside-down-fs8.png" alt="Map of the UK turned upside down." width="321" height="396" class="aligncenter size-full wp-image-32726">
<em>Everything</em> is upside down. Including the text.</p>

<h2 id="vectorman"><a href="https://shkspr.mobi/blog/2019/11/creating-an-organization-of-cartographers-for-social-equality-map-with-openstreetmap/#vectorman">Vectorman</a></h2>

<p>That's because the default tiles use <em>raster</em> images. We need <em>vector</em> images.</p>

<pre><code class="language-JavaScript">layers: [
    new ol.layer.VectorTile({
        source: new ol.source.VectorTile({
            format: new ol.format.MVT(),
            url: 'https://basemaps.arcgis.com/arcgis/rest/services/OpenStreetMap_v2/VectorTileServer/tile/{z}/{y}/{x}.pbf'
        }),
    })
],
</code></pre>

<p><img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/blankmap.png" alt="" width="501" height="311" class="aligncenter size-full wp-image-32888">
That looks a bit dull, so lets add some proper styles to it:</p>

<pre><code class="language-html">&lt;script src="https://cdn.jsdelivr.net/npm/ol-mapbox-style@4.3.1/dist/olms.js"&gt;&lt;/script&gt;
</code></pre>

<p>and</p>

<pre><code class="language-js">var layer = map.getLayers().getArray()[0];
var url = 'https://www.arcgis.com/sharing/rest/content/items/3e1a00aeae81496587988075fe529f71/resources/styles/root.json'
fetch(url).then(function(response) {
    response.json().then(function(glStyle) {
        olms.applyBackground(map, glStyle);
        olms.applyStyle(layer, glStyle, 'esri');
    });
});
</code></pre>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/09/Screenshot_2019-09-25-OCSE1-fs8.png" alt="Map of Europe upside down - with the labels the right way up." width="318" height="210" class="aligncenter size-full wp-image-32727">

<p>This uses the <a href="https://www.arcgis.com/home/item.html?id=3e1a00aeae81496587988075fe529f71">OpenStreetMap vectors from Arcgis</a> - but it can be changed to <a href="https://www.arcgis.com/home/search.html?t=content&amp;q=tags%3A%22vector%22">any other style</a> you like.</p>

<h2 id="location-location-location"><a href="https://shkspr.mobi/blog/2019/11/creating-an-organization-of-cartographers-for-social-equality-map-with-openstreetmap/#location-location-location">Location, Location, Location</a></h2>

<p>At the moment, the centre of the map is at 0° - with the UK in the centre. That's no good! We want <em>Aotearoa</em> - the land of the long white cloud, and ancestral home of my wife - to be in prime position.</p>

<pre><code class="language-JavaScript">view: new ol.View({
    center: ol.proj.fromLonLat([180, 0]),
    zoom: 3,
    rotation: Math.PI
})
</code></pre>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/09/Screenshot_2019-09-25-OCSE-fs8.png" alt="Map of the world, south up, Pacific centred." width="1020" height="598" class="aligncenter size-full wp-image-32728">

<p>Success!</p>

<h2 id="projecting"><a href="https://shkspr.mobi/blog/2019/11/creating-an-organization-of-cartographers-for-social-equality-map-with-openstreetmap/#projecting">Projecting</a></h2>

<p>Here's comes the tricky bit.  At the moment, we are still using the Mercator Projection which distorts the size of some countries. I'm not going to get into <a href="https://xkcd.com/977/">an argument about which projection is best</a> - but I want to show how to re-project an existing map.</p>

<p>With a raster map - where the tiles are bitmaps, not vectors - <a href="https://gist.github.com/NickFitz/58829a65dab12a5c9be7ae40087ada9c">it's pretty easy</a>.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/09/Screenshot_2019-09-27-Gall-Peters-projection-with-OpenStreetMap-tiles-and-OpenLayers-5-fs8.png" alt="Map of the world, south up, stretched." width="723" height="454" class="aligncenter size-full wp-image-32729"></p>

<p>But when zoomed in, this gives us the worst of both worlds:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/09/Screenshot_2019-09-27-Gall-Peters-projection-with-OpenStreetMap-tiles-and-OpenLayers-51-fs8.png" alt="Distorted map of the UK." width="433" height="422" class="aligncenter size-full wp-image-32730">
The place-names are upside-down and are distorted.</p>

<h2 id="reprojecting-vectors"><a href="https://shkspr.mobi/blog/2019/11/creating-an-organization-of-cartographers-for-social-equality-map-with-openstreetmap/#reprojecting-vectors">Reprojecting Vectors</a></h2>

<p>I naïvely thought this would be easy. Manipulating vectors doesn't sound so hard, does it? But I just can't find any way to do it in OpenLayers.  It doesn't work in any web mapping library I've found. And there are no Peters-projection raster tiles either.</p>

<p>I suspect the answer is that I would have to create my own tileset - which is beyond my capabilities.</p>

<p>So, if you know of a way to get a weird projection out of web maps - please let me know in the comments box.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=32724&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2019/11/creating-an-organization-of-cartographers-for-social-equality-map-with-openstreetmap/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[It's Pronounced "Reading"]]></title>
		<link>https://shkspr.mobi/blog/2013/01/its-pronounced-reading/</link>
					<comments>https://shkspr.mobi/blog/2013/01/its-pronounced-reading/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 10 Jan 2013 12:00:07 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[linguistics]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<guid isPermaLink="false">http://shkspr.mobi/blog/?p=7341</guid>

					<description><![CDATA[English is a funny old language. That my mother tongue doesn&#039;t bother with internal consistency doesn&#039;t bother me much - except when it comes to Text-To-Speech.  Using Google Maps to provide route guidance in the UK is a challenging affair.  Driving through Reading, the computerised voice continually mispronounced is as &#34;Reading&#34;.  Err... that is to say, it should have said &#34;ˈrɛdɪŋ&#34; instead it sai…]]></description>
										<content:encoded><![CDATA[<p>English is a funny old language. That my mother tongue doesn't bother with internal consistency doesn't bother me much - except when it comes to Text-To-Speech.</p>

<p>Using Google Maps to provide route guidance in the UK is a challenging affair.  Driving through Reading, the computerised voice continually mispronounced is as "Reading".</p>

<p>Err... that is to say, it should have said "ˈrɛdɪŋ" instead it said "ˈriːdɪŋ"  - that is, "red-ing" rather than "reed-ing".</p>

<p>Ok, <a href="http://en.wikipedia.org/wiki/Heteronym_%28linguistics%29">hetronyms</a> are a notoriously difficult to get right - even for humans.  Without context, it's hard to know which pronunciation should be used.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2013/01/Sat-Nav-Llan.png" alt="Sat Nav Llan" width="320" height="303" class="alignleft size-full wp-image-7347">

<p>But, I've heard my sat-nav pronounce "Woking" as "Wokk-ing" rather than the correct "Woe-king".  Vexing to those living there, distracting for those relying on accurate directions.</p>

<p>A few weeks ago, my wife and I learned that a friend of ours was getting married in Canandaigua, New York.  While not as linguistically complex as, say, Poughkeepsie, it caused some consternation in our household.  How can you travel to a location you can't even pronounce?</p>

<p>That's when we stumbled across the curiously named "HowJSay.com" - it supplies audio samples of people speaking particular words.  So now I know how <a href="https://howjsay.com/how-to-pronounce-canandaigua">Canandaigua</a> is pronounced.</p>

<p>I wonder if there is any sensible way to crowd-source pronunciation for a mapping project like <a href="http://www.openstreetmap.org/">OpenStreetMap</a>.  Sadly, Google Maps doesn't have a way to contribute language changes and the less said about Apple Maps the better!</p>

<p>There have been some <a href="http://www.mail-archive.com/talk@openstreetmap.org/msg06287.html">discussion on OpenStreetMap mailing lists</a> (in 2008) and there is <a href="http://wiki.openstreetmap.org/wiki/Proposed_features/Phonetics">a proposed phonetics feature</a> (from 2010).</p>

<p>This is not a minor problem, Wikipedia lists <a href="http://en.wikipedia.org/wiki/List_of_names_in_English_with_counterintuitive_pronunciations#Place_names_in_Britain_and_Ireland">hundreds of UK place names with counter-intuitive pronunciation</a>.</p>

<p>There's no <em>direct</em> harm in a sat-nav mispronouncing a town or street name - although it can be very annoying for anyone expecting the correct vocalisation.</p>

<p>So, should modern maps allow for the correct pronunciation of place names?  I think they should.  That then draws us to an interesting question about regional pronunciation.  An Englishman, Scotsman, and American all walk in to a bar - they each pronounce the word "Edinburgh" very differently.  Who is right?</p>

<p>I leave you with one of <a href="https://talkandtech.blogspot.com/2010/06/hymn-to-heteronyms.html">Richard Lederer's hetronymic poems</a> to enjoy.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=7341&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2013/01/its-pronounced-reading/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
	</channel>
</rss>
