{"id":2762,"date":"2016-12-28T22:13:47","date_gmt":"2016-12-28T13:13:47","guid":{"rendered":"https:\/\/regex.info\/blog\/2016-12-28\/2762"},"modified":"2016-12-28T22:13:47","modified_gmt":"2016-12-28T13:13:47","slug":"updating-maps-for-cycling-including-japans-pseudo-one-way-roads","status":"publish","type":"post","link":"https:\/\/regex.info\/blog\/2016-12-28\/2762","title":{"rendered":"Updating Maps for Cycling, Including Japan&#8217;s Pseudo One-Way Roads"},"content":{"rendered":"\n\n<div class='ic'><iframe height='405' width='690' frameborder='0' allowtransparency='true' scrolling='yes' src='https:\/\/www.strava.com\/activities\/810729566\/embed\/cfdd1f5a8486b55e0aefca1f3a5c9b8d25d216d9'>\n<\/iframe>\n<br\/><span class='caption'><span class='nobr'>A Map<\/span> with <span class='nobr'>a Hat<\/span><\/span>\n<br\/><small><a href='https:\/\/www.strava.com\/activities\/810729566'>view on Strava<\/a><\/small>\n<\/div>\n\n<p>Everyone is familiar with Google Maps, but for various reasons (cost,\nquality, expressability), many mapping applications use map data from <a\nhref='http:\/\/openstreetmap.org\/'>OpenStreetMap<\/a> (<span class='QO'>&#8220;<\/span>OSM<span class='QC'>&#8221;<\/span>) instead. <span class='nobr'>It's free to<\/span> use and anyone can add\/edit\/update it pretty much in real time...\nit's like Wikipedia, but for maps.<\/p>\n\n<p>I have particular interest in it because lots of cycling-stuff uses\nOpenStreetMap data...<\/p>\n\n<ul><li><p>I use the maps on my phone when riding, via the\n<strike>Galileo Offline Maps app<\/strike> (name changed Feb 2019 to <a href='https:\/\/gurumaps.app\/'>Guru Maps<\/a>),\nand\nsometimes with <a href='http:\/\/maps.me\/'>the Maps.me app<\/a>.<\/p>\n\n<\/li>\n\n<li><p>I plan my cycling routes with OpenStreetMap data, via <a href='https:\/\/graphhopper.com\/maps\/'>GraphHopper<\/a>.\nThe <a href='https:\/\/www.strava.com\/routes\/new'>Strava route builder<\/a> also uses OpenStreetMap data.<\/p><\/li>\n\n<li><p>I upload the routes my cycling computer (<span class='nobr'>a Garmin<\/span> Edge 820), which itself uses OpenStreetMap data\nfor its maps, that <span class='nobr'>I load<\/span>\n<a href='http:\/\/tmz.skr.jp\/data\/gmap.html'>from here<\/a>.<\/p><\/li>\n\n<li><p>Then of course we have <a href='http:\/\/strava.com\/'>Strava<\/a>,\nwhich uses OpenStreetMap data for most of their maps, such as seen\nabove.<\/p><\/li>\n\n<\/ul>\n\n<p>Like Wikipedia, the quality of the data varies widely depending on where\nyou look. Here in Japan, large cities tend to have very good data, probably\nboth because the original data the map was seeded with long ago (often from\nYahoo! and Microsoft Bing maps) was good within cities, and also because\nmore people are interested in cities and so maps for these areas tend to be\nviewed and updated by more people more often.<\/p>\n\n<p>But even within cities the data can be spotty at times, and out in rural\nareas it can be pretty bad. <span class='nobr'>But the beauty<\/span> of it is that when we come\nacross data that's obviously wrong, we can just fix it. Like with\nWikipedia, everyone enjoys the fruits of everyone's updates.<\/p>\n\n<p>Of course, now that I want to talk about bad data and show an example, <span class='nobr'>I\ncan't<\/span> find any really bad areas that <span class='nobr'>I haven't<\/span> already fixed, but just\npoking around the countryside <span class='nobr'>I came<\/span> across this:<\/p>\n\n<div class='ic tight'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-1a.jpg\" width=\"690\" height=\"480\"\nid=\"iosm_example_1a\"\/>\n<br\/><span class='caption'>Map Data of Suspect Quality<\/span>\n<meta itemprop='about' content=\"Map Data of Suspect Quality\"\/><\/div>\n\n<p>This is the view in <a\nhref='http:\/\/www.openstreetmap.org\/edit#map=17\/35.19675\/136.28861'>the\ndefault OpenStreetMap map editor<\/a>, with the mapped roads presented over\nsome satellite imagery. <span class='nobr'>It's clear<\/span> from the imagery that some roads have\nnot been mapped, some have not been mapped well, and some non-existent\nroads have been added (such as the one shown with <span class='nobr'>a red<\/span> border in the\nscreenshot above).<\/p>\n\n<p>You have to be a bit careful about blindly trusting the satellite images, since they can be old\nor misaligned, but if you trust them, you can just go ahead and start fixing the map to match the imagery. <span class='nobr'>The editor<\/span> is pretty easy to use once you get the hang of it.<\/p>\n\n<p id='gsi'>Being a geek, I go a step further than trusting the satellite images. <span class='nobr'>I use road<\/span> data from\nthe Japanese government, via its\n<a href='http:\/\/www.gsi.go.jp\/'>Geospatial Information Authority of Japan<\/a> web site, to build something <span class='nobr'>I can<\/span>\noverlay within the OpenStreetMap editor to show me the surveyed location of roads:<\/p>\n\n<div class='ic tight'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-1b.jpg\" width=\"690\" height=\"480\"\nid=\"iosm_example_1b\"\/>\n<br\/><span class='caption'>With Reference Data<\/span>\n<meta itemprop='about' content=\"With Reference Data\"\/><\/div>\n\n<p>The data from the Japanese government can also be suspect (old, misaligned, or for proposed roads\nthat don't yet exist), but it's <span class='nobr'>a good<\/span> sign when this data matches the satellite photo perfectly.\nSo, <span class='nobr'>I start<\/span> fixing things...<\/p>\n\n<div class='ic tight'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-1c.jpg\" width=\"690\" height=\"480\"\nid=\"iosm_example_1c\"\/>\n<br\/><span class='caption'>Fixed Result<\/span>\n<meta itemprop='about' content=\"Fixed Result\"\/><\/div>\n\n<p>It takes only a moment to fix the little area seen in the screenshots\nabove, but it's sort of addicting. You're fixing <span class='nobr'>a road<\/span> that connects to\nanother road that's just as bad, so you start correcting it, and so on.\nLuckily, Japan is an island nation, so in theory there's <span class='nobr'>a limit<\/span> to how far\nit can take me. <span class='nobr'>I tend to<\/span> get caught in a <span class='QO'>&#8220;<\/span>just one more fix<span class='QC'>&#8221;<\/span> loop until <span class='nobr'>I\ncan<\/span> force myself to stop and leave areas of the map untouched and\nincorrect. This is difficult for <span class='nobr'>a data<\/span> geek like me to do.<\/p>\n\n<p>Here's another example showing poorly-mapped roads <a href='http:\/\/www.openstreetmap.org\/edit#map=18\/35.19502\/136.28710'>not far from<\/a> the spot above:<\/p>\n\n<div class='ic' style='position:relative; margin-bottom:20px'>\n<div id='img696_1'  style='visibility:visibile; margin:0; width:100%'><div style='margin-top:0; margin-bottom:0' class='ic' itemscope itemtype='http:\/\/schema.org\/Photograph'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-2a.jpg\" width=\"690\" height=\"488\"\nalt=\"Before, but with my road-edge overlay\"\nid=\"iosm_example_2a\"\ntitle=\"Before, but with my road-edge overlay\"\/>\n<br\/>Before, but with my road-edge overlay\n<meta itemprop='url' content='http:\/\/regex.info\/i\/s\/osm\/osm-example-2a.jpg'\/>\n<meta itemprop='about' content=\"Before, but with my road-edge overlay\"\/><\/div>\n\n<\/div>\n<div id='img696_2'  style='visibility:hidden; margin:0; width:100%;position:absolute; left:0; top:0'><div style='margin-top:0; margin-bottom:0' class='ic' itemscope itemtype='http:\/\/schema.org\/Photograph'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-2b.jpg\" width=\"690\" height=\"488\"\nalt=\"Better, but the roads seem to be shifted down and to the right a bit\"\nid=\"iosm_example_2b\"\ntitle=\"Better, but the roads seem to be shifted down and to the right a bit\"\/>\n<br\/>Better, but the roads seem to be shifted down and to the right <span class='nobr'>a bit<\/span>\n<meta itemprop='url' content='http:\/\/regex.info\/i\/s\/osm\/osm-example-2b.jpg'\/>\n<meta itemprop='about' content=\"Better, but the roads seem to be shifted down and to the right a bit\"\/><\/div>\n\n<\/div>\n<div id='img696_3'  style='visibility:hidden; margin:0; width:100%;position:absolute; left:0; top:0'><div style='margin-top:0; margin-bottom:0' class='ic' itemscope itemtype='http:\/\/schema.org\/Photograph'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-2c.jpg\" width=\"690\" height=\"488\"\nalt=\"Ah, that's better\"\nid=\"iosm_example_2c\"\ntitle=\"Ah, that's better\"\/>\n<br\/>Ah, that's better\n<meta itemprop='url' content='http:\/\/regex.info\/i\/s\/osm\/osm-example-2c.jpg'\/>\n<meta itemprop='about' content=\"Ah, that's better\"\/><\/div>\n\n<\/div>\n<\/div>\n\n<style type=\"text\/css\">\nspan.b696 { padding: 6px; border: gray 1px solid }\n<\/style>\n<center>\n  <span class='b696' id='but696_1' onmouseover='OnMouse696(1)' style='border-color: red'>Before<\/span>\n &nbsp;&nbsp;-&nbsp;&nbsp; <span class='b696' id='but696_2' onmouseover='OnMouse696(2)'>Middle<\/span>\n &nbsp;&nbsp;-&nbsp;&nbsp; <span class='b696' id='but696_3' onmouseover='OnMouse696(3)'>After<\/span>\n\n  <p style='margin-top:5px'>\n  <small>mouseover <span class='nobr'>a button<\/span> to see that image<\/small>\n  <\/p>\n<\/center>\n\n<script type=\"text\/javascript\">\n\/\/<![CDATA[\n var img696 = new Array();\n var but696 = new Array();\n\nimg696[1] = document.getElementById('img696_1');\nbut696[1] = document.getElementById('but696_1');\nimg696[2] = document.getElementById('img696_2');\nbut696[2] = document.getElementById('but696_2');\nimg696[3] = document.getElementById('img696_3');\nbut696[3] = document.getElementById('but696_3');\n\n\n function OnMouse696(num)\n {\n   img696[num].style.visibility      = 'visible';\n   but696[num].style.borderColor     = '#FF4040';\n   but696[num].style.backgroundColor = '#808080';\n   but696[num].style.color           = 'white';\n   but696[num].style.borderWidth     = '3px';\n   but696[num].style.padding         = '4px';\n\n   for (i = 1; i < 4; i++) {\n      if (i != num) {\n          img696[i].style.visibility    = 'hidden';\n          but696[i].style.borderColor     = 'gray';\n          but696[i].style.backgroundColor = '';\n          but696[i].style.borderWidth     = '1px';\n          but696[i].style.padding         = '6px';\n          but696[i].style.color           = '#888';\n      }\n   }\n }\n\/\/]]>\n<\/script>\n\n\n<p>The difference between <span class='QO'>&#8220;<\/span>Middle<span class='QC'>&#8221;<\/span> and <span class='QO'>&#8220;<\/span>After<span class='QC'>&#8221;<\/span> is not that the road mapping was\nmoved, but that within the map editor, <span class='nobr'>I switched<\/span> to <span class='nobr'>a different<\/span> satellite-imagery layer.\nThere are various layers, and the quality of each varies considerably as you move around. <span class='nobr'>In this case<\/span>, the first's images were offset to the southeast by about the width of <span class='nobr'>a road,<\/span>\nand the second's images weren't. (It could be that neither are correct, but in this case\n<span class='nobr'>I could<\/span> compare with the government survey data, and so knew the second one to be correct.)<\/p>\n\n<p>In writing this post, I realized that <span class='nobr'>I used<\/span> the wrong set of images to\nroughly place the lake that pokes in from the right side of the frame... in\nthe <span class='QO'>&#8220;<\/span>After<span class='QC'>&#8221;<\/span> view, the lake is in the wrong spot. I've since returned to fix\nit.<\/p>\n\n<p>So, after saving a set of updates, it can take some time for the new data to percolate to all the places that use it...<\/p>\n\n<style type=\"text\/css\">\np.h2762 { font-size: 120%; margin-top:50px }\n<\/style>\n<p class='h2762'>Update Speed to Web-based Maps<\/p>\n\n<p>Web sites that use OpenStreetMap data can see updates almost immediately... within <span class='nobr'>a minute.<\/span> Strava seems to have\n<strike><span class='nobr'>a slightly<\/span> longer delay, likely due to intermediate caching in their backend, so updates might take five or ten minutes to appear there.<\/strike> <b>Update:<\/b> Strava stopped received updates in mid 2017, and from my inquiries, neither Strava nor Mapbox (via which Strava gets OpenStreetMap updates) seem concerned. )-: <\/p>\n\n<p>Here is another before\/after pair of screenshots from Strava, showing tiny part of\n<a href='\/blog\/2016-12-11\/2759'>this epic ride two weeks ago<\/a>, descending into Osaka\non an exceedingly-steep mountain road used by <span class='nobr'>a lot<\/span> of tourists on foot. <span class='nobr'>It turned<\/span> out that the OpenStreetMap\ncoverage here was pretty sparse, and <span class='nobr'>I thought<\/span> to update it because folks on foot would likely appreciate\naccurate maps when deciding where to trudge up and down.<\/p>\n\n<div class='ic' style='position:relative; margin-bottom:20px'>\n<div id='img778_1'  style='visibility:visibile; margin:0; width:100%'><div style='margin-top:0; margin-bottom:0' class='ic' itemscope itemtype='http:\/\/schema.org\/Photograph'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-3a.jpg\" width=\"690\" height=\"462\"\nalt=\"\"\nid=\"iosm_example_3a\"\/>\n<meta itemprop='url' content='http:\/\/regex.info\/i\/s\/osm\/osm-example-3a.jpg'\/><\/div>\n\n<\/div>\n<div id='img778_2'  style='visibility:hidden; margin:0; width:100%;position:absolute; left:0; top:0'><div style='margin-top:0; margin-bottom:0' class='ic' itemscope itemtype='http:\/\/schema.org\/Photograph'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-3b.jpg\" width=\"690\" height=\"462\"\nalt=\"\"\nid=\"iosm_example_3b\"\/>\n<meta itemprop='url' content='http:\/\/regex.info\/i\/s\/osm\/osm-example-3b.jpg'\/><\/div>\n\n<\/div>\n<\/div>\n\n<style type=\"text\/css\">\nspan.b778 { padding: 6px; border: gray 1px solid }\n<\/style>\n<center>\n  <span class='b778' id='but778_1' onmouseover='OnMouse778(1)' style='border-color: red'>Before<\/span>\n &nbsp;&nbsp;-&nbsp;&nbsp; <span class='b778' id='but778_2' onmouseover='OnMouse778(2)'>After<\/span>\n  <p style='margin-top:5px'>\n  <small>mouseover <span class='nobr'>a button<\/span> to see that image<\/small>\n  <\/p>\n<\/center>\n\n<script type=\"text\/javascript\">\n\/\/<![CDATA[\n var img778 = new Array();\n var but778 = new Array();\n\nimg778[1] = document.getElementById('img778_1');\nbut778[1] = document.getElementById('but778_1');\nimg778[2] = document.getElementById('img778_2');\nbut778[2] = document.getElementById('but778_2');\n\n\n function OnMouse778(num)\n {\n   img778[num].style.visibility      = 'visible';\n   but778[num].style.borderColor     = '#FF4040';\n   but778[num].style.backgroundColor = '#808080';\n   but778[num].style.color           = 'white';\n   but778[num].style.borderWidth     = '3px';\n   but778[num].style.padding         = '4px';\n\n   for (i = 1; i < 3; i++) {\n      if (i != num) {\n          img778[i].style.visibility    = 'hidden';\n          but778[i].style.borderColor     = 'gray';\n          but778[i].style.backgroundColor = '';\n          but778[i].style.borderWidth     = '1px';\n          but778[i].style.padding         = '6px';\n          but778[i].style.color           = '#888';\n      }\n   }\n }\n\/\/]]>\n<\/script>\n\n<p>I updated quite a bit of <a href='http:\/\/www.openstreetmap.org\/edit#map=17\/34.67233\/135.65236'>the surrounding area<\/a>, but\nscrolling <a href='http:\/\/www.openstreetmap.org\/edit#map=17\/34.67787\/135.64756'><span class='nobr'>a bit<\/span> farther away<\/a> and you\ncan see sparse areas still in need of some mapping TLC.<\/p>\n\n<p class='h2762'>Update Speed to Route Building<\/p>\n\n<p>Other uses of OpenStreetMap data take longer to update. For example,\n<a href='https:\/\/graphhopper.com\/maps\/'>GraphHopper<\/a>, where <span class='nobr'>I make<\/span> cycling routes, refreshes their routing data\nonly every few days. <span class='nobr'>The maps update<\/span> visually right away, but the routes they generate won't reflect updates\nfor up to <span class='nobr'>a few<\/span> days.<\/p>\n\n<p>I don't know the update schedule for Strava's route builder, but it doesn't seem to be very often.\nChanges <span class='nobr'>I made<\/span> two weeks ago are still not reflected in its routes.<\/p>\n\n\n<p class='h2762'>Update Speed for Garmin GPS Units<\/p>\n\n<p>Garmin apparently sells detailed maps for various areas of the world,\nbut <span class='nobr'>I have<\/span> no experience with these. Rather, on my Garmin 820 cycling\ncomputer <span class='nobr'>I use<\/span> maps derived from OpenStreetMap data, packaged for\nEnglish-language Garmin devices by <span class='nobr'>a guy<\/span> in Osaka. Because these devices\ncan't display Japanese natively, his preparation process converts Japanese\ntext to <span class='QO'>&#8220;<\/span>English<span class='QC'>&#8221;<\/span> (to romaji). <span class='nobr'>It's quite<\/span> convenient.<\/p>\n\n<p>He makes a new version available about twice <span class='nobr'>a month,<\/span> each time bringing\nin the accumulated updates. The <a\nhref='http:\/\/tmz.skr.jp\/data\/gmap.html'>web page<\/a> is all in Japanese,\nbut downloading and installing is simple.<\/p>\n\n<p>In about the middle of <a\nhref='http:\/\/tmz.skr.jp\/data\/gmap.html'>the web page<\/a> is <span class='nobr'>a grid<\/span> with <span class='nobr'>a purple<\/span> background...<\/p>\n\n<div class='ic'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-4.png\" width=\"400\" height=\"209\"\nclass=\"raw\"\nid=\"iosm_4\"\/><\/div>\n\n<p>The top pair of items are the latest data, the one marked in green is <span class='nobr'>a version<\/span> that includes\ncontour lines, the one marked in red does not. <span class='nobr'>I use the<\/span> latter, but <span class='nobr'>a hiker<\/span> probably wants the former.<\/p>\n\n<p>Each download zip holds two <span class='QO'>&#8220;<\/span>*.img<span class='QC'>&#8221;<\/span> files (<span class='QO'>&#8220;<\/span>gmapsupp.img<span class='QC'>&#8221;<\/span> and <span class='QO'>&#8220;<\/span>gmapsupp_search.img<span class='QC'>&#8221;<\/span>).\nAfter unzipping, just copy the two <span class='QO'>&#8220;<\/span>*.img<span class='QC'>&#8221;<\/span> files into your Garmin unit's <span class='QO'>&#8220;<\/span>Garmin<span class='QC'>&#8221;<\/span> folder. That's all there is to installing these maps and their updates.<\/p>\n\n<p class='h2762'>Update Speed for Offline-Map Apps<\/p>\n\n<p>The two phone apps I mentioned earlier are very convenient because after an initial map download,\nthey don't need an internet connection to work, so you can use them when you're deep in the mountains\nwith no coverage. Both are available on both iOS and Android.<\/p>\n\n<p>In the case of Guru Maps, the map for all of Japan currently\ntakes about 470 megabytes of storage. With Maps.me, you can load maps by\nthe prefecture level (e.g. state\/province). Kyoto Prefecture currently takes\n47 megabytes (though the app inexplicably includes <span class='QO'>&#8220;<\/span>Kyoto Prefecture<span class='QC'>&#8221;<\/span> under\nthe <span class='QO'>&#8220;<\/span>Shikoku<span class='QC'>&#8221;<\/span> region, despite my having reported this bug to them <span class='nobr'>a year<\/span>\nago).<\/p>\n\n<p>Updates that you (and I and others) make to OpenStreetMap data won't get\ninto these apps very quickly, though. They tend to refresh their maps only\nonce every month or three.<\/p>\n\n<p>Each app has its strengths. You can record your track with Guru Maps,\nwhile Maps.me lets you do turn-by-turn routing (and you can route while offline, too).<\/p>\n\n\n\n<p class='h2762'>Hidden Map Features: One Way(ish) Streets<\/p>\n\n<p>I've been making updates to OpenStreetMap data like this for <span class='nobr'>a year,<\/span> and have spent way, way too much\ntime on it. <span class='nobr'>I guess<\/span> it's my way of trying to give back <span class='nobr'>a bit<\/span> for all the wonderful stuff <span class='nobr'>I am<\/span> freely allowed to use.\nHowever, there was one part of the updates that was <i>particularly<\/i> frustrating.<\/p>\n\n<p>At first the problem may not be apparent...<\/p>\n\n<div class='ic'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-5c.jpg\" width=\"690\" height=\"503\"\nid=\"iosm_example_5c\"\/>\n<br\/><span class='caption'>Lurking Problem<\/span>\n<br\/>lots of one-way streets.... sort of\n<meta itemprop='about' content=\"Lurking Problem lots of one-way streets.... sort of\"\/><\/div>\n\n<p>To understand the problem, let's look at <span class='nobr'>a typical<\/span> <span class='QO'>&#8220;<\/span>one way<span class='QC'>&#8221;<\/span> street sign in Japan:<\/p>\n\n<div class='ic'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-6a.jpg\" width=\"690\" height=\"492\"\nid=\"iosm_6a\"\/>\n<br\/><span class='caption'>Typical <span class='QO'>&#8220;<\/span>One Way<span class='QC'>&#8221;<\/span> Sign<\/span>\n<meta itemprop='about' content=\"Typical &amp;#8220; One Way &amp;#8221; Sign\"\/><\/div>\n\n<p>The devil is in the details.... the vast <i>vast<\/i> majority of <span class='QO'>&#8220;<\/span>one way<span class='QC'>&#8221;<\/span> signs in Japan are paired\nwith another sign:<\/p>\n\n<div class='ic'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-6b.jpg\" width=\"690\" height=\"431\"\nid=\"iosm_6b\"\/>\n<br\/><span class='caption'><span class='QO'>&#8220;<\/span>Except Bicycles<span class='QC'>&#8221;<\/span><\/span>\n<br\/>\u81ea\u8ee2\u8eca\u3092\u9664\u304f\n<meta itemprop='about' content=\"&amp;#8220; Except Bicycles &amp;#8221; \u81ea\u8ee2\u8eca\u3092\u9664\u304f\"\/><\/div>\n\n<p>Bicycles are allowed to go either direction on such streets, which is, as\n<span class='nobr'>I said,<\/span> most one-way streets in Japan. <span class='nobr'>It's quite<\/span> convenient for cyclists.<\/p>\n\n<p>I would guess that the little <span class='QO'>&#8220;<\/span>Except Bicycles<span class='QC'>&#8221;<\/span> sign is the most common\nstreet sign in Japan, since it's added to almost all of the <span class='QO'>&#8220;<\/span>one way<span class='QC'>&#8221;<\/span> and\n<span class='QO'>&#8220;<\/span>do not enter<span class='QC'>&#8221;<\/span> signs.<\/p>\n\n<p>So why do we care about this when mapping? <span class='nobr'>If left as<\/span> is, <i>automatic\nrouting<\/i> (such as via the Maps.me phone app or the GraphHopper and\nStrava web sites) won't utilize these hybrid one-way roads to their fullest\nextent when routing for bicycles, yielding results that are more\ninconvenient than they should be, but in the worst case completely\ndisallowing routing through an area that should be allowed.<\/p>\n\n<p>So, the OpenStreetMap editor does have <span class='nobr'>a way<\/span> to mark such streets as <span class='QO'>&#8220;<\/span>not one way for bicycles<span class='QC'>&#8221;<\/span>, but it's not convenient:<\/p>\n\n<ol>\n<li><p>Select the street segment<\/p><\/li>\n<li>\n\n<p>In the left sidebar, scroll down to the <span\nclass='QO'>&#8220;<\/span>All tags<span class='QC'>&#8221;<\/span> list. Each\nstreet will have its own mix of tags, but if it displays as <span\nclass='nobr'>a one<\/span>-way street, it'll have a <span\nclass='QO'>&#8220;<\/span>oneway<span class='QC'>&#8221;<\/span> tag with\n<span class='nobr'>a value<\/span> of <span\nclass='QO'>&#8220;<\/span>yes<span class='QC'>&#8221;<\/span> (or in some\ncases, <span class='QO'>&#8220;<\/span>-1<span class='QC'>&#8221;<\/span> or\n<span class='QO'>&#8220;<\/span>1<span class='QC'>&#8221;<\/span> or <span\nclass='QO'>&#8220;<\/span>true<span class='QC'>&#8221;<\/span>, which all\nmean the same as <span class='QO'>&#8220;<\/span>yes<span\nclass='QC'>&#8221;<\/span> for our purposes).<\/p>\n\n<p>As illustrations, here are the tag lists from two random one-way\nstreets:<\/p>\n\n<table align='center'><tr valign='top'><td><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-7a.png\" width=\"320\" height=\"348\"\nclass=\"raw\"\nid=\"iosm_7a\"\/><\/td><td><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-7b.png\" width=\"320\" height=\"188\"\nclass=\"raw\"\nid=\"iosm_7b\"\/><\/td><\/tr><\/table>\n<\/li>\n\n<li><p>Add a <span class='QO'>&#8220;<\/span>oneway:bicycle<span class='QC'>&#8221;<\/span> tag with a <span class='QO'>&#8220;<\/span>no<span class='QC'>&#8221;<\/span> value...<\/p>\n\n<p><b>1)<\/b> Click the add-tag <span class='QO'>&#8220;<\/span>+<span class='QC'>&#8221;<\/span>\n<br\/><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-8a.png\" width=\"320\" height=\"176\"\nclass=\"raw\"\nid=\"iosm_8a\"\nstyle=\"padding-left:2.5em; padding-top:5px\"\/><\/p>\n\n<p><b>2)<\/b> Add field <span class='QO'>&#8220;<\/span>oneway:bicycle<span class='QC'>&#8221;<\/span>\n<br\/><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-8b.png\" width=\"320\" height=\"246\"\nclass=\"raw\"\nid=\"iosm_8b\"\nstyle=\"padding-left:2.5em; padding-top:5px\"\/><\/p>\n\n<p><b>3)<\/b> Make its value <span class='QO'>&#8220;<\/span>no<span class='QC'>&#8221;<\/span>\n<br\/><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-8c.png\" width=\"320\" height=\"242\"\nclass=\"raw\"\nid=\"iosm_8c\"\nstyle=\"padding-left:2.5em; padding-top:5px\"\/><\/p>\n\n\n<p><b>4)<\/b> Voil\u00e0, it's now <span class='nobr'>a one<\/span>-way road for all but bicycles\n<br><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-8d.png\" width=\"320\" height=\"192\"\nclass=\"raw\"\nid=\"iosm_8d\"\nstyle=\"padding-left:2.5em; padding-top:5px\"\/>\n<\/p>\n\n<\/li>\n<\/ol>\n\n<p>One has to be careful to make sure the updates are appropriate. Sometimes very large streets are encoded with\nseparate <span class='QO'>&#8220;<\/span>roads<span class='QC'>&#8221;<\/span> for each direction of travel, and each such <span class='QO'>&#8220;<\/span>road<span class='QC'>&#8221;<\/span> is one way in its direction for bicycles as well. <span class='nobr'>If these<\/span> are given a <span class='QO'>&#8220;<\/span>oneway:bicycle<span class='QC'>&#8221;<\/span> tag, the value should be <span class='QO'>&#8220;<\/span>yes<span class='QC'>&#8221;<\/span>.<\/p>\n\n\n<p style='margin-top:30px'>It's very nice that <span class='QO'>&#8220;<\/span>one way for all but bicycles<span class='QC'>&#8221;<\/span> is possible, but how it's done is really inconvenient,\nboth because of all the steps one must go through to add the notation, and because there's no way to know whether\n<span class='nobr'>a one<\/span>-way road has been so notated without scanning all the tags for <span class='QO'>&#8220;<\/span>oneway:bicycle<span class='QC'>&#8221;<\/span>.<\/p>\n\n<p>So, when you look at something like this...<\/p>\n\n<div class='ic tight'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-5a.jpg\" width=\"690\" height=\"474\"\nid=\"iosm_example_5a\"\/>\n<br\/><span class='caption'>Sea of One-Way Streets<\/span>\n<br\/>that may or may not have been updated for bicycles\n<meta itemprop='about' content=\"Sea of One-Way Streets that may or may not have been updated for bicycles\"\/><\/div>\n\n<p>... you don't know to what extent, if any, the one-way streets have been updated for bicycles.\nEven if you have the patience of <span class='nobr'>a saint<\/span> and check\/update them all, will you remember the exact extent\nof your work after <span class='nobr'>a week<\/span> or <span class='nobr'>a month,<\/span> or will you have to spot check for <span class='QO'>&#8220;<\/span>oneway:bicycle<span class='QC'>&#8221;<\/span> to remind yourself\nthat you've already done this area? <span class='nobr'>But in either<\/span> case, how do you know you got them all?<\/p>\n\n<p>I was in the midst of this frustration yesterday when <span class='nobr'>I tickled<\/span> myself pink\nby coming up with <span class='nobr'>a solution<\/span>:<\/p>\n\n<div class='ic tight'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-example-5b.jpg\" width=\"690\" height=\"474\"\nid=\"iosm_example_5b\"\/>\n<br\/><span class='caption'><span class='QO'>&#8220;<\/span>Fat<span class='QC'>&#8221;<\/span> Streets Need to be Updated<\/span>\n<meta itemprop='about' content=\"&amp;#8220; Fat &amp;#8221; Streets Need to be Updated\"\/><\/div>\n\n\n<p>I made it so that streets I need to address stand out visually.<\/p>\n\n<p>To do this, I downloaded the source code to the OpenStreetMap map editor and made <span class='nobr'>a few<\/span> changes so that\nnon-highway streets that are noted <span class='QO'>&#8220;<\/span>oneway<span class='QC'>&#8221;<\/span>, but that have no <span class='QO'>&#8220;<\/span>oneway:bicycle<span class='QC'>&#8221;<\/span> notation of any kind, are displayed\nwith exaggerated thickness.<\/p>\n\n<div class='img_right' style='margin-top:0; margin-right:0; padding-top:0; padding-right:0'><img loading=\"lazy\" decoding=\"async\" src=\"\/i\/s\/osm\/osm-9.png\" width=\"300\" height=\"263\"\nclass=\"raw\"\nid=\"iosm_9\"\/><\/div>\n\n\n<p>If it's truly one way even for bicycles, <span class='nobr'>I add<\/span>\n<span class='QO'>&#8220;<\/span>oneway:bicycle<span\nclass='QC'>&#8221;<\/span> with <span class='nobr'>a value<\/span> of <span\nclass='QO'>&#8220;<\/span>yes<span class='QC'>&#8221;<\/span>. This doesn't\nhave an effect on routing, but it denotes to anyone inspecting the tags\nthat the bicycle aspect has been addressed.<\/p>\n\n<p><span class='nobr'>But for the<\/span> typical one-way street, <span\nclass='nobr'>I add<\/span> <span\nclass='QO'>&#8220;<\/span>oneway:bicycle<span class='QC'>&#8221;<\/span> with\n<span class='nobr'>a value<\/span> of <span class='QO'>&#8220;<\/span>no<span\nclass='QC'>&#8221;<\/span>.<\/p>\n\n<p>And to make it easier to apply a <span class='QO'>&#8220;<\/span>oneway:bicycle<span class='QC'>&#8221;<\/span> tag, <span class='nobr'>I updated<\/span> the UI so that it's <span class='nobr'>a simple<\/span> checkbox\nthat cycles among <span class='QO'>&#8220;<\/span>no tag<span class='QC'>&#8221;<\/span>, <span class='QO'>&#8220;<\/span>no<span class='QC'>&#8221;<\/span>, and <span class='QO'>&#8220;<\/span>yes<span class='QC'>&#8221;<\/span>.<\/p>\n\n<p>And to make it <i>even<\/i> easier, <span class='nobr'>I made a<\/span> keyboard shortcut to cycle through the tag values,\nso <span class='nobr'>I just<\/span> click <span class='nobr'>a street,<\/span> tap the key, click the next street and tap the key again, etc.\n\n<p>Once all the <span class='QO'>&#8220;<\/span>fat<span class='QC'>&#8221;<\/span> streets are gone, <span class='nobr'>I'm done with<\/span> an area. Easy peasy! <span class='nobr'>It takes<\/span> about 15~20 seconds to\ntake care of an area the size seen in the screenshot above.<\/p>\n\n<p>I've taken care of most of Kyoto, and much of Osaka, but it's still <span class='nobr'>a slow<\/span> process to do <span class='nobr'>a large<\/span> area because <span class='nobr'>I have<\/span> to pan\naround looking for <span class='QO'>&#8220;<\/span>fat<span class='QC'>&#8221;<\/span> streets. <span class='nobr'>If I zoom<\/span> out too far, the tool exits editing mode and <span class='nobr'>I can't<\/span> see anything, so <span class='nobr'>I have<\/span> to\nbe zoomed up, and just pan around.<\/p>\n\n<p>Anyway, I'm tickeled that I could update the map editor. <span class='nobr'>It's not the<\/span> kind of programming I'm good at,\nand that they can build this kind of thing in <span class='nobr'>a browser<\/span> just boggles my mind. <span class='nobr'>It garners<\/span> appreciation\nthat there are people out there much smarter than I, and that they donate their talents so freely.<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Everyone is familiar with Google Maps, but for various reasons (cost, quality, expressability), many mapping applications use map data from OpenStreetMap (\"OSM\") instead. It's free to use and anyone can add\/edit\/update it pretty much in real time... it's like Wikipedia, but for maps.<\/p> <p>I have particular interest in it because lots of cycling-stuff uses OpenStreetMap data...<\/p> <p>I use the maps on my phone when riding, via the Galileo Offline Maps app (name changed Feb 2019 to Guru Maps), and sometimes with the Maps.me app.<\/p> <p>I plan my cycling routes with OpenStreetMap data, via GraphHopper. The Strava route builder also uses [...]","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30,1,31,4],"tags":[],"_links":{"self":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/posts\/2762"}],"collection":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/comments?post=2762"}],"version-history":[{"count":0,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/posts\/2762\/revisions"}],"wp:attachment":[{"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/media?parent=2762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/categories?post=2762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/regex.info\/blog\/wp-json\/wp\/v2\/tags?post=2762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}