<?xml version="1.0" encoding="UTF-8"?><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>Tech - Jake Coppinger</title>
	<atom:link href="https://jakecoppinger.com/category/tech/feed/" rel="self" type="application/rss+xml" />
	<link>https://jakecoppinger.com</link>
	<description>Jake Coppinger&#039;s blog and portfolio.</description>
	<lastBuildDate>Thu, 12 Feb 2026 05:50:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>

<image>
	<url>https://jakecoppinger.com/wp-content/uploads/2024/07/cropped-closeup-headshot-jake-coppinger-2024-32x32.jpg</url>
	<title>Tech - Jake Coppinger</title>
	<link>https://jakecoppinger.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Introducing the Heart Foundation&#8217;s Community Walkability Map</title>
		<link>https://jakecoppinger.com/2025/06/introducing-the-heart-foundations-community-walkability-map/</link>
					<comments>https://jakecoppinger.com/2025/06/introducing-the-heart-foundations-community-walkability-map/#comments</comments>
		
		<dc:creator><![CDATA[Jake C]]></dc:creator>
		<pubDate>Sun, 29 Jun 2025 21:17:03 +0000</pubDate>
				<category><![CDATA[Australia]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Urbanism]]></category>
		<category><![CDATA[catchments]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[heart foundation]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[openstreetmap]]></category>
		<category><![CDATA[urbanism]]></category>
		<category><![CDATA[walkability]]></category>
		<category><![CDATA[walking]]></category>
		<guid isPermaLink="false">https://jakecoppinger.com/?p=2003</guid>

					<description><![CDATA[<p>I’m pleased to share the completion of a recent commercial engagement with the Heart Foundation: the Community Walkability Map, a new interactive tool designed to help communities understand and advocate for more walkable, healthier neighbourhoods.</p>
<p>The post <a href="https://jakecoppinger.com/2025/06/introducing-the-heart-foundations-community-walkability-map/">Introducing the Heart Foundation’s Community Walkability Map</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><em>Note: This post has also been published at <a href="https://urbanspectra.com/" target="_blank" rel="noreferrer noopener">UrbanSpectra.com</a>. UrbanSpectra is a studio building data-driven mapping and urban analysis software, founded by Jake Coppinger.</em></p>



<p>I’m pleased to share the completion of a recent commercial engagement with the Heart Foundation: the <a href="https://www.healthyactivebydesign.com.au/community-walkability/Interactive-map" target="_blank" rel="noopener" title="Community Walkability Map">Community Walkability Map</a>, a new interactive tool designed to help communities understand and advocate for more walkable, healthier neighbourhoods.</p>



<figure class="wp-block-image size-large"><a href="https://www.healthyactivebydesign.com.au/community-walkability/Interactive-map"><img fetchpriority="high" decoding="async" width="1024" height="877" src="https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquare-15min-1024x877.jpg" alt="" class="wp-image-2004" srcset="https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquare-15min-1024x877.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquare-15min-300x257.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquare-15min-768x658.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquare-15min-1536x1316.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquare-15min.jpg 2000w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption"><a href="https://www.healthyactivebydesign.com.au/community-walkability/Interactive-map" target="_blank" rel="noopener" title="">https://www.healthyactivebydesign.com.au/community-walkability/Interactive-map</a></figcaption></figure>



<h1 class="wp-block-heading" id="image-of-map-linking-to-httpswwwhealthyactivebydesigncomaucommunity-walkabilityinteractive-map">Table of contents</h1>



<div class="wp-block-aioseo-table-of-contents"><ul><li><a href="#about-the-project">About the Project</a></li><li><a href="#a-data-driven-tool-for-policy-and-advocacy">A Data-Driven Tool for Policy and Advocacy</a></li><li><a href="#additional-screenshot-of-project">Data Sources</a></li><li><a href="#reflections">Reflections</a></li><li><a href="#whats-next">What&#x2019;s Next?</a></li></ul></div>


<div id="mc_embed_shell"><style type="text/css">
        #mc_embed_signup{background:#fff; false;clear:left; font:14px Helvetica,Arial,sans-serif; width: 600px;}<br />
        /* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.<br />
           We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */<br />
</style>
<div id="mc_embed_signup"><form id="mc-embedded-subscribe-form" class="validate" action="https://jakecoppinger.us17.list-manage.com/subscribe/post?u=3c1bd4fc8fca6648af03e916a&amp;id=ad49243f2c&amp;f_id=00d3e4e3f0" method="post" name="mc-embedded-subscribe-form" target="_blank">
<div id="mc_embed_signup_scroll">
<h2><a href="http://eepurl.com/hemS9j" target="_blank" rel="noopener">Subscribe to Jake&#8217;s blog</a></h2>
Email notifications of new blog posts are infrequent, brief, and plain text.

</div>
</form></div>
</div>


<h1 class="wp-block-heading" id="about-the-project">About the Project</h1>



<p>The Heart Foundation has a longstanding commitment to environments that support heart health, physical activity, and healthy living. As part of this mission, they commissioned a user-friendly platform that visualises pedestrian access to everyday destinations &#8211; empowering residents, advocates, and planners alike to identify opportunities for improvement in the built environment.</p>



<p>The map allows users to drop a pin anywhere in Australia and visualise accessible destinations within 5, 10, 15, and 20-minute walk catchments. These walkability catchments are not based solely on distance &#8211; they account for real-world walking conditions including path connectivity, barriers such as highways, and signal timing delays.</p>



<p>This map is now a central feature of the Heart Foundation’s&nbsp;<a href="https://www.healthyactivebydesign.com.au/community-walkability">Community Walkability website</a>, which also includes community checklists, fact sheets, planning guides, and a Supporters’ Toolkit for professionals in the built environment sector.</p>



<h1 class="wp-block-heading" id="a-data-driven-tool-for-policy-and-advocacy">A Data-Driven Tool for Policy and Advocacy</h1>



<p>A key innovation of this project is the integration of&nbsp;traffic signal delay-aware isochrone modelling &#8211; a methodology that highlights delays to people walking at crossings, often overlooked in conventional walking catchment calculations.</p>



<p>Built using open-source OpenStreetMap data, the tool translates complex urban transport data into an intuitive, map-based interface that supports both strategic communication and policy engagement.</p>



<p>From a technical perspective, I led all aspects of the solution design and delivery, including:</p>



<ul class="wp-block-list">
<li>Co-design and scoping&nbsp;with the Heart Foundation team</li>



<li>Project management and delivery oversight, using an incremental approach with regular status updates</li>



<li>Backend isochrone algorithm development,&nbsp;implementing signal delay estimation</li>



<li>Geospatial data integration and transformation</li>



<li>Serverless backend development</li>



<li>Graphic design</li>



<li>Frontend software engineering</li>
</ul>



<p>The end result is a tool that blends open data, urban analytics, and visual storytelling to support healthier, more walkable communities.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="877" src="https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquarelib-10min-1024x877.jpg" alt="" class="wp-image-2006" srcset="https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquarelib-10min-1024x877.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquarelib-10min-300x257.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquarelib-10min-768x658.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquarelib-10min-1536x1316.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-greensquarelib-10min.jpg 2000w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Point of intersection pop-up functionality</figcaption></figure>



<h1 class="wp-block-heading" id="additional-screenshot-of-project">Data Sources</h1>



<p>The map’s core walkability modelling is based on&nbsp;OpenStreetMap (OSM)&nbsp;data. Where possible, users are encouraged to contribute updates to OSM or via the&nbsp;<a href="https://labs.mapbox.com/contribute/#/">Mapbox contribution portal</a>.</p>



<p>Additional datasets integrated under agreement with the Heart Foundation include:</p>



<ul class="wp-block-list">
<li><strong>Street lighting data</strong>&nbsp;from&nbsp;<a href="https://www.ausgrid.com.au/">Ausgrid</a>&nbsp;and&nbsp;<a href="https://www.powercor.com.au/">Citipower</a></li>



<li><strong>Tree canopy coverage</strong>&nbsp;from the&nbsp;<a href="https://datasets.seed.nsw.gov.au/dataset/urban-tree-canopy-cover-for-greater-sydney-2022">NSW DPHI</a>&nbsp;(CC BY 4.0)</li>



<li><strong>Traffic signal delay data</strong>&nbsp;from&nbsp;<a href="https://betterintersections.jakecoppinger.com/">Better Intersections</a>&nbsp;(ODbL licensed), supplemented with interpolation or estimated averages in data-sparse areas</li>
</ul>



<p>Users can explore data attributions directly via the&nbsp;<a href="https://www.healthyactivebydesign.com.au/community-walkability/Interactive-map">map interface</a>&nbsp;and are welcome to contribute additional signal timing measurements&nbsp;<a href="https://betterintersections.jakecoppinger.com/contribute-measurement">here</a>.</p>



<h1 class="wp-block-heading" id="reflections">Reflections</h1>



<p>It was a pleasure to work closely with&nbsp;Anna Gurnhill&nbsp;and the broader Heart Foundation team throughout this project. Their vision, clarity of purpose, and genuine commitment to creating healthier, more accessible communities made this a rewarding collaboration.</p>



<h1 class="wp-block-heading" id="whats-next">What’s Next?</h1>



<p>If you have an interesting challenge in the urban analytics, planning or community consultation space and would like to collaborate &#8211;&nbsp;<a href="mailto:jake@jakecoppinger.com">let&#8217;s chat</a>.</p>



<p>You can also read more about my background, including my five years as a full-stack engineer at Atlassian, open source work and policy advocacy&nbsp;<a href="https://jakecoppinger.com/2025/04/5-years-at-atlassian-and-whats-next/">here</a>. I&#8217;ll have more to share on a new commercial entity soon.</p>



<p>I&#8217;m looking to further explore the potential of traffic signal-aware isochrone analysis to quantify urban accessibility and support data-driven planning and placemaking initiatives.</p>



<p>I&#8217;m particularly interested in applying similar methodologies to cycling network analysis.</p>



<p>I retain ownership of the underlying IP developed in this project and am open to discussing its further application in other domains.</p>



<p><em>This blog post has been reviewed with the client before publication.</em></p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="1024" height="877" src="https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-bayst-5min-adjusted-signals-1024x877.jpg" alt="" class="wp-image-2007" style="width:827px;height:auto" srcset="https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-bayst-5min-adjusted-signals-1024x877.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-bayst-5min-adjusted-signals-300x257.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-bayst-5min-adjusted-signals-768x658.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-bayst-5min-adjusted-signals-1536x1316.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2025/06/walkmap-bayst-5min-adjusted-signals.jpg 2000w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">As described on the page, signal delay-aware walking catchments are currently rough estimates (and therefore don&#8217;t include figures). Note how the shape is visibly influenced by intersections on major roads, but not in the absence of signals.</figcaption></figure>



<p></p><p>The post <a href="https://jakecoppinger.com/2025/06/introducing-the-heart-foundations-community-walkability-map/">Introducing the Heart Foundation’s Community Walkability Map</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://jakecoppinger.com/2025/06/introducing-the-heart-foundations-community-walkability-map/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Shining a Light on the Traffic Signals of Sydney</title>
		<link>https://jakecoppinger.com/2023/07/shining-a-light-on-the-traffic-signals-of-sydney/</link>
					<comments>https://jakecoppinger.com/2023/07/shining-a-light-on-the-traffic-signals-of-sydney/#comments</comments>
		
		<dc:creator><![CDATA[Jake C]]></dc:creator>
		<pubDate>Mon, 10 Jul 2023 10:16:12 +0000</pubDate>
				<category><![CDATA[Cycling]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Side project]]></category>
		<category><![CDATA[Streets]]></category>
		<category><![CDATA[Sydney]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Urbanism]]></category>
		<category><![CDATA[australia]]></category>
		<category><![CDATA[beg buttons]]></category>
		<category><![CDATA[city of sydney]]></category>
		<category><![CDATA[lidar]]></category>
		<category><![CDATA[nsw]]></category>
		<category><![CDATA[openstreetmap]]></category>
		<category><![CDATA[signals]]></category>
		<category><![CDATA[sydney]]></category>
		<category><![CDATA[TfNSW]]></category>
		<category><![CDATA[traffic]]></category>
		<guid isPermaLink="false">https://jakecoppinger.com/?p=763</guid>

					<description><![CDATA[<p>This blog post provides an overview of traffic signal operation in Sydney (focusing on the inner city), based on technical documentation, conversations with government &#038; industry experts and data I've collected after building Better Intersections.</p>
<p>The post <a href="https://jakecoppinger.com/2023/07/shining-a-light-on-the-traffic-signals-of-sydney/">Shining a Light on the Traffic Signals of Sydney</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><em>See comments below, on <a href="https://mastodon.jakecoppinger.com/@jake/110692115754578364" target="_blank" rel="noopener" title="Mastodon">Mastodon</a>, <a href="https://www.linkedin.com/feed/update/urn:li:activity:7084282642010963968/" target="_blank" rel="noopener" title="">LinkedIn</a>, or <a href="https://old.reddit.com/r/australia/comments/14w86wk/shining_a_light_on_the_traffic_signals_of_sydney/" target="_blank" rel="noopener" title="">Reddit</a> (r/australia). See further coverage of Better Intersections on <a href="https://www.abc.net.au/news/2023-09-25/pedestrian-light-wait-times-in-sydney-research/102890326" target="_blank" rel="noopener" title="ABC News">ABC News</a> (<a href="https://old.reddit.com/r/sydney/comments/16recru/better_intersections_website_gathers_data_on_long/" target="_blank" rel="noopener" title="">Reddit</a>, <a href="https://www.linkedin.com/feed/update/urn:li:activity:7111875861762506752/" target="_blank" rel="noopener" title="">LinkedIn</a>), which has also been linked from the <a href="https://www.smh.com.au/national/nsw/the-change-to-our-traffic-lights-that-could-make-you-happier-20250129-p5l7zp.html" target="_blank" rel="noopener" title="Sydney Morning Herald">Sydney Morning Herald</a> (<a href="https://archive.is/bW5QT#selection-4299.105-4301.22:~:text=began%20crowdsourcing%20a%20survey" target="_blank" rel="noopener" title="Archive link">Archive url</a>). Consider this article evergreen &#8211; since the time of publishing (July 2023) I have updated it as I have learned more. Last edit made 2025-08-31.</em></p>



<p>This blog post provides an overview of traffic signal operation in Sydney (focusing on the inner city), based on technical documentation, conversations with government &amp; industry experts and data I&#8217;ve collected after building <a href="https://jakecoppinger.com/2023/06/mapping-pedestrian-traffic-light-timing-in-sydney-australia/">Better Intersections</a>.</p>



<p>Traffic signals are quite literally at the intersection of our urban spaces and transport policy. They have a huge impact on city life, <a href="http://content.tfl.gov.uk/factors-influencing-pedestrian-safety-literature-review.pdf" target="_blank" rel="noopener" title="">pedestrian safety</a>, and the <a href="http://nacto.org/publication/urban-street-design-guide/intersection-design-elements/traffic-signals/signal-cycle-lengths/" target="_blank" rel="noopener" title="">uptake of active transport like walking and cycling</a>. Through the brilliant <a href="https://www.movementandplace.nsw.gov.au/" target="_blank" rel="noopener" title="">Movement &amp; Place</a> framework, Transport for NSW has a <a href="https://www.movementandplace.nsw.gov.au/design-principles/design-road-and-streets-guide" target="_blank" rel="noopener" title="">stated goal</a> of increasing walking and cycling trips and <a href="https://www.movementandplace.nsw.gov.au/place-and-network/guides/network-planning-precincts-guide/network-planning-and-design-principles/principle-5-enable-connected-direct-and-comfortable-walking-and-cycling-movements#:~:text=lags%20between%20phases%2C-,long%20wait%20times,-%2C%20or%20where%20other" target="_blank" rel="noopener" title="reducing pedestrian wait times">reducing pedestrian wait times</a> at intersections.</p>



<p>Currently there is no open data on traffic light timing programming or timing in Sydney or NSW. Timing programming in a proprietary format can be purchased for <a href="https://www.transport.nsw.gov.au/system/files/media/documents/2025/Network_Operations_Schedule_of_Fees_01.08.22%201.pdf" target="_blank" rel="noopener" title="">AU$200</a> per intersection with a <a href="https://www.transport.nsw.gov.au/trafficsignal/traffic-signal-portal-terms" target="_blank" rel="noopener" title="">restrictive license</a> that does not guarantee advocacy organisations would not be faced with legal action. Meanwhile, <a href="https://mainroads.maps.arcgis.com/home/item.html?id=327c0f079090426c8e1e64b07972b3ee#overview" target="_blank" rel="noopener" title="WA Main Roads publishes">WA Main Roads publishes</a> monthly exports of past actual cycle time phases in GeoParquet format, and  <a href="https://discover.data.vic.gov.au/dataset/traffic-signal-configuration-data-sheets" target="_blank" rel="noopener" title="">Victoria publishes all their operational sheets under an open CC BY 4.0 license</a>, including &gt; ~10 PDF pages (or HTML sheets) of documentation per intersection (but still don&#8217;t include nominal cycle time).</p>



<p>I hope this article demonstrates why signal data should be as public as a train network timetable &#8211; and subject to the same public scrutiny and debate as one (even though complex trade-offs are involved). It&#8217;s long and dry, but should be a helpful resource for others looking to write more detailed or opinionated analyses.</p>



<p>Note: I am not a trained traffic engineer; my background is computer science and I work as a software engineer. This analysis is a side project. Please let me know of any mistakes, corrections or improvements in the comments below (or privately to <a href="mailto:jake@jakecoppinger.com" target="_blank" rel="noopener" title="">jake@jakecoppinger.com</a>) and I will update if incorrect. </p>


<div id="mc_embed_shell"><style type="text/css">
        #mc_embed_signup{background:#fff; false;clear:left; font:14px Helvetica,Arial,sans-serif; width: 600px;}<br />
        /* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.<br />
           We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */<br />
</style>
<div id="mc_embed_signup"><form id="mc-embedded-subscribe-form" class="validate" action="https://jakecoppinger.us17.list-manage.com/subscribe/post?u=3c1bd4fc8fca6648af03e916a&amp;id=ad49243f2c&amp;f_id=00d3e4e3f0" method="post" name="mc-embedded-subscribe-form" target="_blank">
<div id="mc_embed_signup_scroll">
<h2><a href="http://eepurl.com/hemS9j" target="_blank" rel="noopener">Subscribe to Jake&#8217;s blog</a></h2>
Email notifications of new blog posts are infrequent, brief, and plain text.

</div>
</form></div>
</div>


<h1 class="wp-block-heading">Table of contents</h1>



<div class="wp-block-aioseo-table-of-contents"><ul><li><a href="#aioseo-maps">Maps</a><ul><li><a href="#aioseo-automated-pedestrian-signals">Automated pedestrian signals</a></li></ul></li><li><a href="#aioseo-cycle-times">Traffic light cycle times</a><ul><li><a href="#aioseo-why-do-cycle-times-matter">Why do traffic light cycle times matter?</a></li><li><a href="#aioseo-cycle-times-in-sydney-verses-the-world">Sydney lags behind best practice signal timing compared to London, Copenhagen and the USA</a></li><li><a href="#aioseo-analysis-of-open-source-data-collected-via-better-intersections">Open source data collected with Better Intersections</a></li><li><a href="#aioseo-how-are-cycle-times-set-in-sydney">Who sets signal cycle times in Sydney?</a></li><li><a href="#aioseo-tfnsw-policy-on-cycle-times">TfNSW does not currently have a policy on cycle times</a></li></ul></li><li><a href="#aioseo-how-long-do-pedestrians-get-to-cross-the-road">How long do pedestrians get to cross the road?</a><ul><li><a href="#aioseo-length-of-green-light">Length of green light</a></li><li><a href="#aioseo-length-of-flashing-red-light">Length of flashing red light</a></li></ul></li><li><a href="#aioseo-when-and-why-are-cars-allowed-to-cross-when-people-are-still-walking">When and why are cars allowed to cross when people are still walking?</a></li><li><a href="#aioseo-automated-pedestrian-traffic-signals">Automated pedestrian traffic signals / automatic introduction</a><ul><li><a href="#aioseo-pedestrian-crossings-during-covid-outbreaks">Pedestrian crossings during COVID outbreaks</a></li><li><a href="#aioseo-removal-of-automated-pedestrian-crossings-after-covid-outbreaks">Removal of automated pedestrian crossings after COVID outbreaks</a></li><li><a href="#aioseo-muting-of-audible-traffic-signals-in-brisbane">Muting of audible traffic signals in Brisbane</a></li><li><a href="#aioseo-automated">Automatic introduction of pedestrians signals in Melbourne</a></li></ul></li><li><a href="#aioseo-pedestrian-priority-signals-beg-button-for-cars">Pedestrian priority signals / cars requesting to cross the road</a><ul><li><a href="#aioseo-research">Research</a></li></ul></li><li><a href="#aioseo-isolated-signals">Isolated signals</a><ul><li><a href="#aioseo-locations-of-isolated-signals">Locations of isolated signals</a></li></ul></li><li><a href="#aioseo-what-sort-of-green-waves-are-used">What sort of &#x22;green waves&#x22; are used?</a><ul><li><a href="#green-waves-in-melbourne">Green waves for cyclists in Melbourne</a></li><li><a href="#aioseo-green-waves-for-cyclists-in-copenhagen">Green waves for cyclists in Copenhagen</a></li></ul></li><li><a href="#aioseo-complaint-process-for-signals">The complaint process for pedestrian signal timing discourages feedback</a></li><li><a href="#aioseo-why-do-traffic-signals-take-so-long-to-implement-redesign">Why do traffic signals take so long to implement / redesign?</a></li><li><a href="#aioseo-scats-data-cost-and-access">The extremely high cost of purchasing SCATS timing data</a><ul><li><a href="#aioseo-reasoning-against-release-of-signal-timing-data-in-nsw">TfNSW reasoning against release of signal timing data in NSW</a></li></ul></li><li><a href="#aioseo-scats-upgrade">SCATS upgrade</a></li><li><a href="#aioseo-do-buses-get-priority-which-routes">Do buses get signal priority? Which routes and when?</a></li><li><a href="#future-signal-development">Future signal development</a><ul><li><a href="#aioseo-media-reports-on-scats-upgrade">Media reports on SCATS upgrade</a></li><li><a href="#aioseo-trials-of-using-lida">More advanced pedestrian and cyclist detectors</a></li><li><a href="#aioseo-trials-of-using-lida">Lidar detectors</a></li><li><a href="#aioseo-infrared-detectors">Infrared and camera detectors</a></li><li><a href="#aioseo-touchless-pedestrian-activation-trial">Touchless pedestrian activation trial</a></li></ul></li><li><a href="#aioseo-additional-notes">Additional notes</a><ul><li><a href="#aioseo-dynamic-cycle-times">The Sydney CBD effectively operates as a fixed time system during peak times</a></li></ul></li><li><a href="#aioseo-further-reading">That&#x27;s all folks!</a></li><li><a href="#aioseo-further-reading">Further reading</a></li></ul></div>



<h1 class="wp-block-heading" id="aioseo-maps">Maps</h1>



<h2 class="wp-block-heading" id="aioseo-automated-pedestrian-signals">Automated pedestrian signals</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="718" height="1024" src="https://jakecoppinger.com/wp-content/uploads/2023/07/sydney-cbd-automated-pedestrian-signals-map-718x1024.jpg" alt="" class="wp-image-765" style="object-fit:cover" srcset="https://jakecoppinger.com/wp-content/uploads/2023/07/sydney-cbd-automated-pedestrian-signals-map-718x1024.jpg 718w, https://jakecoppinger.com/wp-content/uploads/2023/07/sydney-cbd-automated-pedestrian-signals-map-210x300.jpg 210w, https://jakecoppinger.com/wp-content/uploads/2023/07/sydney-cbd-automated-pedestrian-signals-map-768x1095.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/07/sydney-cbd-automated-pedestrian-signals-map-1078x1536.jpg 1078w, https://jakecoppinger.com/wp-content/uploads/2023/07/sydney-cbd-automated-pedestrian-signals-map-1437x2048.jpg 1437w, https://jakecoppinger.com/wp-content/uploads/2023/07/sydney-cbd-automated-pedestrian-signals-map.jpg 1500w" sizes="auto, (max-width: 718px) 100vw, 718px" /></figure>



<p>Above: <a href="http://files.jakecoppinger.com/traffic-signals/GS_2402_AUTOMATED+PEDESTRIAN+CROSSINGS+MAP_V006_17JAN23.pdf" target="_blank" rel="noopener" title="Map of automated pedestrian signals in Sydney's CBD, ref GS22402_V006_17JAN23">Map of automated pedestrian signals in Sydney&#8217;s CBD, ref <code>GS22402_V006_17JAN23</code></a> (Source: TfNSW, supplied. Published with permission.)</p>



<p>In the blue area some major roads (state roads) have the automatic pedestrian signal feature disabled. These exact locations are publicly unknown.&nbsp;</p>



<p>Earlier automatic signal maps are published as:</p>



<ul class="wp-block-list">
<li>GS22402_V004_15DEC22: <a href="https://transportnsw.info/document/6231/gs_2402_automated_pedestrian_crossings_map_v004_15dec22.pdf" target="_blank" rel="noopener" title="">https://transportnsw.info/document/6231/gs_2402_automated_pedestrian_crossings_map_v004_15dec22.pdf</a></li>



<li>SCO_0573 / 002/ 23MAR20: <a href="https://transportnsw.info/document/4897/sydney-cbd-pyrmont-pedestrian-access-automation-map_23mar20.pdf" target="_blank" rel="noopener" title="">https://transportnsw.info/document/4897/sydney-cbd-pyrmont-pedestrian-access-automation-map_23mar20.pdf</a></li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="724" height="1024" src="https://jakecoppinger.com/wp-content/uploads/2023/07/cbd-signal-phasing-times-724x1024.jpg" alt="" class="wp-image-766" srcset="https://jakecoppinger.com/wp-content/uploads/2023/07/cbd-signal-phasing-times-724x1024.jpg 724w, https://jakecoppinger.com/wp-content/uploads/2023/07/cbd-signal-phasing-times-212x300.jpg 212w, https://jakecoppinger.com/wp-content/uploads/2023/07/cbd-signal-phasing-times-768x1086.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/07/cbd-signal-phasing-times-1086x1536.jpg 1086w, https://jakecoppinger.com/wp-content/uploads/2023/07/cbd-signal-phasing-times-1448x2048.jpg 1448w, https://jakecoppinger.com/wp-content/uploads/2023/07/cbd-signal-phasing-times.jpg 1500w" sizes="auto, (max-width: 724px) 100vw, 724px" /></figure>



<p>Above: Map of CBD signal phasing times, 2018 (Source: TfNSW, supplied. Published with permission). Filename <code><a href="http://files.jakecoppinger.com/traffic-signals/CCO_0604_SYDNEY+CBD+BRIDGE+ST+TO+GOULBURN+ST+PED+EVAL+MAP_05APR18_V005+(1).pdf" target="_blank" rel="noopener" title="CCO_0604_SYDNEY CBD BRIDGE ST TO GOULBURN ST PED EVAL MAP_05APR18_V005">CCO_0604_SYDNEY CBD BRIDGE ST TO GOULBURN ST PED EVAL MAP_05APR18_V005</a></code>.</p>



<p>This map has not previously been publicly available. The above map shows the state of the city in April 2018. The &#8220;Study area&#8221; border is still a broadly accurate border of the 90 seconds cycle area, with minor changes at the edges (also not publicly available). A number of years ago (I don&#8217;t know exactly when) the cycle time was 120 seconds, which had been reduced to 110 seconds.</p>



<p>Some of these intersections (10 or 15) sometimes runs 45 seconds in off peaks. These appear to be intersections with more people, but there is no guidance on how these were selected.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="623" src="https://jakecoppinger.com/wp-content/uploads/2023/12/better-intersections-dec-23-1024x623.jpg" alt="" class="wp-image-1078" style="aspect-ratio:1.6436597110754414;width:826px;height:auto" srcset="https://jakecoppinger.com/wp-content/uploads/2023/12/better-intersections-dec-23-1024x623.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/12/better-intersections-dec-23-300x183.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/12/better-intersections-dec-23-768x467.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/12/better-intersections-dec-23-1536x935.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/12/better-intersections-dec-23-2048x1246.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Above, <a href="https://betterintersections.jakecoppinger.com/" target="_blank" rel="noopener" title="">Better Intersections</a> (in December 2023), open source and open data</figcaption></figure>



<ul class="wp-block-list">
<li>Map of traffic signals with countdown timers in OpenStreetMap (needs some work, let me know if you know of others): <a href="https://overpass-turbo.eu/s/1wVx" target="_blank" rel="noopener" title="">https://overpass-turbo.eu/s/1wVx</a></li>



<li>Map of scramble crossings in OpenStreetMap (needs some work, let me know if you know of others) <a href="https://overpass-turbo.eu/s/1wAk" target="_blank" rel="noreferrer noopener">https://overpass-turbo.eu/s/1wAk</a></li>
</ul>



<h1 class="wp-block-heading" id="aioseo-cycle-times">Traffic light cycle times</h1>



<h3 class="wp-block-heading" id="aioseo-why-do-cycle-times-matter">Why do traffic light cycle times matter?</h3>



<p>Walking and cycling are more attractive when you don&#8217;t have to wait for minutes at a traffic light. When pedestrians have to wait more than 30 seconds they are more likely to cross on a red light. (<a href="http://content.tfl.gov.uk/factors-influencing-pedestrian-safety-literature-review.pdf" target="_blank" rel="noreferrer noopener">Martin, A., 2006. Factors influencing pedestrian safety: a literature review (No. PPR241). Wokingham, Berks: TRL (Transport for London</a>). Longer light cycle times <a href="https://www.unsw.edu.au/news/2021/07/pedestrians-should-get-the-green-light-on-traffic-signal-priorit" target="_blank" rel="noopener" title="">increase car throughput</a> and increase vehicle speeds at the expense of pedestrian &amp; cyclist amenity.</p>



<p>Sydney is an important study location as it is the birthplace and development location of the <a href="https://en.wikipedia.org/wiki/Sydney_Coordinated_Adaptive_Traffic_System">Sydney Coordinated Adaptive Traffic System</a> (abbreviated SCATS). This traffic management system includes an algorithm that optimises traffic throughput at signals, but it can only measure vehicle volume on the road. I have been told it has been used in Shanghai to measure bicycle volumes to calculate phase times for cyclists, but am unable to verify this.</p>



<p>SCATS does not count people on the footpath, and the crossing phase is only &#8220;called&#8221; by either a push button or by being automated. It currently does not support a non-binary pedestrian presence &#8211; innovative solutions like LiDAR or computer vision need to count pedestrians and <em>then</em> activate a (boolean) sensor value. It is unclear whether in-progress upgrades to SCATS will provide any functionality to measure or prioritise pedestrians and cyclists. Press releases mention prioritisation but previous work to add more interfaces to SCATS has not been widely released (see <a href="#future-signal-development" title="">Future Signal Development</a> section).</p>



<p>The NSW Government sells the system commercially <a href="https://www.scats.nsw.gov.au/">to 30 countries and 200 cities around the world</a> by the NSW Government. We are quite literally exporting our biases (in technical respects like limited pedestrian counting functionality &#8211; maximum cycle time and other choices are made by the local operator).</p>



<p>The Transport for NSW (TfNSW) technical guide, <a href="https://web.archive.org/web/20230331035508/https://roads-waterways.transport.nsw.gov.au/business-industry/partners-suppliers/documents/guidelines/complementary-traffic-material/tsdsect07v1-3.pdf" target="_blank" rel="noopener" title="">&#8220;Traffic Signal Design Guide: Section 7 Phasing and Signal Group Display Sequence&#8221; (2016)</a> states one of the design objectives of choice of phasing should be to minimise the cycle time (pg 5).</p>



<h2 class="wp-block-heading" id="aioseo-cycle-times-in-sydney-verses-the-world">Sydney lags behind best practice signal timing compared to London, Copenhagen and the USA</h2>



<p>The Sydney CBD has a 90 second SCATS maximum cycle time which is generally considered short by Australian standards. The CBD cycle time was reduced from 110 seconds to 90 seconds on the 7th of January 2018 (<a href="https://meetings.cityofsydney.nsw.gov.au/documents/s19296/Pedestrian%20Signals.pdf" target="_blank" rel="noopener" title="CoS motion 2018-08-17">CoS motion 2018-08-17</a>). This achievement was noted in the 2020 report by Gehl Architects 2020:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>The reduction in waiting times has improved pedestrian amenity, however further improvements can be made.<br>&#8230;<br>Transport NSW have reduced pedestrian signal cycle time from 110 seconds to 90 seconds enabling more frequent crossing opportunities for pedestrians.<br><br>Further changes will be explored after light rail becomes operational to ascertain further efficiencies.</p>
<cite><a href="https://www.cityofsydney.nsw.gov.au/-/media/corporate/files/publications/research-and-reports/public-spaces-and-public-life-studies/sydney-public-space-and-public-life.pdf?download=true" target="_blank" rel="noopener" title="&quot;Public Space &amp; Public Life Study 2020&quot; Gehl Architects, page 142">&#8220;Public Space &amp; Public Life Study 2020&#8221; Gehl Architects, page 142</a></cite></blockquote>



<p>TfNSW &amp; the RMS undertook monitoring for a three month period to assess impacts across the network (<a href="https://www.mynrma.com.au/-/media/documents/advocacy/look-up-keeping-pedestrians-safe.pdf" target="_blank" rel="noopener" title="&quot;Look up: Keeping pedestrians safe, June 2019, NRMA, PDF page 8">&#8220;Look up: Keeping pedestrians safe, June 2019, NRMA, PDF page 8</a>, in turn referencing &#8220;Transport for NSW (2019). Personal correspondence.&#8221;) It was reduced from 120 seconds to 110 seconds a few years prior (I do not know when).</p>



<p>Copenhagen has a 70 second cycle time as the maximum, and high pedestrian usage areas have cycles of 48-60 seconds. Gehl Architect&#8217;s state &#8220;Jaywalking is not a common phenomena in Copenhagen as traffic lights accommodate for reasonable waiting times for pedestrians&#8221; (<a href="https://www.cityofsydney.nsw.gov.au/surveys-case-studies-reports/public-spaces-public-life-studies" target="_blank" rel="noopener" title="">Gehl Architects, Public spaces &amp; public life: Sydney 2007 (part 1), page 142</a>).</p>



<p>The London Cycling Design Standards <a href="https://content.tfl.gov.uk/lcds-chapter5-junctionsandcrossings.pdf">states</a> &#8220;junctions with pedestrian crossing facilities, signal cycle times should only <strong><em>exceptionally</em></strong>* be longer than 90 seconds.&#8221; *(emphasis mine).</p>



<p>The 2018 transport for London walking action plan states:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>TfL has responsibility for all London’s traffic signals, undertaking annual timing reviews at 1,200 signal junctions and crossings. In 2017, TfL reduced the wait times for people walking at 200 crossing locations close to schools, hospitals and transport hubs (see Figure 8). From 2018 onwards, this will be an objective for all signal timing reviews and, for the first time, ‘pedestrian time saved’ will be measured alongside other performance metrics.</p>



<p>Of the 200 reviewed crossings to date, 94 per cent now run a cycle time of less than one minute, meaning that if a person walking was to arrive just as the red signal for pedestrians came on and traffic was given a green light, they would only wait around 40 seconds or less to cross.</p>
<cite><a href="https://content.tfl.gov.uk/mts-walking-action-plan.pdf" target="_blank" rel="noopener" title="">Chapter 6 – Building and managing streets, &#8220;Walking action plan &#8211; Making London the world’s most walkable city&#8221;, Transport for London, July 2018 (PDF page 29)</a></cite></blockquote>



<p>The Urban Street Design Guide by the (USA) <a href="https://en.wikipedia.org/wiki/National_Association_of_City_Transportation_Officials">National Association of City Transportation Officials</a> recommends cycle times of <a href="https://nacto.org/publication/urban-street-design-guide/intersection-design-elements/traffic-signals/signal-cycle-lengths/">60-90 seconds in urban areas</a>.</p>



<p>See traffic signal cycle times around the world on <a href="https://betterintersections.jakecoppinger.com/" target="_blank" rel="noopener" title="">Better Intersections</a>, and see graphs and charts at <a href="https://betterintersections.jakecoppinger.com/analysis" target="_blank" rel="noopener" title="">betterintersections.jakecoppinger.com/analysis</a>.</p>



<h2 class="wp-block-heading" id="aioseo-analysis-of-open-source-data-collected-via-better-intersections">Open source data collected with Better Intersections</h2>



<p>I previously wrote a blog post on a website I built to crowd-source the collection of pedestrian traffic light timings: <a href="https://jakecoppinger.com/2023/06/mapping-pedestrian-traffic-light-timing-in-sydney-australia/" target="_blank" rel="noopener" title="">https://jakecoppinger.com/2023/06/mapping-pedestrian-traffic-light-timing-in-sydney-australia/</a></p>



<p>The data is licensed ODbL (for you, OpenStreetMap contributors!) and the website is open source too.</p>



<p>It has collected over 800 data points, each with measurements on green duration, flashing red duration, solid red duration, and notes such as whether the crossing is protected or has a countdown timer. Community groups including <a href="https://walksydney.org/" target="_blank" rel="noopener" title="">WalkSydney</a> have expressed interest in involving their members in sourcing measurements.</p>



<p><a href="https://maxbo.me/" target="_blank" rel="noopener" title="">Max Bo</a>, a software engineer at Canva, has also begun some preliminary analysis of the data using the informational visualisation platform Observable: <a href="https://observablehq.com/@mjbo/better-intersections-sydney-traffic-light-timings">https://observablehq.com/@mjbo/better-intersections-sydney-traffic-light-timings</a></p>



<h2 class="wp-block-heading" id="aioseo-how-are-cycle-times-set-in-sydney">Who sets signal cycle times in Sydney?</h2>



<p>In NSW the state transport department (TfNSW) builds, maintains, programs and operates all traffic signals. This is the case even on local roads <a href="https://lgnsw.org.au/Public/Public/Policy/Roads-and-Transport.aspx" target="_blank" rel="noopener" title="">(90% of all roads), where the local council is the authority</a>.</p>



<p>TfNSW Operations has the very challenging task of designing and operating the timing of the network, with many stakeholders and a steady flow of complaints.</p>



<p>At present I understand that there is not a perceived need for the data to be published, however it is not considered to be confidential (see the below section <a href="https://jakecoppinger.com/2023/07/shining-a-light-on-the-traffic-signals-of-sydney/#aioseo-reasoning-against-release-of-signal-timing-data-in-nsw">TfNSW reasoning against release of signal timing data in NSW</a>). On the contrary I would like to note the extremely restrictive license conditions upon purchase of traffic data detailed below. From what I can understand, one of the main reasons why the data has not been freely published is that the data export is a manual process. However, no data on minimum or maximum green times is published in NSW, though Victoria (who also use SCATS for their traffic lights) <a href="https://discover.data.vic.gov.au/dataset/traffic-signal-configuration-data-sheets" target="_blank" rel="noreferrer noopener">publishes all their operational sheets under an open CC BY 4.0 license</a>.</p>



<p>Many transport advocacy groups, such as <a href="https://walksydney.org/" target="_blank" rel="noopener" title="">WalkSydney</a> and <a href="https://bicyclensw.org.au/" target="_blank" rel="noopener" title="">BicycleNSW</a> have attempted to source this data for a number of years for advocacy purposes to further understand how to better support vulnerable road users, but to date have not gained access. The <a href="https://www.transport.nsw.gov.au/trafficsignal/traffic-signal-portal-terms" target="_blank" rel="noopener" title="">restrictive license</a> on data sourced from the <a href="https://www.transport.nsw.gov.au/trafficsignal/traffic-signal-portal-terms" target="_blank" rel="noopener" title="TfNSW Traffic Signal Portal">TfNSW Traffic Signal Portal</a> does not make it clear if any use of the data for advocacy purposes would result in legal action by the state.</p>



<p>In the City of Sydney (the CBD) the TfNSW operations team will know in little time if gridlock occurs, either from stakeholders or an extensive network of remotely controlled pan/tilt traffic video cameras (though they&#8217;re likely too busy to be watching such feeds unless an issue presents). They have to manage the traffic volume entering the CBD grid from motorway off ramps to prevent the queuing of cars on motorways.</p>



<p><a href="https://en.wikipedia.org/wiki/Freeway_removal#Notable_freeway_removals" target="_blank" rel="noopener" title="Whilst many cities are demilishing their urban motorways">Whilst many cities are demolishing their urban motorways</a>, the recent <a href="https://en.wikipedia.org/wiki/WestConnex" target="_blank" rel="noopener" title="WestConnex">WestConnex</a> urban motorway project was recently constructed under a public-private partnership between the NSW State Government and <a href="https://en.wikipedia.org/wiki/Transurban#Sydney" target="_blank" rel="noopener" title="">Transurban</a>. Transurban is a publicly listed company that after <a href="https://theconversation.com/privatising-westconnex-is-the-biggest-waste-of-public-funds-for-corporate-gain-in-australian-history-102790" target="_blank" rel="noreferrer noopener">considerable privatisation</a>, <a href="https://www.smh.com.au/politics/nsw/one-company-owns-the-bulk-of-sydney-s-toll-roads-will-it-buy-westconnex-too-20180427-p4zbzr.html" target="_blank" rel="noopener" title="">has majority ownership of 95 of the 99 kilometres</a> of Sydney&#8217;s toll roads.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="808" src="https://jakecoppinger.com/wp-content/uploads/2023/07/pitt-st-1024x808.jpg" alt="" class="wp-image-814" srcset="https://jakecoppinger.com/wp-content/uploads/2023/07/pitt-st-1024x808.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/07/pitt-st-300x237.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/07/pitt-st-768x606.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/07/pitt-st-1536x1212.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/07/pitt-st.jpg 1962w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Note the motorway on and off ramps directly into the CBD grid.</figcaption></figure>



<figure class="wp-block-image size-large"><a href="https://en.wikipedia.org/wiki/Draft:Southern_Arterial_Route"><img loading="lazy" decoding="async" width="1024" height="750" src="https://jakecoppinger.com/wp-content/uploads/2023/07/harris-st-1024x750.jpg" alt="" class="wp-image-815" srcset="https://jakecoppinger.com/wp-content/uploads/2023/07/harris-st-1024x750.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/07/harris-st-300x220.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/07/harris-st-768x562.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/07/harris-st-1536x1124.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/07/harris-st.jpg 1940w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Note the Western Distributor off ramps, which funnels vehicles into a system of one-way roads known as the Southern Arterial Route in planning documents. One of the pedestrian crossings (Harris St &amp; Allen St) was demolished to increase the road capacity of the Allen St offramp.</figcaption></figure>



<p>A given intersection will have a number of phases programmed into SCATS. A phase is a particular movement at an intersection (such as cars green in one direction and red for the other direction).</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="826" src="https://jakecoppinger.com/wp-content/uploads/2023/07/scats-intersection-diagram-2-1024x826.jpg" alt="" class="wp-image-774" srcset="https://jakecoppinger.com/wp-content/uploads/2023/07/scats-intersection-diagram-2-1024x826.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-intersection-diagram-2-300x242.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-intersection-diagram-2-768x620.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-intersection-diagram-2.jpg 1500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">&#8220;The New Generation SCATS 6&#8221;, date unknown: <a href="https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx">https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx</a></figcaption></figure>



<p>Note the phases on the left hand side of the SCATS software.</p>



<p>For a deep dive on the SCATS software, see &#8220;The New Generation SCATS 6&#8221;: <a href="https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx">https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx</a></p>



<h2 class="wp-block-heading" id="aioseo-tfnsw-policy-on-cycle-times">TfNSW does not currently have a policy on cycle times</h2>



<p>Transport for NSW’s Traffic Signal Operation document does not provide specific guidelines on cycle times and only focuses on safety critical timings. This means they do not currently have public guidelines for traffic signal cycle times.</p>



<p>However, &#8220;method 3&#8221;, page 7 of the Technical Direction on Traffic Modelling (<a href="https://roads-waterways.transport.nsw.gov.au/trafficinformation/downloads/ttd_2018-002.pdf" target="_blank" rel="noreferrer noopener">https://roads-waterways.transport.nsw.gov.au/trafficinformation/downloads/ttd_2018-002.pdf</a>) states</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Method 3 (for new signals)<br><strong><em>Assume a typical phase configuration and a cycle time of 140 sec </em></strong>(longer or shorter than 140 sec times may be used when accepted by RMS) and calculate phase times using traffic signals software such as SIDRA, LinSig, TRANSYT, etc. Then set initial maximum green times of all phases in the same way as in Method 1.</p>
<cite>https://roads-waterways.transport.nsw.gov.au/trafficinformation/downloads/ttd_2018-002.pdf</cite></blockquote>



<p>This appears to be a statement of an internal policy, but note the words &#8220;unless accepted by RMS&#8221; (the predecessor to TfNSW).</p>



<p>The <a href="https://www.transport.nsw.gov.au/system/files/media/documents/2021/road-user-space-allocation-policy.pdf" target="_blank" rel="noopener" title="">TfNSW Road User Space Allocation Policy</a> provides strategic advice but does not provide any guidelines for cycle times. It specifies the equitable allocation of of temporal and spatial space must consider walking first:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em>This policy sets out the mandatory principles and requirements Transport staff must follow when allocating physical and&nbsp;</em><strong><em>temporal</em></strong><em>&nbsp;road user space safely and equitably to support the movement of people and goods and place objectives.&nbsp;</em><strong><em>(emphasis mine)</em></strong>&nbsp;</p>



<p><em>Transport must allocate road user space based on the following principles:</em><br>…<br>– <em>allocate road user space based on the network vision and road functions, considering all road users in order of:</em>&nbsp;</p>



<ol class="wp-block-list">
<li><em>walking (including equitable access for people of all abilities)</em></li>



<li><em>cycling (including legal micro-mobility devices)</em>&nbsp;</li>



<li><em>public transport</em>&nbsp;</li>



<li><em>freight and servicing</em>&nbsp;</li>



<li><em>point to point transport</em>&nbsp;</li>



<li><em>general traffic and on-street parking for private motorised vehicles.</em>&nbsp;</li>
</ol>
<cite><a href="https://www.transport.nsw.gov.au/system/files/media/documents/2024/road-user-space-allocation-policy_july-2024.pdf" target="_blank" rel="noopener" title="TfNSW RUSAP, page 2">TfNSW RUSAP, page 2</a></cite></blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p></p>
</blockquote>



<p>Although there is no policy or commitment to lower cycle times and pedestrian waiting times, it is apparent the lower cycle times are situated in areas of high pedestrian activity.</p>



<p>Note that for coordination, a common cycle time must be used, so generally, intersections in a network or along an arterial road need to have the same minimum and maximum.</p>



<p>I have been told SCATS has a feature of multiple minimum cycle times which are chosen based on the <a href="https://en.wikipedia.org/wiki/Saturation_(traffic)" target="_blank" rel="noopener" title="">degree of saturation</a> (DS). Switching between such minimums can result in a large drop in cycle time relatively quickly.</p>



<h1 class="wp-block-heading" id="aioseo-how-long-do-pedestrians-get-to-cross-the-road">How long do pedestrians get to cross the road?</h1>



<h2 class="wp-block-heading" id="aioseo-length-of-green-light">Length of green light</h2>



<p>The length of the green pedestrian signal at traffic lights is calculated by summing a minimum value, plus a constant amount predetermined by how many people will cross at the intersection (in theory).</p>



<p>The NSW standard is for a minimum 6 second green light, and then an extra 2 seconds for each additional rank (row of people) above 3. This presumes that 6 seconds is enough to clear 3 rows of people from the adjacent footpath.</p>



<p>This NSW operational theory falls down in the CBD when there are large volumes of people.</p>



<p>Although not formalised the operations team are constantly reviewing intersections in the CBD especially for pedestrians. Furthermore, for major projects such as Sydney Metro or Light Rail, modelling with <a href="https://content.tfl.gov.uk/pedestrian-comfort-guidance-technical-guide.pdf" target="_blank" rel="noopener" title="">Pedestrian Comfort Levels as per TfL standards</a> or TfNSW Walking Space Guide is undertaken on nearby footpaths and intersections to ensure reasonable levels of service are maintained.&nbsp; &nbsp;</p>



<p>In general the length of time is set by manual observation (not real time CCTV or computer vision or anything), and is private. (see below section on SCATS data cost).</p>



<p>Information I&#8217;ve not been able to ascertain includes:</p>



<ul class="wp-block-list">
<li>how often measurements of the pedestrian volume are taken;</li>



<li>what time of day they are taken;</li>



<li>whether the min/max/avg/85th percentile is used;</li>



<li>how often they are updated.</li>
</ul>



<p>In Victoria, <a href="https://www.vicroads.vic.gov.au/-/media/files/technical-documents-new/miscellaneous-guidelines/transport-modelling-guidelines-volume-5-intersection-modelling-june-2020.ashx" target="_blank" rel="noopener" title="">Volume 5: Intersection Modelling of the Transport Modelling Guidelines (2020)</a> specifies:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>At existing locations, where a revision to the intersection control is proposed, pedestrian crossing counts should be undertaken. These would usually be done as part of video surveys of <strong><em>peak</em></strong> periods (Section 6.6.1.1). This is particularly important where pedestrians will be provided with priority over vehicular traffic as it can have a significant impact on capacity e.g. left hand turn movements. The presence of <strong><em>high numbers of pedestrians may also influence the form of intersection control</em></strong> on safety and amenity grounds. The data collection may involve more than just an aggregate number of people at a site but might identify how pedestrians impact the movement of traffic.</p>
<cite>(emphasis mine)</cite></blockquote>



<p>The Victoria Department of Transport even release their manual count data from detector and survey locations, <s>though the link appears to currently be broken.</s></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>The Department of Transport have a repository of manual count data from detector and survey locations. For further information and project specific request visit the following link: <a href="https://www.vicroads.vic.gov.au/traffic-and-road-use/road-network-and-performance/road-use-and-performance">https://www.vicroads.vic.gov.au/traffic-and-road-use/road-network-and-performance/road-use-and-performance</a></p>
</blockquote>



<p>When there is no need to make the pedestrian light red (that is, there are no cars to implicitly prioritise and move across the intersection), the pedestrian green light will stay on for as long as possible until the end of the non-conflicting phase (subtracting the time for the flashing red of course).</p>



<p>The green walk period can be extended at schools during school hours, either by time-of-day routine (Personal correspondance, 2025-03). I am unsure of how such locations are specified or how much extension is provided.</p>



<p>SCATS has three methods of controlling the length of the green walk signal:</p>



<ol class="wp-block-list">
<li>terminate “x” seconds from the start of the phase</li>



<li>terminate “x” seconds from the end of the phase</li>



<li>walk for green – stay green for as long as possible regardless of phase length</li>
</ol>



<p>In all cases, the green signal for pedestrians is never be displayed for less than the minimum time as defined in the times setting saved inside the traffic signal controller.</p>



<h2 class="wp-block-heading" id="aioseo-length-of-flashing-red-light">Length of flashing red light</h2>



<p>The length of the flashing red light is determined by the road width. People are assumed to walk at 1.2 metres per second (an 85% percentile figure, so about 15% of people walk slower than this), so the road width divided by this figure is used to determine the minimum flashing red time. </p>



<h1 class="wp-block-heading" id="aioseo-when-and-why-are-cars-allowed-to-cross-when-people-are-still-walking">When and why are cars allowed to cross when people are still walking?</h1>



<p>The flashing red light is legally <a href="https://www.transport.nsw.gov.au/roadsafety/pedestrians/staying-safe" target="_blank" rel="noopener" title="">defined</a> so that pedestrians may not step off the kerb, but may finish their crossing.</p>



<p>Generally cars are allowed to have a green light when a flashing red light exists for pedestrians, and they are meant to yield to pedestrians.</p>



<p>Vehicles turning left or right who enter an intersection on a green roundel must give way to pedestrians on parallel crossings when either the Green man or flashing red man is displayed.&nbsp;&nbsp;&nbsp;</p>



<p>TfNSW is undertaking a safety program to add red arrows to prevent &#8220;green-on-green&#8221; occurrences &#8211; when pedestrians and cars have a green traffic light which is in conflict.</p>



<p>It is being rolled out at two-phase signalised intersections across NSW, and is being expanded to cover all traffic signals. The modification is mandated whenever major works are undertaken outside the program.</p>



<p>While this program undeniably improves pedestrian safety and is a positive change, it is unclear whether reducing vehicle speeds would be a more cost effective use of taxpayer money than retrofitting thousands of traffic signals in NSW (or could be pursued in addition). I consider this outside the scope of this blog post. </p>



<h1 class="wp-block-heading" id="aioseo-automated-pedestrian-traffic-signals">Automated pedestrian traffic signals / automatic introduction</h1>



<p>Automated pedestrian traffic signals don&#8217;t require a pedestrian to press a button to request to cross the road.</p>



<p>When the pedestrian phase is automated:</p>



<ul class="wp-block-list">
<li>The button does nothing when pressed (placebo)</li>



<li>The pedestrian phase is never skipped &#8211; every SCATS traffic light cycle includes the pedestrian phase</li>
</ul>



<p>Non-automated pedestrian signals may skip the pedestrian phase if the button is not pressed.</p>



<p>There is no such functionality where holding in a PB/5 pedestrian button extends the green light for pedestrians.</p>



<p>Pressing the request button before the car phase goes red should guarantee the green man for pedestrians (prevent skipping the green pedestrian phase), however this varies depending on the age and model of the controller. I&#8217;ve not come across any public information on differences between controllers on this behaviour in my readings thus far.</p>



<p>The actual pedestrian-experienced duration between when you push the button and you can actually cross is a mystery &#8211; not public knowledge, and I have not yet implemented the ability to measure this with <a href="https://betterintersections.jakecoppinger.com/" target="_blank" rel="noopener" title="">Better Intersections</a> (<a href="https://github.com/jakecoppinger/better-intersections" target="_blank" rel="noopener" title="">PRs welcome!</a>). </p>



<p>Automated pedestrian introduction at traffic signals has existed in some areas in the Sydney CBD <a href="https://www.linkedin.com/feed/update/urn:li:activity:7084282642010963968?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7084282642010963968%2C7085052811331149824%29&amp;dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287085052811331149824%2Curn%3Ali%3Aactivity%3A7084282642010963968%29" target="_blank" rel="noopener" title="">since the late 1970s or early 80s</a>.</p>



<p>For certain time periods during the day they are also operating in Parramatta, Redfern, Chatswood, Liverpool, North Sydney, Newtown, St Peters, and numerous isolated intersections (outside of these times pedestrians are still required to press the push button).</p>



<p>To my knowledge there are no publicly available maps of the automated pedestrian signal area until COVID, even though automation has existed since the mid 90s.</p>



<h2 class="wp-block-heading" id="aioseo-pedestrian-crossings-during-covid-outbreaks">Pedestrian crossings during COVID outbreaks</h2>



<p>I wrote an article about the situation during the initial COVID outbreaks:<br><a href="https://jakecoppinger.com/2022/12/sydney-cbd-is-bringing-back-pedestrian-beg-buttons/" target="_blank" rel="noopener" title="">Sydney CBD is bringing back pedestrian “beg buttons” (December 2022)</a>.</p>



<p>In summary, more pedestrian signals were automated and covers were placed over the buttons so there was less physical contact.</p>



<p>The locations of all newly automated pedestrian signals programmed during the initial COVID outbreaks was not public, however a 2020 media release mentioned 11 health precincts (<a href="https://web.archive.org/web/20221208064134/https://www.transport.nsw.gov.au/news-and-events/media-releases/automated-pedestrian-crossings-to-be-expanded-to-key-health" target="_blank" rel="noopener" title="">TfNSW Media Release, 28/3/2020</a>).</p>



<h2 class="wp-block-heading" id="aioseo-removal-of-automated-pedestrian-crossings-after-covid-outbreaks">Removal of automated pedestrian crossings after COVID outbreaks</h2>



<p>After initial COVID outbreaks:</p>



<ul class="wp-block-list">
<li>the plastic button covers were removed</li>



<li>a publicly unknown number of crossings at not publicly locations were reverted to non-automatic operation permanently</li>



<li>the automated crossings that remain are only automated for daylight hours (hours for the CBD is known)</li>
</ul>



<p>Buttons in the CBD are affixed with an adhesive plastic label explaining the hours of automation which is already coming off in many places.</p>



<p>On Friday the 16th of December, Transport for NSW announced:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>From mid-December 2022 Transport for NSW is removing the push button hard covers but maintaining the automation of pedestrian crossings at traffic signals during daytime hours. This is to reduce overnight noise for local residents and allow for more efficient intersection operation for all users when activity is low.</p>
</blockquote>



<p>The overnight noise mentioned &#8211; the stated reason for removal &#8211; was due to many complaints from residents living near signals, where the frequent green pedestrian walk sound disturbed sleep.</p>



<p>I do not know, and it is publicly unknown how many complaints were received. <em>I also do not know why the changes were applied to area where there are few ground floor residents (eg. many streets in the city centre).</em></p>



<p>It was not uncommon for signals to allow a green phase every cycle (often a 24-36 second cycle due to low traffic volumes). The areas impacted by overnight noise are not publicly known &#8211; likely in dense residential areas where homes are very close to traffic signals.</p>



<p>However, the &#8220;green walk&#8221; sound of the pedestrian signals can be muted. SCATS supports this functionality and the National Cooperative Highway Research Program study &#8220;Accessible Pedestrian Signals: A Guide to Best Practices&#8221; (<a href="https://www.trb.org/Publications/Blurbs/164696.aspx" target="_blank" rel="noopener" title="">https://www.trb.org/Publications/Blurbs/164696.aspx</a>, DOI: 10.17226/22902), summarised at <a href="http://www.apsguide.org/chapter10_australia.cfm" target="_blank" rel="noopener" title="">http://www.apsguide.org/chapter10_australia.cfm</a> states:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>APS [Accessible Pedestrian Signals] are sometimes turned off at night due to neighbors’ complaints about noise.</p>
</blockquote>



<p>NSW has no crossings where the audio feature is muted. To my understanding <strong><em>the NCHRP guidelines were overridden disallowing selective overnight muting of individual problematic traffic signals in NSW on safety grounds</em></strong>. I do not have context for why this was the case.</p>



<h2 class="wp-block-heading" id="aioseo-muting-of-audible-traffic-signals-in-brisbane">Muting of audible traffic signals in Brisbane</h2>



<p>There is a <a href="https://www.news.com.au/national/queensland/brisbane-accused-of-curfew-on-the-blind/news-story/80fea8b738b4da97461e0ae0929474b0" target="_blank" rel="noopener" title="">2014 article</a> about Brisbane turning off audible traffic signals for the entire CBD between 9:30pm and 6:30am, with very real impacts on people with a visual impairment.</p>



<p>The current content of the <a href="https://www.brisbane.qld.gov.au/traffic-and-transport/traffic-management/audio-tactile-pedestrian-facilities" target="_blank" rel="noopener" title="">Brisbane City Council website</a> suggests a more case-by-case basis approach to muting traffic signals, however I have not found any recent updates on the current state.</p>



<h2 class="wp-block-heading" id="aioseo-automated">Automatic introduction of pedestrians signals in Melbourne</h2>



<p>In Melbourne, automatic introduction currently applies from 5:30 am to 12:30 am every day. This is two hours more each day than in Sydney and there are more people living in the centre of Melbourne.</p>



<p>The automated phases matches the times that tram services are operating. </p>



<p>Automated phases also operate 24/7 crossings of the narrow ‘Little’ streets (where pedestrian lanterns exist) and at the intersections along King St (Flinders Lane to Latrobe St) and along Collins St (Queen St to Exhibition St).&#8221;</p>



<p>(<a href="https://s3.ap-southeast-2.amazonaws.com/hdp.au.prod.app.com-participate.files/6514/1222/5995/COM_SERVICE_PROD-_8483152-v1-Walking_Plan_Technical_Report_-_Traffic_Signal_Operation_for_Pedestrians.pdf" target="_blank" rel="noopener" title="">Review of Signal Operations for Pedestrians in the City of Melbourne, David Nash, 2014</a>)</p>



<h1 class="wp-block-heading" id="aioseo-pedestrian-priority-signals-beg-button-for-cars">Pedestrian priority signals / cars requesting to cross the road</h1>



<p>In Sydney there are very few places where cars have to request to cross the intersection, rather than pedestrians and cyclists.</p>



<p>Some of this rare locations are:</p>



<ul class="wp-block-list">
<li>Most of Martin Place</li>



<li>Carrington St (the eastern bus stops outside Wynyard Station)</li>



<li>Harbour St near Hay St, Chinatown (multi lane road) &#8211; just north of the zebra crossing near the QMS advertising panel</li>



<li>Somewhere <a href="https://www.linkedin.com/feed/update/urn:li:activity:7084282642010963968?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7084282642010963968%2C7085052811331149824%29&amp;dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287085052811331149824%2Curn%3Ali%3Aactivity%3A7084282642010963968%29" target="_blank" rel="noopener" title="">in Chatswood</a>, likely near the station</li>
</ul>



<p>These locations are where there is very low car volume and high pedestrian volume.</p>



<p>Where they exist a zebra crossing would likely be more optimal, however in NSW zebra crossings are not permitted on roads with more than one lane in each direction for safety reasons.</p>



<p>There are none outside the CBD &#8211; although there are many locations where the volume of people could justify this type of intervention (eg: near railway stations, shopping streets or along beach fronts)</p>



<h2 class="wp-block-heading" id="aioseo-research">Research</h2>



<p>Transport for London (TfL) trialled pedestrian priority signals at 18 locations in May 2021, and <a href="https://tfl.gov.uk/info-for/media/press-releases/2022/february/new-tfl-data-shows-success-of-innovative-pedestrian-priority-traffic-signals" target="_blank" rel="noopener" title="">has published new data</a> that giving priority to people walking, showing them a continuous green signal until a vehicle is detected approaching, resulted in:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Compliance with traffic signals by people walking increased by 13 per cent, reducing the risk of a collision with a vehicle, while compliance by people driving stayed the same. The data also shows that the signals had virtually no impact on traffic, with only minimal changes to journey times for buses and general traffic – the largest increase for buses was only 9 seconds and for general traffic only 11 seconds. Several sites showed improvements in journey times.</p>
<cite><a href="https://tfl.gov.uk/info-for/media/press-releases/2022/february/new-tfl-data-shows-success-of-innovative-pedestrian-priority-traffic-signals" target="_blank" rel="noopener" title="">New TfL data shows success of innovative ‘pedestrian priority’ traffic signals, 24 February 2022, TfL</a></cite></blockquote>



<h1 class="wp-block-heading" id="aioseo-isolated-signals">Isolated signals</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Signals may also operate in Isolated mode, with local vehicle actuation (by detector loops) being the sole operating strategy. In Isolated mode the sequence and the maximum duration of each phase is as specified in the local controller time settings. The local controller may terminate any phase under the control of the local vehicle actuation timers or skip an undemanded phase, unless prohibited by the local controller settings. Isolated mode may be specified as the fallback mode of operation.</p>
<cite><a href="https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx" target="_blank" rel="noopener" title="The New Generation SCATS 6">The New Generation SCATS 6</a></cite></blockquote>



<p>This results in faster start to the green pedestrian phase when a button is pressed</p>



<p>SCATS can set any intersection to isolated mode at any time for any reason. It could be based on</p>



<ul class="wp-block-list">
<li>time of day</li>



<li>day of week</li>



<li>cycle length</li>



<li>a low degree of saturation (measure of how much demand there is relative to the capacity)</li>
</ul>



<p>The decision is up to the signal programming.</p>



<p>A type of isolated signal is known as &#8220;Master-Isolated&#8221;. These behave like an isolated intersection (where a pedestrian pressing the button may almost immediately get a green), however are under the control of Masterlink (under remote control of SCATS). This gives a pseudo-Isolated operation that’s managed by the SCATS cycle length and plan data. Where designed, it&#8217;s usually enabled when the cycle length drops below a pre-defined threshold.</p>



<h2 class="wp-block-heading" id="aioseo-locations-of-isolated-signals">Locations of isolated signals</h2>



<ul class="wp-block-list">
<li>The mid-block <a href="https://betterintersections.jakecoppinger.com/intersection/node/1942389016" target="_blank" rel="noopener" title="crossing">crossing</a> on Joynton Avenue outside the Gunyama Park Aquatic and Recreation Centre in Green Square</li>



<li>The mid-block <a href="https://betterintersections.jakecoppinger.com/intersection/node/9143672635" target="_blank" rel="noopener" title="">crossing</a> on Chalmers Street (near Central station) outside the swimming pool</li>
</ul>



<p>Let me know if you know of more!</p>



<h1 class="wp-block-heading" id="aioseo-what-sort-of-green-waves-are-used">What sort of &#8220;green waves&#8221; are used?</h1>



<p>A <a href="https://en.wikipedia.org/wiki/Green_wave" target="_blank" rel="noopener" title="">green wave</a> occurs when a series of traffic lights are coordinated to allow continuous traffic flow over several intersections in one main direction.</p>



<p>They are commonly implemented for peak hour vehicle traffic into and out of the city. Where possible, the operations team also attempts to provide a &#8220;reverse&#8221; green phase in the opposite direction. My understanding is that this is tricky and not always possible.</p>



<p>I&#8217;m not aware of a any examples in Sydney of a green wave for cyclists or pedestrian traffic, except in cases where electric bicycles can achieve a similar speed as road traffic for a car-focused green wave (eg. Bridge Rd in morning peak). Cycling southbound along the new Castlereagh Street cycleway can sometimes feel like a green wave, however this is because cyclists may catch the <em>motor vehicle green wave.</em></p>



<p>When switching between directions of green wave, SCATS rotation can adjust cycle time 20-30% to switch link plans.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="834" src="https://jakecoppinger.com/wp-content/uploads/2023/07/scats-distance-diagram-1024x834.jpg" alt="" class="wp-image-869" srcset="https://jakecoppinger.com/wp-content/uploads/2023/07/scats-distance-diagram-1024x834.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-distance-diagram-300x244.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-distance-diagram-768x626.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-distance-diagram.jpg 1500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="green-waves-in-melbourne">Green waves for cyclists in Melbourne</h2>



<p>There is a green wave operational on Albert St bike lanes in east Melbourne. It runs 8:00-9:30am inbound and 4-6pm outbound. Few people know that it exists &#8211; there are limited public comms. There are no inbuilt progression LED lights built into the pavement due to budget constraints.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Green Wave in Melbourne | City of Melbourne" width="500" height="375" src="https://www.youtube.com/embed/tQzUb34KXis?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>
</div></figure>



<p>There is also a current trial on Rathdowne Street, Carlton, using fisheye cameras. I&#8217;m unsure if this is yet integrated with SCATS (and if so, whether it presents a virtual loop or some other integration method)</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>University of Melbourne is partnering with Cubic Transportation System to roll out a number of smart cameras that watch road users and could control traffic flow accordingly – in real time.</p>



<p>Seven fish-eye cameras will be installed over the next few months above intersections along Rathdowne Street in Carlton as part of the Australian Integrated Multimodal Ecosystem (AIMES), led by Melbourne University professor Majid Sarvi.</p>
<cite><a href="https://bicyclenetwork.com.au/newsroom/2020/07/16/melbourne-tests-traffic-controlling-smart-cameras/" target="_blank" rel="noopener" title="">https://bicyclenetwork.com.au/newsroom/2020/07/16/melbourne-tests-traffic-controlling-smart-cameras/</a></cite></blockquote>



<p>On Canning St, the Princes and Johnston St signals are timed to give a good bicycle run in AM &amp; PM peaks.&nbsp;However, it&nbsp;is&nbsp;set to ~23km/h which in practice might be too fast.</p>



<h2 class="wp-block-heading" id="aioseo-green-waves-for-cyclists-in-copenhagen">Green waves for cyclists in Copenhagen</h2>



<p>Meanwhile, the <a href="https://copenhagenize.com/2014/08/the-green-waves-of-copenhagen.html" target="_blank" rel="noopener" title="">City of Copenhagen established the first green wave for cyclists on Nørrebrogade in 2007</a>, so bicycles travelling at 20kph did not encounter red lights. This system included LEDs embedded in the pavement to help cyclists keep the same pace.</p>



<p>As of <a href="https://copenhagenize.com/2014/08/the-green-waves-of-copenhagen.html" target="_blank" rel="noopener" title="">2014, Copenhagen was experimenting with &#8220;Green wave 2.0&#8221;</a>, a detection system that keeps traffic lights green if there are 5 or more cycling citizens (roughly) cycling together.</p>



<p>The evaluation report on green waves on Nørrebrogade showed that “travel time decreased by 17 percent for a cyclist who cycled out of town at 20 kilometres per hour”. <a href="https://stateofgreen.com/files/download/1356" target="_blank" rel="noreferrer noopener">[6]</a> (<a href="https://www.centreforpublicimpact.org/case-study/green-waves-bicycles-copenhagen" target="_blank" rel="noopener" title="">Centre For Public Impact, 2016</a>).</p>



<h1 class="wp-block-heading" id="aioseo-complaint-process-for-signals">The complaint process for pedestrian signal timing discourages feedback</h1>



<p>Complaining about a long pedestrian wait time at a traffic signal is not an easy process. It takes 7 steps on <a href="https://www.nsw.gov.au/transport-for-nsw/contact-roads-waterways/online">https://www.nsw.gov.au/transport-for-nsw/contact-roads-waterways/online</a> and it is not clear that this is the correct form for walking related feedback at all:</p>



<ul class="wp-block-list">
<li>Click report an issue -&gt; roads -&gt; management -&gt; set location -&gt; then explain issue.</li>
</ul>



<p>Operators may sometimes state non-existent policy:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>&#8230;<br>the whole principle of pedestrian movements is they are a slave to vehicular traffic.<br>&#8230;<br>The reason we don&#8217;t hold the walk is that we don&#8217;t want people running to get the walk because then, quite often, they&#8217;re running looking at the signal rather than the traffic, and in some instances, they step off the footpath in front of an oncoming car. So it&#8217;s a design standard that&#8217;s adhered<br>&#8230;</p>
<cite>~5pm on the 28th of August 2024</cite></blockquote>



<p>After further correspondence this was corrected and a &#8220;walk for green&#8221; was implemented (York St and King Street). Walk for Green” means the green pedestrian light is displayed for only slightly less than the green roundel for vehicles.</p>



<p>Another successful &#8220;walk for green&#8221; implemented after a phone line complaint (which I have been informed of) is Regent Street at Lawson Street.</p>



<h1 class="wp-block-heading" id="aioseo-why-do-traffic-signals-take-so-long-to-implement-redesign">Why do traffic signals take so long to implement / redesign?</h1>



<p>A consistent thread I have seen <strong><em>mentioned in this space</em></strong> is that the issue of the implementation of new signals or signal redesign is often longest part of any road redesign or cycleway implementation project, often requiring upwards of two years.</p>



<p>I have limited detail on why this is the case, however some contributing reasons may be:</p>



<ul class="wp-block-list">
<li>Design of traffic signals being safety critical, requiring 4 engineers signing off on documents and detailed infrastructure diagrams</li>



<li>Team busy working on adding red turning filter lights (and associated design) throughout the state along with countdown timers</li>
</ul>



<p>I received a suggestion that another contributing factor could be loss of experience and expertise as traffic engineers reach retirement age. The sender noted he had worked in DMR/RTA/RMS/TfNSW for over 50 years, and that they knew many others in Australia that have been in traffic nearly as long.</p>



<h1 class="wp-block-heading" id="aioseo-scats-data-cost-and-access">The extremely high cost of purchasing SCATS timing data</h1>



<p><meta http-equiv="content-type" content="text/html; charset=utf-8"><a href="https://discover.data.vic.gov.au/dataset/traffic-signal-configuration-data-sheets" target="_blank" rel="noopener" title="">Victoria publishes all their operational sheets under a a <strong><em>free</em></strong> and open CC BY 4.0 license</a>, including &gt; ~10 PDF pages (or HTML sheets) of documentation per intersection. This data contains minimum and maximum green times, but doesn&#8217;t appear to specify nominal cycle times. In Sydney or NSW, you must pay<strong><em> at least $200</em></strong> to purchase the programming of a traffic signal for <em>a single intersection</em> under a very <a href="https://www.transport.nsw.gov.au/trafficsignal/traffic-signal-portal-terms" target="_blank" rel="noreferrer noopener">restrictive license</a>.</p>



<p>The walk timings (along with target cycle and phase timings) appear to be stored in a plaintext format known as LX, which I&#8217;m not currently aware of any open source way to process except <a href="https://github.com/johntrieu91/scatsutilities">https://github.com/johntrieu91/scatsutilities</a> (Python, MIT license).</p>



<p>An incomplete specification of the LX format is detailed at <a href="https://roads-waterways.transport.nsw.gov.au/trafficinformation/downloads/ttd_2018-002.pdf" target="_blank" rel="noreferrer noopener">Attachment A (pg 15) of &#8220;Traffic Signals in Microsimulation Modelling&#8221;, a Technical Direction document by TfNSW</a>. Further documentation is on <a href="https://www.mainroads.wa.gov.au/globalassets/technical-commercial/technical-library/road-and-traffic-engineering/traffic-modelling/operational-modelling/signal-data-information-for-modelling-a.pdf?v=49f708" target="_blank" rel="noopener" title="">page 48 of the Signal Data Information for Modelling report (Main Roads WA)</a>. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="919" src="https://jakecoppinger.com/wp-content/uploads/2023/07/lx-example-1024x919.jpg" alt="" class="wp-image-840" srcset="https://jakecoppinger.com/wp-content/uploads/2023/07/lx-example-1024x919.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/07/lx-example-300x269.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/07/lx-example-768x689.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/07/lx-example.jpg 1146w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption"><a href="https://www.mainroads.wa.gov.au/globalassets/technical-commercial/technical-library/road-and-traffic-engineering/traffic-modelling/operational-modelling/signal-data-information-for-modelling-a.pdf?v=49f708" target="_blank" rel="noopener" title="">page 48 of the Signal Data Information for Modelling report (Main Roads WA)</a></figcaption></figure>



<p>It appears the LX file for a given region can be purchased under restrictive terms and conditions at <a href="https://www.transport.nsw.gov.au/trafficsignal">https://www.transport.nsw.gov.au/trafficsignal</a>. The fee schedule is outlined at: <a href="https://www.transport.nsw.gov.au/system/files/media/documents/2022/Network_Operations_Schedule_of_Fees_01.08.22.pdf">https://www.transport.nsw.gov.au/system/files/media/documents/2022/Network_Operations_Schedule_of_Fees_01.08.22.pdf</a></p>



<p>My understanding is that the export is a manual process an operator must run, followed by manual clean up of the data and sending it.</p>



<p>A few items:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Explanation of Phasing – Detailed lay explanation of traffic signal phasing for a specified date. &#8211; $600<br>SCATS Traffic Counts (TCS graphics plots included): $300<br>Interpreted SCATS history files (TCS graphics plots included): $400<br>TCS graphic plots: $200<br>SCATS Region LX file (all TCS sites on region): $200</p>
</blockquote>



<p>An LX file for a single SCATS region costs $220. I&#8217;m unsure how many intersections (ie. TCS sites) are in each region, but I know SCATS supports up to 250 intersections per region. I am unsure how many regions cover the City of Sydney for example.</p>



<p>There are also strong terms and conditions, however I see a permitted purpose is &#8220;(d) you undertaking traffic modelling or transport related projects,but excludes the right to sell, monetise or commercially exploit the Traffic Signal Information and/or Developed IP (Licence).&#8221;: <a href="https://www.transport.nsw.gov.au/trafficsignal/traffic-signal-portal-terms">https://www.transport.nsw.gov.au/trafficsignal/traffic-signal-portal-terms</a></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>The SCATS regional traffic control software has a maximum capacity of 250 intersections per region. With a maximum of 64 regions, the total capacity is 16,000 intersections.<br></p>
</blockquote>



<p>I note that on page 13 of <a href="https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx" target="_blank" rel="noopener" title="&quot;The New Generation SCATS 6&quot;">&#8220;The New Generation SCATS 6&#8221;</a> document there is an undated screenshot of a region display:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="845" src="https://jakecoppinger.com/wp-content/uploads/2023/07/scats-region-diagram-1024x845.jpg" alt="" class="wp-image-770" srcset="https://jakecoppinger.com/wp-content/uploads/2023/07/scats-region-diagram-1024x845.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-region-diagram-300x248.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-region-diagram-768x634.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-region-diagram.jpg 1500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Page 13, <a href="https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx">https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx</a></figcaption></figure>



<h2 class="wp-block-heading" id="aioseo-reasoning-against-release-of-signal-timing-data-in-nsw">TfNSW reasoning against release of signal timing data in NSW</h2>



<p>Response to my public Q&amp;A question at the <a href="https://www.aitpm.com.au/events/current-events/nsw-act-2/nsw-act-2025-1/scats-what-is-it-and-where-is-it-heading-thurs-6-february-2025" target="_blank" rel="noopener" title="">&#8220;SCATS &#8211; What is it and where is it heading&#8221;</a> talk on 2025-02-06:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Question: Jake Coppinger, day job at Atlassian, volunteer with Better Streets, but representing myself here.<br>A question on open data and cycle times: My understanding is from mid-March, WA Main Roads will be able to release monthly dumps of their cycle times that were the real-time cycle time data. Do these upgrades enable that feature in New South Wales, or would we be able to release open data here? Thanks.<br><br>Answer: Essentially, the New South Wales government hasn’t determined whether or not we will release information completely on an AI platform on cycle time data.<br><br>We will do it at a user pay cost just because that open platform, I think, because that open platform hasn’t been developed yet. So, you know, we will provide that data. The way in which we present it at the moment, again, is very labour intensive, so, we charge for that data. Do we have any real objection to providing that data as operators, to providing that data openly? No, I don’t think so. But exactly what the government and transport at a senior executive level wants to do, obviously that hasn’t been determined yet.</p>
<cite>David Ballm (<a href="https://www.aitpm.com.au/events/current-events/nsw-act-2/nsw-act-2025-1/scats-what-is-it-and-where-is-it-heading-thurs-6-february-2025" target="_blank" rel="noopener" title="Director, Network Operations, Transport for NSW">Director, Network Operations, Transport for NSW</a>), transcript of Q&amp;A question asked 2025-02-06 in public Q&amp;A setting (<a href="https://www.aitpm.com.au/events/current-events/nsw-act-2/nsw-act-2025-1/scats-what-is-it-and-where-is-it-heading-thurs-6-february-2025" target="_blank" rel="noopener" title="SCATS - What is it and where is it heading?">SCATS &#8211; What is it and where is it heading?</a>)</cite></blockquote>



<h1 class="wp-block-heading" id="aioseo-scats-upgrade">SCATS upgrade</h1>



<p>SCATS has been installed at more than <a href="https://www.scats.nsw.gov.au/">60,000 intersections across 200 cities and 30 countries worldwide</a>.</p>



<p>A major upgrade is underway. The upgrade will likely involve a visual facelift, judging by the dated visual language of the diagrams generated, but little additional knowledge of the improvements is public.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="826" src="https://jakecoppinger.com/wp-content/uploads/2023/07/scats-intersection-diagram-1-1024x826.jpg" alt="" class="wp-image-772" srcset="https://jakecoppinger.com/wp-content/uploads/2023/07/scats-intersection-diagram-1-1024x826.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-intersection-diagram-1-300x242.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-intersection-diagram-1-768x620.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/07/scats-intersection-diagram-1.jpg 1500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Note the lack of any pedestrian infrastructure, or pedestrian phases. Pedestrians cross when they don&#8217;t get in the way of cars. <a href="https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx">https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx</a></figcaption></figure>



<p>There was briefly a desire for a new commercial model however this looks to have been abandoned.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“TfNSW is seeking to implement a new commercial model, with a commercial partner to accelerate innovation and importantly future-proof the SCATS product and business,” tender documents said at the time.<br>But the department has now ditched that approach, with a new team to be established within TfNSW to accelerate the development of SCATS and expand its commercial activities. (<a href="https://www.itnews.com.au/news/transport-for-nsw-ditches-scats-traffic-system-commercialisation-566722">ITNews</a>)</p>
</blockquote>



<h1 class="wp-block-heading" id="aioseo-do-buses-get-priority-which-routes">Do buses get signal priority? Which routes and when?</h1>



<p>Information from the public <a href="https://www.aitpm.com.au/events/current-events/nsw-act-2/nsw-act-2025-1/scats-what-is-it-and-where-is-it-heading-thurs-6-february-2025" target="_blank" rel="noopener" title="">&#8220;SCATS &#8211; What is it and where is it heading?&#8221;</a> talk. Corrections are welcome as always.</p>



<p>Bus priority only exists on 5 or 6 bus routes in Sydney:</p>



<ul class="wp-block-list">
<li>Liverpool to Parramatta transitway</li>



<li>North West Transitway</li>



<li>A couple on routes on Windsor Road</li>
</ul>



<p>The tech is relatively scalable &#8211; if decision made to give route priority, it can be done without major capital investments</p>



<p>Traffic signals only give priority if the bus is 50% full and are running 2-3 minutes behind the timetable.</p>



<p>I received correspondence that bus priority is also used in Newcastle and Wollongong.</p>



<p>There is, of course, priority for light rail/trams in various cities. In Sydney this proper prioritisation for the L2/L3 came after some time, but that&#8217;s another topic in itself.</p>



<h1 class="wp-block-heading" id="future-signal-development">Future signal development</h1>



<h2 class="wp-block-heading" id="aioseo-media-reports-on-scats-upgrade">Media reports on SCATS upgrade</h2>



<p>In July 2021, It reported:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>A spokesperson told iTnews that “after further work, TfNSW has chosen to proceed with a new structure, which extends on aspects of TfNSW&#8217;s original plan in 2019”, part of which will include “working with partners”.<br>…<br>Features include better integration with third-party sensors, machine learning-based prediction, sophisticated analytics and performance reporting and a UI/UX refresh.</p>
<cite><a href="https://www.itnews.com.au/news/transport-for-nsw-ditches-scats-traffic-system-commercialisation-566722">https://www.itnews.com.au/news/transport-for-nsw-ditches-scats-traffic-system-commercialisation-566722</a></cite></blockquote>



<p></p>



<p>ARN reported in 2021:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Called the Sydney Coordinated Adaptive Traffic System (SCATS), it aims to trim travel time by a third, reduce fuel consumption by 12 per cent and lower emissions by 15 per cent, with more gains yet to be realised as the partnership pans out.</p>



<p>“Thanks to a new partnership with software development company Industrie&amp;Co, our TfNSW development teams will collaborate to deliver the next generation of SCATS,” TfNSW deputy secretary for customer strategy and technology Joost de Kock said.</p>



<p>&#8220;SCATS uses algorithms and real-time traffic signal data to help customers get to their destinations faster and advanced sensors will allow cyclist and pedestrian movements to be included…</p>
<cite><a href="https://www.arnnet.com.au/article/693549/industrie-co-wins-transport-nsw-deal-new-scats-drive/">https://www.arnnet.com.au/article/693549/industrie-co-wins-transport-nsw-deal-new-scats-drive/</a></cite></blockquote>



<p>My understanding is that SCATs does not currently prioritise cyclist and pedestrian movements using any sensors &#8211; merely <em>not skipping</em> this phase when they are present.</p>



<p><a href="https://www.arnnet.com.au/article/693549/industrie-co-wins-transport-nsw-deal-new-scats-drive/">https://www.arnnet.com.au/article/693549/industrie-co-wins-transport-nsw-deal-new-scats-drive/</a></p>



<h2 class="wp-block-heading" id="aioseo-trials-of-using-lida">More advanced pedestrian and cyclist detectors</h2>



<h2 class="wp-block-heading" id="aioseo-trials-of-using-lida">Lidar detectors</h2>



<p>In Victoria there is an <a href="https://www.manmonthly.com.au/advanced-lidar-sensors-trialled-improve-victorian-road-safety/" target="_blank" rel="noopener" title="">ongoing trial using Lidar</a> sensors to record road user positions in real time, which does currently feed data into the traffic light system. It can generate bounding boxes for vehicles, pedestrians, cyclists in real time and identify queues. I am unclear what the data from this trial will be used for.</p>



<p>My understanding is currently SCATS cannot natively use this Lidar input data as it does not have the capability to &#8211; the workaround is creating &#8220;virtual loops&#8221; that function like a magnetic resonance loop, giving a binary input to SCATS (with the added benefit of being able to create virtual loops for pedestrians). There has been development work on adding new SCATS interfaces but it has not been widely released. It is unclear if this will be included in the new SCATS upgrade.</p>



<p>There are multiple international vendors implementing traffic detection using Lidar, notably <a href="https://velodynelidar.com/products/bluecity/" target="_blank" rel="noopener" title="">Velodyne&#8217;s Bluecity product</a>.</p>



<h2 class="wp-block-heading" id="aioseo-infrared-detectors">Infrared and camera detectors</h2>



<p>For pedestrians there is a trial in progress at Manly Wharf. This will likely also be applicable to areas outside schools; where there are usually few pedestrians, then many at once.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Infrared detection will be trialled at Manly Wharf where there is high pedestrian activity.&nbsp;</p>



<p>This trial seeks to address the requirement to enhance efficiency and safety at intersections with large variable volumes of pedestrian traffic.&nbsp;</p>



<p>This initiative aims to dynamically adjust intersection crossing times for pedestrians based on real-time detection. By using advanced detectors, we can:</p>



<ul class="wp-block-list">
<li>Identify if a pedestrian is waiting in a designated zone</li>



<li>Determine the pedestrian volume in the detection zone</li>



<li>Analyse the demand for pedestrians</li>



<li>Measure the time it takes for pedestrians to clear the intersection.</li>
</ul>
<cite><a href="https://www.transport.nsw.gov.au/projects/programs/intelligent-traffic-light-program" target="_blank" rel="noopener" title="&quot;Pedestrian Detectors&quot;, Intelligent Traffic Light Program, TfNSW">&#8220;Pedestrian Detectors&#8221;, Intelligent Traffic Light Program, TfNSW</a></cite></blockquote>



<p></p>



<p>There is also an infrared camera trial for cyclists:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>This trial aims to assess the performance of infrared cameras as a consistent and reliable method for detecting cyclists. Improved detection is anticipated to improve intersection efficiency and safety by reducing unused green phases and/or stranded riders.&nbsp;</p>



<p>Transport for NSW is planning to demonstrate the cameras in use at the Future Mobility Testing and Research Centre on the <a href="https://www.transport.nsw.gov.au/data-and-research/future-mobility/future-mobility-testing-and-research-centre/future-mobility-0">Community Open Day</a>&nbsp;&#8211;&nbsp;<strong>31 October 2024</strong>.</p>



<p>The proposed trial site is the intersection of Gardeners Road and Bourke Street in Alexandria.&nbsp;</p>



<p>This is a busy intersection due to the M8 off-ramp feeding into Gardeners Road. The traffic light phases are permanently configured to accommodate bicycles, regardless of their presence, causing unnecessary delays on Garden Road and impacting vehicle traffic flow. These factors make it an ideal testing site for this trial.&nbsp;</p>
<cite><a href="https://www.transport.nsw.gov.au/projects/programs/intelligent-traffic-light-program" target="_blank" rel="noopener" title="&quot;Pedestrian Detectors&quot;, Intelligent Traffic Light Program, TfNSW">&#8220;Bicycle Detectors&#8221;, Intelligent Traffic Light Program, TfNSW</a></cite></blockquote>



<h2 class="wp-block-heading" id="aioseo-touchless-pedestrian-activation-trial">Touchless pedestrian activation trial</h2>



<p>There are prototypes of touchless buttons with audio feedback when it registers an intention to cross.</p>



<p>In Melbourne there are examples of buttons with an acknowledgement light but no automatic sensor. These lights, with or without the automatic sensor, mean pedestrians know whether they have to press the button or not. There are some disadvantages however:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>When automatic introduction is activated, the red ‘wait’ light on the push button assembly is illuminated at all times that the pedestrian signals are not showing a green man (see Figure 1). This is a helpful indicator that the pedestrian does not need to push the button as a ‘call’ is already recorded. In bright sunlight, it can be difficult to see whether the wait light is illuminated or not. In a quick survey of sites in the CBD, it looks like not all push buttons have the ‘wait’ light. At William St/Bourke St, for example, only 1 of the 8 push button assemblies includes a ‘wait’ light.</p>
<cite><meta http-equiv="content-type" content="text/html; charset=utf-8"><a href="https://s3.ap-southeast-2.amazonaws.com/hdp.au.prod.app.com-participate.files/6514/1222/5995/COM_SERVICE_PROD-_8483152-v1-Walking_Plan_Technical_Report_-_Traffic_Signal_Operation_for_Pedestrians.pdf" target="_blank" rel="noopener" title="">Review of Signal Operations for Pedestrians in the City of Melbourne, David Nash, 2014</a></cite></blockquote>



<p></p>



<p>An example of this button is at Henderson Rd &amp; Garden St. Acknowledgement of the intention to cross is displayed with a red light on the button and an audible beep.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="768" height="1024" src="https://jakecoppinger.com/wp-content/uploads/2023/07/touchless-pedestrian-button-768x1024.jpg" alt="" class="wp-image-787" srcset="https://jakecoppinger.com/wp-content/uploads/2023/07/touchless-pedestrian-button-768x1024.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/07/touchless-pedestrian-button-225x300.jpg 225w, https://jakecoppinger.com/wp-content/uploads/2023/07/touchless-pedestrian-button-1152x1536.jpg 1152w, https://jakecoppinger.com/wp-content/uploads/2023/07/touchless-pedestrian-button.jpg 1500w" sizes="auto, (max-width: 768px) 100vw, 768px" /><figcaption class="wp-element-caption">Henderson Rd &amp; Garden St. Own work.</figcaption></figure>



<h1 class="wp-block-heading" id="aioseo-additional-notes">Additional notes</h1>



<h2 class="wp-block-heading" id="aioseo-dynamic-cycle-times">The Sydney CBD effectively operates as a fixed time system during peak times</h2>



<p>&#8230;but without the benefits of a fixed time system, such as pedestrian timers counting down until the end of the red light, rather than until the end of the green light.</p>



<p>SCATS will <a href="https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx" target="_blank" rel="noopener" title="">attempt to increase the length of a green phase for cars</a> to satisfy the demand when the &#8220;degree of saturation&#8221; is high (as measured by cars travelling over magnetic resonance loops in the ground) &#8211; that&#8217;s what the &#8220;Adaptive&#8221; in Sydney Coordinated Adaptive Traffic System means. However, SCATS will only increase the green time such that it won&#8217;t make the cycle time higher than a given value (the maximum cycle time).</p>



<p>In the Sydney CBD, the 90 second figure is the <em>maximum</em> cycle time. If the SCATS algorithms determine there is no need (for cars), the cycle time will drop lower. Measurements of <em>actual</em> cycle time are recorded and can be accessed in the SCATS software, and to request this data you must pay <a href="https://www.transport.nsw.gov.au/system/files/media/documents/2022/Network_Operations_Schedule_of_Fees_01.08.22.pdf" target="_blank" rel="noopener" title="">$400 <em>per intersection</em></a> &#8211; see the section below on SCATS data cost. </p>



<p>With a 90 second cycle in the Sydney city, there usually isn&#8217;t any spare time in a cycle for SCATS to adjust the phase length (especially for bidirectional roads with more cycles), and will usually be running constantly at 90 second cycles (unless in off peak periods).</p>



<p>As a result of these decisions, this results in the <em><strong>Sydney CBD effectively operating as a fixed time system during peak </strong></em>&#8211; that is, the phase lengths are very similar to the expected, pre-programmed length.</p>



<p>The traffic signals tend to operate a peak of 1.5/2 hours in the morning and 2 &#8211; 3 hours in the afternoon.</p>



<p>In off peak periods it can sometimes run down to ~50 seconds.</p>



<h1 class="wp-block-heading" id="aioseo-further-reading">That&#8217;s all folks!</h1>



<p>Once again, I hope this article demonstrates why signal data should be as public as a train network timetable &#8211; and subject to the same public scrutiny and debate as one (even though complex trade-offs are involved) and I hope this document provides plenty of source material and an overview of the landscape for other advocates to dive into.</p>



<p>Note: I am not a trained traffic engineer; my background is computer science and I work as a software engineer. This analysis is a side project. Please let me know of any mistakes, corrections or improvements in the comments below (or privately to <a href="mailto:jake@jakecoppinger.com" target="_blank" rel="noopener" title="">jake@jakecoppinger.com</a>) and I will update if incorrect.<br></p>


<div id="mc_embed_shell"><style type="text/css">
        #mc_embed_signup{background:#fff; false;clear:left; font:14px Helvetica,Arial,sans-serif; width: 600px;}<br />
        /* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.<br />
           We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */<br />
</style>
<div id="mc_embed_signup"><form id="mc-embedded-subscribe-form" class="validate" action="https://jakecoppinger.us17.list-manage.com/subscribe/post?u=3c1bd4fc8fca6648af03e916a&amp;id=ad49243f2c&amp;f_id=00d3e4e3f0" method="post" name="mc-embedded-subscribe-form" target="_blank">
<div id="mc_embed_signup_scroll">
<h2><a href="http://eepurl.com/hemS9j" target="_blank" rel="noopener">Subscribe to Jake&#8217;s blog</a></h2>
Email notifications of new blog posts are infrequent, brief, and plain text.

</div>
</form></div>
</div>


<h1 class="wp-block-heading" id="aioseo-further-reading">Further reading</h1>



<p>Apologies for the haphazard referencing!</p>



<ul class="wp-block-list">
<li>ARRB Research Report 123 Traffic Signals: Capacity and Timing Analysis (1981). <a href="https://www.sidrasolutions.com/media/189/download">https://www.sidrasolutions.com/media/189/download</a></li>



<li>Pedestrians should get the green light on traffic signal prioritisation, Cecilia Duong <a href="https://www.unsw.edu.au/news/2021/07/pedestrians-should-get-the-green-light-on-traffic-signal-priorit" target="_blank" rel="noopener" title=""></a><a href="https://www.unsw.edu.au/news/2021/07/pedestrians-should-get-the-green-light-on-traffic-signal-priorit" target="_blank" rel="noreferrer noopener">https://www.unsw.edu.au/news/2021/07/pedestrians-should-get-the-green-light-on-traffic-signal-priorit</a></li>



<li>Python implementation of SCATS LX data reading (I haven&#8217;t read through), <a href="https://github.com/johntrieu91/scatsutilities">https://github.com/johntrieu91/scatsutilities</a></li>



<li>Sydney CBD Cycleways Traffic Signals Optimisation, A Finlay, <a href="https://roads-waterways.transport.nsw.gov.au/documents/roads/bicycles/bicycles-sydney-cbd-traffic-signal-optimisation-2009.pdf" target="_blank" rel="noopener" title="">https://roads-waterways.transport.nsw.gov.au/documents/roads/bicycles/bicycles-sydney-cbd-traffic-signal-optimisation-2009.pdf </a></li>



<li><a href="https://web.archive.org/web/20230331035508/https://roads-waterways.transport.nsw.gov.au/business-industry/partners-suppliers/documents/guidelines/complementary-traffic-material/tsdsect07v1-3.pdf" target="_blank" rel="noreferrer noopener">&#8220;Traffic Signal Design Guide: Section 7 Phasing and Signal Group Display Sequence&#8221; (2016)</a>. URL appears to be currently broken (this is an archive link). Unsure if it&#8217;s been superseded. Great info on various types of pedestrian phase protection.</li>



<li><a href="https://www.mainroads.wa.gov.au/globalassets/technical-commercial/technical-library/road-and-traffic-engineering/traffic-modelling/operational-modelling/signal-data-information-for-modelling-a.pdf?v=49f708" target="_blank" rel="noopener" title="">Signal Data Information for Modelling report (Main Roads WA)</a>. Page 48 has some info on the LX timing format</li>



<li><a href="https://s3.ap-southeast-2.amazonaws.com/hdp.au.prod.app.com-participate.files/6514/1222/5995/COM_SERVICE_PROD-_8483152-v1-Walking_Plan_Technical_Report_-_Traffic_Signal_Operation_for_Pedestrians.pdf" target="_blank" rel="noreferrer noopener">Review of Signal Operations for Pedestrians in the City of Melbourne, David Nash, 2014</a></li>



<li><a href="https://www.aldridgetrafficcontrollers.com.au/ArticleDocuments/230/Introduction_To_New_Generation_Scats_6_5.pdf.aspx" target="_blank" rel="noopener" title="">&#8220;The New Generation SCATS 6&#8221;, date unknown</a></li>



<li><a href="https://tfl.gov.uk/info-for/media/press-releases/2022/february/new-tfl-data-shows-success-of-innovative-pedestrian-priority-traffic-signals" target="_blank" rel="noopener" title="">New TfL data shows success of innovative ‘pedestrian priority’ traffic signals, 24 February 2022, TfL</a></li>



<li>Post metadata image: <a href="http://www.jctconsultancy.co.uk/Symposium/Symposium2014/PapersForDownload/A%20Review%20of%20SCATS%20Operation%20and%20Deployment%20in%20Dublin.pdf">http://www.jctconsultancy.co.uk/Symposium/Symposium2014/PapersForDownload/A%20Review%20of%20SCATS%20Operation%20and%20Deployment%20in%20Dublin.pdf</a></li>



<li>Traffic lights in ’s-Hertogenbosch; an interview, Biycle Dutch: <a href="https://bicycledutch.wordpress.com/2016/06/21/traffic-lights-in-s-hertogenbosch-an-interview/" target="_blank" rel="noopener" title="">https://bicycledutch.wordpress.com/2016/06/21/traffic-lights-in-s-hertogenbosch-an-interview/</a></li>



<li>&#8220;The Evolution of Traffic Signal Operations&#8221;, TfNSW, March 2024: <a href="https://www.transport.nsw.gov.au/system/files/media/documents/2025/Active-Transport-Community-of-Practice-Evolution-of-Traffic-Signal-Operations-March-2024.pdf" target="_blank" rel="noopener" title="">https://www.transport.nsw.gov.au/system/files/media/documents/2025/Active-Transport-Community-of-Practice-Evolution-of-Traffic-Signal-Operations-March-2024.pdf</a></li>



<li>&#8220;Pedestrian Safety&#8221; brochure, September 2020, TfNSW,  https://www.transport.nsw.gov.au/system/files/media/documents/2023/Pedestrian%20Safety.pdf (file removed, archived 2025-05-15 from the original <a href="https://web.archive.org/web/20250515002811/https://www.transport.nsw.gov.au/system/files/media/documents/2023/Pedestrian%20Safety.pdf">https://web.archive.org/web/20250515002811/https://www.transport.nsw.gov.au/system/files/media/documents/2023/Pedestrian%20Safety.pdf</a>), <a href="https://www.transport.nsw.gov.au/system/files/media/documents/2025/crs_pedestrian_safety.pdf">https://www.transport.nsw.gov.au/system/files/media/documents/2025/crs_pedestrian_safety.pdf</a></li>



<li>&#8220;Traffic Signal Operation&#8221; (Superseded standard), RTA-TC-106, April 2010 (&#8220;First published in this form October 1991, Reformatted October 2000, Revised April 2010&#8221;), <a href="https://standards.transport.nsw.gov.au/_entity/annotation/6b38b3c7-b835-ed11-9db1-000d3ae011f9" target="_blank" rel="noopener" title="">https://standards.transport.nsw.gov.au/_entity/annotation/6b38b3c7-b835-ed11-9db1-000d3ae011f9</a></li>



<li>&#8220;Traffic Signal Operation&#8221;, TS 05493:1.0, RTA-TC-106, 18 November 2024, Revision 1.0 (replacing First issue as RTA-TC-106 effective 1 April 2010), <a href="https://standards.transport.nsw.gov.au/_entity/annotation/5c3b61e9-4ea5-ef11-b8e9-000d3a6b1b0b" target="_blank" rel="noopener" title="">https://standards.transport.nsw.gov.au/_entity/annotation/5c3b61e9-4ea5-ef11-b8e9-000d3a6b1b0b</a></li>



<li>&#8220;Staying safe as a pedestrian&#8221;, TfNSW (NSW Centre for Road Safety), <a href="https://www.transport.nsw.gov.au/roadsafety/pedestrians/staying-safe" target="_blank" rel="noopener" title="">https://www.transport.nsw.gov.au/roadsafety/pedestrians/staying-safe</a></li>



<li>&#8220;Pedestrian Priority at Traffic Signals&#8221;, Network Operations, TfNSW, February 2023, (supplied) <a href="http://files.jakecoppinger.com/traffic-signals/Pedestrian+Priority+-+Public+Presentation+V2.pdf" target="_blank" rel="noopener" title="">http://files.jakecoppinger.com/traffic-signals/Pedestrian+Priority+-+Public+Presentation+V2.pdf</a></li>
</ul>



<p></p><p>The post <a href="https://jakecoppinger.com/2023/07/shining-a-light-on-the-traffic-signals-of-sydney/">Shining a Light on the Traffic Signals of Sydney</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://jakecoppinger.com/2023/07/shining-a-light-on-the-traffic-signals-of-sydney/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Mapping pedestrian traffic light timing in Sydney, Australia</title>
		<link>https://jakecoppinger.com/2023/06/mapping-pedestrian-traffic-light-timing-in-sydney-australia/</link>
					<comments>https://jakecoppinger.com/2023/06/mapping-pedestrian-traffic-light-timing-in-sydney-australia/#comments</comments>
		
		<dc:creator><![CDATA[Jake C]]></dc:creator>
		<pubDate>Mon, 12 Jun 2023 13:38:32 +0000</pubDate>
				<category><![CDATA[Cycling]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Side project]]></category>
		<category><![CDATA[Sydney]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Urbanism]]></category>
		<category><![CDATA[betterstreets]]></category>
		<category><![CDATA[city of sydney]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[measurement]]></category>
		<category><![CDATA[nsw]]></category>
		<category><![CDATA[openstreetmap]]></category>
		<category><![CDATA[OSM]]></category>
		<category><![CDATA[pedestrian]]></category>
		<category><![CDATA[sydney]]></category>
		<category><![CDATA[TfNSW]]></category>
		<category><![CDATA[traffic]]></category>
		<category><![CDATA[transport]]></category>
		<guid isPermaLink="false">https://jakecoppinger.com/?p=735</guid>

					<description><![CDATA[<p>Better Intersections is a tool to record and visualise timing details for pedestrian and bicycle signals. In the absence of traffic light timing data, and as we hold hope for it to become publicly available; the aim of Better Intersections is to crowdsource measurements and inform where positive changes could be made.</p>
<p>The post <a href="https://jakecoppinger.com/2023/06/mapping-pedestrian-traffic-light-timing-in-sydney-australia/">Mapping pedestrian traffic light timing in Sydney, Australia</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><strong><em>See my follow up blog post, going into detail on previously unreleased maps, how it costs $200 to buy data on a single intersection from TfNSW, comparisons with best practice and more: <a href="https://jakecoppinger.com/2023/07/shining-a-light-on-the-traffic-signals-of-sydney/" target="_blank" rel="noopener" title="">Shining a Light on the Traffic Signals of Sydney (Jul 2023)</a></em></strong></p>



<p><em>See comments below, on <a href="https://aus.social/@jakecoppinger/110534074238406726" target="_blank" rel="noopener" title="">Mastodon</a>, <a href="https://news.ycombinator.com/item?id=36302303" target="_blank" rel="noopener" title="">Hacker News (51 comments)</a></em>, or <a href="https://www.linkedin.com/posts/jakecoppinger_mapping-pedestrian-traffic-light-timing-in-activity-7074143330825068544-V_ze" target="_blank" rel="noopener" title="">LinkedIn (22 comments, 278 likes, 32k views)</a></p>



<p><a href="https://en.wikipedia.org/wiki/Transport_for_NSW" target="_blank" rel="noreferrer noopener">Transport for NSW</a>, the government agency which controls traffic signal timing in Sydney and elsewhere in NSW, has an excellent <a href="https://www.future.transport.nsw.gov.au/future-transport-plans/active-transport-strategy" target="_blank" rel="noreferrer noopener">stated</a> goal of increasing walking and cycling trips &#8211; and reducing pedestrian wait times at intersections.</p>



<p>However, there is <em><strong>no public data on traffic light timing in Sydney or NSW</strong></em>.</p>



<p>In the absence of traffic light timing data, and as we hold hope for it to become publicly available; the aim of <a href="https://betterintersections.jakecoppinger.com/" target="_blank" rel="noopener" title="">Better Intersections</a> is to crowdsource measurements and inform where positive changes could be made. You can add data yourself via a <a href="https://betterintersections.jakecoppinger.com/about" target="_blank" rel="noopener" title="">simple Google Form</a>, and instructions are <a href="https://betterintersections.jakecoppinger.com/about" target="_blank" rel="noopener" title="">on the website about page</a>.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1776" height="1874" src="https://jakecoppinger.com/wp-content/uploads/2023/06/betterintersections-screenshot.png" alt="" class="wp-image-745" srcset="https://jakecoppinger.com/wp-content/uploads/2023/06/betterintersections-screenshot.png 1776w, https://jakecoppinger.com/wp-content/uploads/2023/06/betterintersections-screenshot-284x300.png 284w, https://jakecoppinger.com/wp-content/uploads/2023/06/betterintersections-screenshot-970x1024.png 970w, https://jakecoppinger.com/wp-content/uploads/2023/06/betterintersections-screenshot-768x810.png 768w, https://jakecoppinger.com/wp-content/uploads/2023/06/betterintersections-screenshot-1456x1536.png 1456w" sizes="auto, (max-width: 1776px) 100vw, 1776px" /><figcaption class="wp-element-caption">Screenshot of <a href="https://betterintersections.jakecoppinger.com" target="_blank" rel="noreferrer noopener">betterintersections.jakecoppinger.com</a></figcaption></figure>


<div id="mc_embed_shell"><style type="text/css">
        #mc_embed_signup{background:#fff; false;clear:left; font:14px Helvetica,Arial,sans-serif; width: 600px;}<br />
        /* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.<br />
           We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */<br />
</style>
<div id="mc_embed_signup"><form id="mc-embedded-subscribe-form" class="validate" action="https://jakecoppinger.us17.list-manage.com/subscribe/post?u=3c1bd4fc8fca6648af03e916a&amp;id=ad49243f2c&amp;f_id=00d3e4e3f0" method="post" name="mc-embedded-subscribe-form" target="_blank">
<div id="mc_embed_signup_scroll">
<h2><a href="http://eepurl.com/hemS9j" target="_blank" rel="noopener">Subscribe to Jake&#8217;s blog</a></h2>
Email notifications of new blog posts are infrequent, brief, and plain text.

</div>
</form></div>
</div>


<h2 class="wp-block-heading">Table of Contents</h2>



<div class="wp-block-aioseo-table-of-contents"><ul><li><a href="#aioseo-why-does-the-timing-of-pedestrian-signals-matter">Why does the timing of pedestrian signals matter?</a></li><li><a href="#aioseo-but-isnt-traffic-light-timing-variable">But isn&#x27;t traffic light timing variable?</a></li><li><a href="#aioseo-technical-details">Technical details</a></li><li><a href="#aioseo-possible-further-work">Possible further work</a></li><li><a href="#aioseo-related-organisations">Related organisations</a></li></ul></div>



<p>Better Intersections is a tool to record and visualise timing details for pedestrian and bicycle signals. It&#8217;s focused on Sydney &amp; NSW, Australia, but is adaptable for anywhere in the world. This website is open source on <a href="https://github.com/jakecoppinger/better-intersections" target="_blank" rel="noreferrer noopener">Github</a> (contributions welcome!), and the <a href="https://docs.google.com/spreadsheets/d/1L08GNolPYjiRwLOL2d3lAZPqwCNe5vGr6SAOtH7hnNM/edit?usp=sharing" target="_blank" rel="noopener" title="">data</a> is under an open license (<a href="https://opendatacommons.org/licenses/odbl/">ODbL</a> license).</p>



<p>If you have ideas for improvements, please create a <a href="https://github.com/jakecoppinger/better-intersections" target="_blank" rel="noreferrer noopener">Github issue</a>, comment below, email me at <a href="mailto:jake@jakecoppinger.com">jake@jakecoppinger.com</a> or message me on <a href="https://aus.social/@jakecoppinger" target="_blank" rel="noreferrer noopener">Mastodon (@jakecoppinger@aus.social)</a>.</p>



<p>It&#8217;s a work in progress! I&#8217;ve tinkered on it for a few afternoons and started working on it about two weeks ago.</p>



<p>This website bridges the excellent TfNSW Active Transport policy guidelines and pedestrians on the street themselves, allowing people on foot (and bicycle) to see their experience represented.</p>



<figure class="wp-block-image alignwide size-full"><img loading="lazy" decoding="async" width="1906" height="2112" src="https://jakecoppinger.com/wp-content/uploads/2023/06/Screen-Shot-2023-06-07-at-22.14.29.png" alt="" class="wp-image-739" srcset="https://jakecoppinger.com/wp-content/uploads/2023/06/Screen-Shot-2023-06-07-at-22.14.29.png 1906w, https://jakecoppinger.com/wp-content/uploads/2023/06/Screen-Shot-2023-06-07-at-22.14.29-271x300.png 271w, https://jakecoppinger.com/wp-content/uploads/2023/06/Screen-Shot-2023-06-07-at-22.14.29-924x1024.png 924w, https://jakecoppinger.com/wp-content/uploads/2023/06/Screen-Shot-2023-06-07-at-22.14.29-768x851.png 768w, https://jakecoppinger.com/wp-content/uploads/2023/06/Screen-Shot-2023-06-07-at-22.14.29-1386x1536.png 1386w, https://jakecoppinger.com/wp-content/uploads/2023/06/Screen-Shot-2023-06-07-at-22.14.29-1848x2048.png 1848w" sizes="auto, (max-width: 1906px) 100vw, 1906px" /><figcaption class="wp-element-caption">Detailed view of intersection (<a href="https://betterintersections.jakecoppinger.com/intersection/node/4054127218" target="_blank" rel="noopener" title="">betterintersections.jakecoppinger.com/intersection/node/4054127218</a>)</figcaption></figure>



<h1 class="wp-block-heading" id="aioseo-why-does-the-timing-of-pedestrian-signals-matter">Why does the timing of pedestrian signals matter?</h1>



<p><a target="_blank" rel="noreferrer noopener" href="https://en.wikipedia.org/wiki/Transport_for_NSW">Transport for NSW</a>, the government agency which controls traffic signal timing in Sydney and elsewhere in NSW, has an excellent <a target="_blank" rel="noreferrer noopener" href="https://www.future.transport.nsw.gov.au/future-transport-plans/active-transport-strategy">stated</a> goal of increasing walking and cycling trips &#8211; and reducing pedestrian wait times at intersections.</p>



<p>However, there is <em><strong>no public data on traffic light timing in Sydney or NSW</strong></em>.</p>



<p>In the absence of traffic light timing data, and as we hold hope for it to become publicly available; the aim of this project is to crowdsource measurements and inform where positive changes could be made.</p>



<p>This website bridges the excellent TfNSW Active Transport policy guidelines and pedestrians on the street themselves, allowing people on foot (and bicycle) to see their experience represented.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Increasing pedestrian priority and providing crossing opportunities at the right locations and along desire lines, reduces the risk of pedestrian injury at intersections by encouraging safer behaviours. Transport is currently rolling out measures at intersections to improve pedestrian priority in areas of high pedestrian activity. These measures may include automation of pedestrian crossings, <strong>reduced pedestrian wait times</strong>, provision of pedestrian crossings on missing legs and kerb ramps, where applicable.</p>
</blockquote>



<p>— <a target="_blank" rel="noreferrer noopener" href="https://www.future.transport.nsw.gov.au/sites/default/files/2022-12/Active_transport_strategy_0.pdf">TfNSW Active Transport Strategy, page 30.</a> Emphasis added.</p>



<p>Research has shown that 30 seconds is the longest a pedestrian will wait at a signalised crossings before attempting to cross against the &#8216;red man&#8217;. (<a target="_blank" rel="noreferrer noopener" href="http://content.tfl.gov.uk/factors-influencing-pedestrian-safety-literature-review.pdf">Martin, A., 2006. Factors influencing pedestrian safety: a literature review (No. PPR241). Wokingham, Berks: TRL (Transport for London.</a>)</p>



<p>From the above report:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Hunt, Lyons and Parker (2000) state that &#8216;Although no clear relationship has been established between pedestrian delay and casualties, <strong>a more balanced and responsive approach to the allocation of time at Pelican/Puffin crossings has the potential to make a substantial contribution to a decrease in pedestrian casualties as well as improving pedestrian amenity&#8217;.</strong> They point out that because pedestrians are more likely to become impatient when a red man continues to be shown during periods of low vehicle flow, the reduction of unnecessary delay for pedestrians should encourage pedestrians to use crossings correctly and reduce risk taking.</p>
</blockquote>



<p>In 2020, people driving vehicles killed 138 pedestrians on Australian roads (<a href="https://www.roadsafety.gov.au/nrss/fact-sheets/vulnerable-road-users">Department of Infrastructure, Transport, Regional Development and Communications (2021) Fact sheet: Vulnerable road users, National Road Safety Strategy.</a>)</p>



<h1 class="wp-block-heading" id="aioseo-but-isnt-traffic-light-timing-variable">But isn&#8217;t traffic light timing variable?</h1>



<p>Sydney uses a system called <a href="https://en.wikipedia.org/wiki/Sydney_Coordinated_Adaptive_Traffic_System">Sydney Coordinated Adaptive Traffic System (SCATS)</a> to control traffic signals, which makes use of many data feeds to control timing data.</p>



<p>Neither the inputs used, or the algorithm used to weigh the input data is public (as far as I know). This crowdsourced method of discrete measurements provides shows the output of the black box. In the case of outliers, multiple measurements (at different times of day/week) can be used to determine if the timing is variable.</p>



<p><a href="https://www.gehlpeople.com/" target="_blank" rel="noopener" title="">Gehl Architects</a> have a great methodology for measuring the overall impact of traffic light delays on pedestrians. At its most basic you walk along a street with two stopwatches;</p>



<ul class="wp-block-list">
<li>one you pause only when you&#8217;re walking;</li>



<li>one you pause only when you&#8217;re waiting at a traffic light.</li>
</ul>



<p>Divide one by the other at the end, and you have a single number that quantifies pedestrian delay walking along a street.</p>



<figure class="wp-block-image"><img decoding="async" src="https://betterintersections.jakecoppinger.com/img/gehl-methodology.png" alt=""/></figure>



<p>&#8211; <a target="_blank" rel="noreferrer noopener" href="https://www.cityofsydney.nsw.gov.au/surveys-case-studies-reports/public-spaces-public-life-studies">Public spaces &amp; public life: Sydney 2020, Gehl Architects, pg 142</a></p>



<p>The limitations of this method are that</p>



<ul class="wp-block-list">
<li>it cannot inform the exact problematic intersections;</li>



<li>paths must be long enough to gather a large enough sample size to be statistically significant.</li>
</ul>



<p>I&#8217;ve experimented with automating this method by recording a GPX (GPS) trace with a phone, uploading that file and getting a number instantly. Unfortunately the urban canyon effect (GPS signal loss caused by tall buildings) makes this method unreliable in cities, even with the remarkable sensor fusion on modern phones.</p>



<p>As with any of my projects, I am always open to collaboration. If you have any ideas, iterations or improvements, please drop me a line!</p>



<h1 class="wp-block-heading" id="aioseo-technical-details">Technical details</h1>



<p>This is a fairly simple Typescript app created using <code>Create React App</code> that I built in a few afternoons &#8211; please don&#8217;t consider it my finest code!</p>



<p>It is a static React app hosted on Cloudflare pages, and uses Mapbox GL JS to display the map (but could be easily updated to use Maplibre GL JS).</p>



<p>Google Sheets is treated as a backend (for simplicity using a Google Form for submissions), and the app makes use of OpenStreetMap node IDs as primary keys for intersections. This is definitely suboptimal but it&#8217;s quick to build &#8211; ideally I&#8217;d have a more custom form that is easier to use and doesn&#8217;t require a Google account &#8211; however using Google accounts for the form is a quick and easy method of minimising spam (and making it easy to identify) remove spam from a single person).</p>



<p>The OpenStreetMap API is used for looking up coordinates of OSM nodes and finding adjacent ways. There is currently one request per intersection made &#8211; this will not scale and I&#8217;ll likely need to cache the JSON (or hit an Overpass Turbo server instead).</p>



<p>The code is fully covered by Typescript types but doesn&#8217;t (yet?) have unit tests &#8211; it&#8217;s very easy to work with if you&#8217;re interested in tinkering with it!</p>



<h1 class="wp-block-heading" id="aioseo-possible-further-work">Possible further work</h1>



<ul class="wp-block-list">
<li>Adding a simplified version of the form</li>



<li>Support OSM ways as the primary key rather than just nodes (useful for crossings across divided carriageways with multiple traffic light nodes per crossing leg)</li>



<li>Tagging state roads and looking if these have longer wait times on average (probably)</li>



<li>Scatter plot of crossing times vs number of lanes (as rough proxy for traffic volume)</li>



<li>&#8220;sparkline&#8221; or other graphs of measurements for a given intersection</li>



<li>Thinking about how to record relationships between intersections (ie. green wave/lack of green wave for pedestrians)
<ul class="wp-block-list">
<li>Using YOLOv3 or another off the shelf commodity computer vision model for recognising green/flashing red/red traffic lights for algorithm measuring cycle times</li>
</ul>
</li>
</ul>



<h1 class="wp-block-heading" id="aioseo-related-organisations">Related organisations</h1>



<p>If you support better conditions for pedestrians and cyclists in Sydney/NSW, consider joining <a href="https://www.betterstreets.info/" target="_blank" rel="noopener" title="">BetterStreets</a> or <a href="https://30please.org/" target="_blank" rel="noopener" title="">30 Please</a>.</p>



<p></p><p>The post <a href="https://jakecoppinger.com/2023/06/mapping-pedestrian-traffic-light-timing-in-sydney-australia/">Mapping pedestrian traffic light timing in Sydney, Australia</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://jakecoppinger.com/2023/06/mapping-pedestrian-traffic-light-timing-in-sydney-australia/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Subterranean Sydney: A cross-section of Town Hall Station made with iPhone LiDAR</title>
		<link>https://jakecoppinger.com/2023/04/subterranean-sydney-a-cross-section-of-town-hall-station-made-with-iphone-lidar/</link>
					<comments>https://jakecoppinger.com/2023/04/subterranean-sydney-a-cross-section-of-town-hall-station-made-with-iphone-lidar/#comments</comments>
		
		<dc:creator><![CDATA[Jake C]]></dc:creator>
		<pubDate>Wed, 05 Apr 2023 14:07:08 +0000</pubDate>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Side project]]></category>
		<category><![CDATA[Sydney]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Trains]]></category>
		<category><![CDATA[Transit]]></category>
		<category><![CDATA[Urbanism]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[cross]]></category>
		<category><![CDATA[hall]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[lidar]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[poster]]></category>
		<category><![CDATA[section]]></category>
		<category><![CDATA[station]]></category>
		<category><![CDATA[sydney]]></category>
		<category><![CDATA[town]]></category>
		<category><![CDATA[trains]]></category>
		<category><![CDATA[underground]]></category>
		<guid isPermaLink="false">https://jakecoppinger.com/?p=649</guid>

					<description><![CDATA[<p>Using just an iPhone with LiDAR to create a cross-section 3D model and image of Town Hall Station with the LiDAR sensor on an iPhone.</p>
<p>The post <a href="https://jakecoppinger.com/2023/04/subterranean-sydney-a-cross-section-of-town-hall-station-made-with-iphone-lidar/">Subterranean Sydney: A cross-section of Town Hall Station made with iPhone LiDAR</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-image alignfull size-large"><img loading="lazy" decoding="async" width="1024" height="724" src="https://jakecoppinger.com/wp-content/uploads/2023/04/town-hall-station-poster-jake-coppinger-compressed-1024x724.jpg" alt="" class="wp-image-661" srcset="https://jakecoppinger.com/wp-content/uploads/2023/04/town-hall-station-poster-jake-coppinger-compressed-1024x724.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/04/town-hall-station-poster-jake-coppinger-compressed-300x212.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/04/town-hall-station-poster-jake-coppinger-compressed-768x543.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/04/town-hall-station-poster-jake-coppinger-compressed-1536x1086.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/04/town-hall-station-poster-jake-coppinger-compressed-2048x1448.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Image and poster is licensed <a href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank" rel="noopener" title="">CC BY-NC 4.0</a>. Feel free to share it, but don&#8217;t sell it! Better yet, share this blog post.</figcaption></figure>



<p>The above poster is an orthographic (ie. no perspective) render of a 3D model of the underground train station.</p>



<p>I created a 3D model by walking around the station holding an iPhone 14 Pro running the <a href="https://3dscannerapp.com/" target="_blank" rel="noopener" title="">3D Scanner App</a>, combining the segments in the 3d modelling software Blender and rendering it out as an image.</p>



<p>Aren&#8217;t the escalator and staircase crossovers a beautiful symmetrical pattern? I had no idea that&#8217;s how they were arranged. I think it&#8217;s a wonderful way to visualise architecture.</p>



<p>If you would like to download and print your own A3 poster, here are some high resolution copies. All are licensed <a href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank" rel="noopener" title="">CC BY-NC 4.0</a>.</p>



<ul class="wp-block-list"><li>9921 × 7016, 600dpi JPEG, ~32MB: <a href="http://files.jakecoppinger.com/town-hall-station-poster/town-hall-station-poster-jake-coppinger.jpg" target="_blank" rel="noopener" title="">files.jakecoppinger.com/town-hall-station-poster/town-hall-station-poster-jake-coppinger.jpg</a></li><li>PDF optimised for computers (RGB, interactive, ~4MB): <a href="http://files.jakecoppinger.com/town-hall-station-poster/town-hall-station-poster-jake-coppinger.pdf" target="_blank" rel="noopener" title="">files.jakecoppinger.com/town-hall-station-poster/town-hall-station-poster-jake-coppinger.pdf</a></li><li>PDF optimised for printing (CMYK, marks &amp; bleeds, ~50MB): <a href="http://files.jakecoppinger.com/town-hall-station-poster/town-hall-station-poster-jake-coppinger-print.pdf" target="_blank" rel="noopener" title="">files.jakecoppinger.com/town-hall-station-poster/town-hall-station-poster-jake-coppinger-print.pdf</a></li></ul>



<p>Enjoy!</p>



<p>Read on if you&#8217;d like to learn more about how to create a model of your own local train station or a multi-story building.</p>


<div id="mc_embed_shell"><style type="text/css">
        #mc_embed_signup{background:#fff; false;clear:left; font:14px Helvetica,Arial,sans-serif; width: 600px;}<br />
        /* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.<br />
           We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */<br />
</style>
<div id="mc_embed_signup"><form id="mc-embedded-subscribe-form" class="validate" action="https://jakecoppinger.us17.list-manage.com/subscribe/post?u=3c1bd4fc8fca6648af03e916a&amp;id=ad49243f2c&amp;f_id=00d3e4e3f0" method="post" name="mc-embedded-subscribe-form" target="_blank">
<div id="mc_embed_signup_scroll">
<h2><a href="http://eepurl.com/hemS9j" target="_blank" rel="noopener">Subscribe to Jake&#8217;s blog</a></h2>
Email notifications of new blog posts are infrequent, brief, and plain text.

</div>
</form></div>
</div>


<h1 class="wp-block-heading">Table of contents</h1>



<div class="wp-block-aioseo-table-of-contents"><ul><li><a href="#aioseo-behind-the-scenes">Behind the scenes</a></li><li><a href="#aioseo-overview-of-method">Overview of method</a></li><li><a href="#aioseo-detailed-method">Detailed method</a><ul><li><a href="#aioseo-setting-up-your-iphone">Setting up your iPhone</a></li><li><a href="#aioseo-capturing-the-model">Capturing the model</a></li><li><a href="#aioseo-aligning-the-models">Aligning and cleaning the models</a></li></ul></li><li><a href="#aioseo-possible-future-improvements">Possible future improvements</a></li><li><a href="#aioseo-further-reading">Related/further reading</a></li></ul></div>



<h1 class="wp-block-heading" id="aioseo-behind-the-scenes">Behind the scenes</h1>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="674" src="https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-ortho-1024x674.jpg" alt="" class="wp-image-654" srcset="https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-ortho-1024x674.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-ortho-300x198.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-ortho-768x506.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-ortho-1536x1011.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-ortho-2048x1348.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Different segments, ordered front (left) to back (right)</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="603" src="https://jakecoppinger.com/wp-content/uploads/2023/04/pastels-align-front-back-1024x603.jpg" alt="" class="wp-image-655" srcset="https://jakecoppinger.com/wp-content/uploads/2023/04/pastels-align-front-back-1024x603.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastels-align-front-back-300x177.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastels-align-front-back-768x452.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastels-align-front-back-1536x905.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastels-align-front-back-2048x1207.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Front (left) to back (right)</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="679" src="https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-north-view-1024x679.jpg" alt="" class="wp-image-656" srcset="https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-north-view-1024x679.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-north-view-300x199.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-north-view-768x509.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-north-view-1536x1018.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-north-view-2048x1358.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>View from the front, north end</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="618" src="https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-light-rail-view-1024x618.jpg" alt="" class="wp-image-657" srcset="https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-light-rail-view-1024x618.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-light-rail-view-300x181.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-light-rail-view-768x464.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-light-rail-view-1536x927.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/04/pastel-light-rail-view-2048x1237.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>View from the front, south end</figcaption></figure>



<h1 class="wp-block-heading" id="aioseo-overview-of-method">Overview of method</h1>



<ul class="wp-block-list"><li>install the <a href="https://3dscannerapp.com/" target="_blank" rel="noopener" title="">3D Scanner App</a> on an iPhone that supports LiDAR (iPhone Pro 12 or later, 2020+ iPad Pro)</li><li>slowly walk around with the app to generate a 3D LiDAR model</li><li>importing the 3D models into Blender</li><li>align the models</li><li>cleaning up any &#8220;noise&#8221; and chopping off half of some objects</li><li>render the model to an image</li><li>create a nice poster in Adobe InDesign!</li></ul>



<h1 class="wp-block-heading" id="aioseo-detailed-method">Detailed method</h1>



<h2 class="wp-block-heading" id="aioseo-setting-up-your-iphone">Setting up your iPhone</h2>



<p>These instructions are similar to those for my blog post on <a href="https://jakecoppinger.com/2023/03/generating-aerial-imagery-with-your-iphones-lidar-sensor/" target="_blank" rel="noopener" title="">Generating aerial imagery with your iPhone’s LiDAR sensor</a>.</p>



<p>I recommend using the app titled <code>3d Scanner App</code> as it allows considerable customisation of the scan settings, though other scanning apps like Polycam would also work. It allows finishing a scan and extending later, though this can be buggy. I haven’t had a crash during capture – I’ve had Polycam crash halfway through a large scan losing all data.</p>



<p>Download 3d Scanner App and use the LiDAR Advanced mode. I recommend the using the following options for scanning streets:</p>



<ul class="wp-block-list"><li>Confidence to low if you need the maximum 5 metre range for the sensor, otherwise set it to medium for a less noisy model</li><li>Range to 5.0 metres</li><li>Masking to None</li><li>Resolution to 50mm (the lowest – for large models like buildings or streets)</li></ul>



<p>In the app settings, make sure to set:</p>



<ul class="wp-block-list"><li>Units to metric</li><li>GPS can be turned on but likely won&#8217;t help you underground!</li></ul>



<h2 class="wp-block-heading" id="aioseo-capturing-the-model">Capturing the model</h2>



<p>Note that any commercial photography in a train station will require paperwork and special permission. Amateur/hobbyist/student use of a hand-held mobile device <a href="https://www.transport.nsw.gov.au/sydneytrains/community/filming" target="_blank" rel="noopener" title="">appears to be permitted</a> in Sydney train stations, just treat it like taking a photo/video for Instagram or Tiktok &#8211; don&#8217;t photograph people and keep an eye on your surroundings.</p>



<p>The safety precautions are common sense, but <a href="https://www.transport.nsw.gov.au/sydneytrains/community/filming" target="_blank" rel="noopener" title="">have a read</a>. Be careful not to cross over the yellow line when scanning. People will introduce artefacts into the model, so go in off peak or on a weekend to minimise crowds. The resolution and accuracy of the LiDAR scanning is not high enough to present any security concerns (any more than an Instagram photo).</p>



<p>When scanning, walk slowly with a sweeping motion to increase the maximum scanned width. If the area is wide enough to require a grid pattern, follow the same shape as a drone survey (an S-shape with considerable overlap). Not enough overlap or higher speeds mean the linear passes don’t connect correctly due to (I assume) inertial measurement unit drift.</p>



<h2 class="wp-block-heading" id="aioseo-aligning-the-models">Aligning and cleaning the models</h2>



<p>You will likely need to do multiple takes of your desired building, and then combine them together.</p>



<p>Share your models from 3D scanner app as OBJ via Airdrop (or your preferred method), decompress the ZIP file and then import the OBJ into Blender (File -> Import -> Wavefront (.obj)).</p>



<p>Some basic Blender skills come in handy here &#8211; it&#8217;s not an easy program to use, and I am no expert. If you haven&#8217;t used it before I recommend following a beginner blog post or video tutorial. A few specific tips:</p>



<ul class="wp-block-list"><li>Make liberal use of the numpad preset views: 1 for front on, 3 for side view, 7 for top, and 5 for toggling perspective<ul><li>If you don’t have a numpad you will need to enable numpad emulation, see instructions at <a href="https://www.hack-computer.com/post/how-to-emulate-a-third-mouse-button-and-keypad-for-blender" target="_blank" rel="noreferrer noopener">https://www.hack-computer.com/post/how-to-emulate-a-third-mouse-button-and-keypad-for-blender</a></li></ul></li><li>To remove noise or parts you don&#8217;t want, select the object, change into edit mode (tab key), and then change the Viewport Shading to Wireframe (with the globe button in the top right). Dragging with the left mouse button will select areas, or click <code>c</code> to drag a circle to select vertices (with +/- keys enlarging the circle).<ul><li>Changing the shading to Wireframe means that you can select vertices &#8220;hiding&#8221; behind others that may not be directly visible</li></ul></li><li>I couldn&#8217;t figure out how to disable perspective and get the framing I wanted in a proper render, so I did a Viewport render with the background set to white, Material Preview as the Viewport Shading mode and <code>Toggle X-Ray</code> to remove the grid<ul><li>The background still wasn&#8217;t perfectly white even though I set it to be, I had to use levels in Photoshop to get the background #FFFFFF. This may just be an error on my part!</li></ul></li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="721" src="https://jakecoppinger.com/wp-content/uploads/2023/04/aligning-models-1024x721.jpg" alt="" class="wp-image-663" srcset="https://jakecoppinger.com/wp-content/uploads/2023/04/aligning-models-1024x721.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/04/aligning-models-300x211.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/04/aligning-models-768x541.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/04/aligning-models-1536x1082.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/04/aligning-models-2048x1442.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h1 class="wp-block-heading" id="aioseo-possible-future-improvements">Possible future improvements</h1>



<ul class="wp-block-list"><li>Capturing pointclouds instead of meshes, aligning them in Cloudcompare (I believe there are tools for aligning pointclouds), then either rendering straight to an image or generating a mesh and rendering only faces/normals facing the camera</li><li>Reducing drift in capturing models. This would be algorithm heavy; maybe utilising survey markers or just known positions in a station, using Record3D, exporting sequences of <code>.obj</code> models (1 per frame), then constructing offline.</li><li>A cross section from the north or south would be interesting! (this view is from the west looking east)</li><li>Is it possible to create an accurate model with less takes? This would require less stitching in Blender</li><li>Are there ways to create a full 3D model, then just not render faces/normals that aren&#8217;t facing the camera?<ul><li>Better yet, not rendering faces/normals that are less than <em>x</em> degrees incident to the camera to reduce noise for flat surfaces</li></ul></li><li>How to handle glass surfaces better (LiDAR isn&#8217;t great with glass out of the box)</li><li>3D printing models</li></ul>



<p>Please let me know if you use this as inspiration for modelling stations elsewhere!</p>



<h1 class="wp-block-heading" id="aioseo-further-reading">Related/further reading</h1>



<ul class="wp-block-list"><li>Catharia O, Richard F, Vignoles H, Véron P, Aoussat A, Segonds F. Smartphone LiDAR Data: A Case Study for Numerisation of Indoor Buildings in Railway Stations. <em>Sensors (Basel)</em>. 2023;23(4):1967. Published 2023 Feb 9. doi:10.3390/s23041967: <a href="https://www.researchgate.net/publication/368448078_Smartphone_LiDAR_Data_A_Case_Study_for_Numerisation_of_Indoor_Buildings_in_Railway_Stations" target="_blank" rel="noopener" title="">https://www.researchgate.net/publication/368448078_Smartphone_LiDAR_Data_A_Case_Study_for_Numerisation_of_Indoor_Buildings_in_Railway_Stations</a></li></ul>



<ul class="wp-block-list"><li>Great tips for better 3D scans: <a href="https://docs.3dscannerapp.com/" target="_blank" rel="noopener" title="">https://docs.3dscannerapp.com/</a></li></ul>



<ul class="wp-block-list"><li>3D maps (orthographic projection) of every London Underground station</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="726" src="https://jakecoppinger.com/wp-content/uploads/2023/04/image-1024x726.png" alt="" class="wp-image-670" srcset="https://jakecoppinger.com/wp-content/uploads/2023/04/image-1024x726.png 1024w, https://jakecoppinger.com/wp-content/uploads/2023/04/image-300x213.png 300w, https://jakecoppinger.com/wp-content/uploads/2023/04/image-768x544.png 768w, https://jakecoppinger.com/wp-content/uploads/2023/04/image-1536x1089.png 1536w, https://jakecoppinger.com/wp-content/uploads/2023/04/image.png 1682w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Diagram by TfL</figcaption></figure>



<ul class="wp-block-list"><li><a href="https://www.whatdotheyknow.com/request/maps_of_public_corridors_on_larg" target="_blank" rel="noopener" title="">https://www.whatdotheyknow.com/request/maps_of_public_corridors_on_larg</a></li><li><a href="https://www.ianvisits.co.uk/articles/3d-maps-of-every-underground-station-ab-14630/" target="_blank" rel="noopener" title="">https://www.ianvisits.co.uk/articles/3d-maps-of-every-underground-station-ab-14630/</a></li></ul><p>The post <a href="https://jakecoppinger.com/2023/04/subterranean-sydney-a-cross-section-of-town-hall-station-made-with-iphone-lidar/">Subterranean Sydney: A cross-section of Town Hall Station made with iPhone LiDAR</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://jakecoppinger.com/2023/04/subterranean-sydney-a-cross-section-of-town-hall-station-made-with-iphone-lidar/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Generating aerial imagery with your iPhone&#8217;s LiDAR sensor</title>
		<link>https://jakecoppinger.com/2023/03/generating-aerial-imagery-with-your-iphones-lidar-sensor/</link>
					<comments>https://jakecoppinger.com/2023/03/generating-aerial-imagery-with-your-iphones-lidar-sensor/#comments</comments>
		
		<dc:creator><![CDATA[Jake C]]></dc:creator>
		<pubDate>Mon, 13 Mar 2023 21:00:00 +0000</pubDate>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Sydney]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Urbanism]]></category>
		<category><![CDATA[3d scanner app]]></category>
		<category><![CDATA[geotiff]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[lidar]]></category>
		<category><![CDATA[odm]]></category>
		<category><![CDATA[openaerialmap]]></category>
		<category><![CDATA[opendronemap]]></category>
		<category><![CDATA[openstreetmap]]></category>
		<category><![CDATA[orthoimagery]]></category>
		<category><![CDATA[orthophoto]]></category>
		<category><![CDATA[OSM]]></category>
		<category><![CDATA[polycam]]></category>
		<category><![CDATA[qgis]]></category>
		<category><![CDATA[raster]]></category>
		<category><![CDATA[sydney]]></category>
		<guid isPermaLink="false">https://jakecoppinger.com/?p=495</guid>

					<description><![CDATA[<p>This technical guide details how you can create your own aerial imagery and 3D models of streets with the built in iPhone LiDAR sensor and open source tools in the OpenDroneMap package.</p>
<p>The post <a href="https://jakecoppinger.com/2023/03/generating-aerial-imagery-with-your-iphones-lidar-sensor/">Generating aerial imagery with your iPhone’s LiDAR sensor</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>This technical guide details how you can create your own aerial imagery (aka satellite view/<a href="https://twitter.com/btaylor/status/1099370126678253569" target="_blank" rel="noreferrer noopener">bird mode</a>/orthorectified imagery) and 3D models of streets with the built in iPhone LiDAR sensor (iPhone Pro 12 or later, 2020+ iPad Pro) and open source tools in the <a href="https://www.opendronemap.org/" target="_blank" rel="noopener" title="">OpenDroneMap</a> package. All you need to do to capture the model is walk around with your iPhone at ground level.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://jakecoppinger.com/wp-content/uploads/2023/03/id-editor-open-aerial-map-1024x683.jpg" alt="" class="wp-image-534" srcset="https://jakecoppinger.com/wp-content/uploads/2023/03/id-editor-open-aerial-map-1024x683.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/03/id-editor-open-aerial-map-300x200.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/03/id-editor-open-aerial-map-768x513.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/03/id-editor-open-aerial-map-1536x1025.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/03/id-editor-open-aerial-map-2048x1367.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>The pedestrianised Margaret Street, Sydney with temporary treatment. Imagery captured with a handheld iPhone 14 Pro. Imagery at <a href="https://map.openaerialmap.org/#/-18.6328125,18.562947442888312,3/latest/" target="_blank" rel="noopener" title="">https://map.openaerialmap.org/#/-18.6328125,18.562947442888312,3/latest/</a></figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="682" src="https://jakecoppinger.com/wp-content/uploads/2023/03/image-1024x682.png" alt="" class="wp-image-529" srcset="https://jakecoppinger.com/wp-content/uploads/2023/03/image-1024x682.png 1024w, https://jakecoppinger.com/wp-content/uploads/2023/03/image-300x200.png 300w, https://jakecoppinger.com/wp-content/uploads/2023/03/image-768x511.png 768w, https://jakecoppinger.com/wp-content/uploads/2023/03/image-1536x1022.png 1536w, https://jakecoppinger.com/wp-content/uploads/2023/03/image.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Image by City of Sydney. The George Street Pride flag project is part of the NSW Government’s Streets as Shared Spaces program. <a href="https://www.cityofsydney.nsw.gov.au/improving-streets-public-spaces/closure-george-street-north" target="_blank" rel="noopener" title="">https://www.cityofsydney.nsw.gov.au/improving-streets-public-spaces/closure-george-street-north</a></figcaption></figure>



<div class="wp-block-aioseo-table-of-contents"><ul><li><a href="#aioseo-why-and-how">Why is this useful?</a></li><li><a href="#aioseo-overview">Process overview</a></li><li><a href="#aioseo-capturing-the-model">Capturing the model</a></li><li><a href="#aioseo-exporting-and-preparing-the-model">Exporting and preparing the model</a><ul><li><a href="#aioseo-rotating-the-model-into-the-correct-orientation">Rotating the model into the correct orientation (required for 3d Scanner App)</a></li></ul></li><li><a href="#aioseo-generating-the-raster-orthophoto">Generating the raster orthophoto</a><ul><li><a href="#aioseo-installing-webodm-locally">Installing WebODM locally</a></li><li><a href="#aioseo-copying-the-textured-object-into-the-odm-docker-container">Copying the object into the ODM Docker container</a></li><li><a href="#aioseo-running-odm_orthophoto">Running odm_orthophoto</a></li><li><a href="#aioseo-exporting-the-orthophoto-out-of-the-docker-container">Exporting the orthophoto out of the Docker container</a></li></ul></li><li><a href="#aioseo-georeferencing-the-orthophoto">Georeferencing the orthophoto</a><ul><li><a href="#aioseo-export-georeferenced-geotiff-without-worldfile">Export geo-referenced GeoTIFF (without worldfile)</a></li></ul></li><li><a href="#aioseo-uploading-to-openaerialmap">Uploading to OpenAerialMap</a></li><li><a href="#aioseo-limitations">Limitations</a></li><li><a href="#aioseo-future-work">Future work</a></li></ul></div>



<h1 class="wp-block-heading" id="aioseo-why-and-how">Why is this useful?</h1>



<p>Usually for such a task you would use a drone and process with <a href="https://opendronemap.org/webodm/" target="_blank" rel="noopener" title="">WebODM</a> (or <a href="https://www.pix4d.com/" target="_blank" rel="noopener" title="">Pix4D</a>), but there are areas that are unsafe or illegal to fly in. I&#8217;ve previously detailed how to generate imagery <a href="https://jakecoppinger.com/2022/12/creating-aerial-imagery-with-a-bike-helmet-camera-and-opendronemap/" target="_blank" rel="noopener" title="">using a bicycle helmet mounted GoPro camera</a>, however this can include artifacts where there are lots of people. The helmet camera method requires a decent GPS lock (unsuitable indoors, urban areas or under a bridge) and has relatively low detail.</p>



<p>Again, why might you want to do this? With your own high detail and up-to-date models and street imagery you could:</p>



<ul class="wp-block-list"><li>Map new street interventions, like bollards, modal filters or raised crossings</li><li>Record pothole locations (and their depth!)</li><li>Take measurements such as road and cycleway widths around crowds of people in urban centres</li><li>Measure footpath obstructions in 3D and rate pedestrian amenity</li><li>Survey features underneath large highways</li><li>Survey street parking using the new OSM spec: <a href="https://wiki.openstreetmap.org/wiki/Street_parking" target="_blank" rel="noreferrer noopener">wiki.openstreetmap.org/wiki/Street_parking</a></li><li>Map indoor pedestrian areas in OpenStreetMap for better pedestrian routing<ul><li>The Transport for NSW Connected Journeys Data team is currently doing a fair bit of this work: <a href="https://www.openstreetmap.org/changeset/133107592" target="_blank" rel="noopener" title="">https://www.openstreetmap.org/changeset/133107592</a></li></ul></li><li>Attach your iPhone to your bike and generate LiDAR point clouds of the kerb and cycleway infrastructure (it works, just go slow!)</li></ul>



<p>This method results in very high detail (5mm resolution if desired) 3D models and accurate orthoimagery. Manual georeferencing is required (which I also explain how to do) which limits the confidence in alignment. This is a proof of concept &#8211; if you have corrections/suggestions/ideas to improve the method, please comment below or on Mastodon!</p>



<p>Note: This method also provides a solution to <a href="https://community.opendronemap.org/t/creating-2-5d-oblique-orthophoto/13579">creating 2.5D oblique orthophotos</a> from drone imagery.</p>


<div id="mc_embed_shell"><style type="text/css">
        #mc_embed_signup{background:#fff; false;clear:left; font:14px Helvetica,Arial,sans-serif; width: 600px;}<br />
        /* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.<br />
           We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */<br />
</style>
<div id="mc_embed_signup"><form id="mc-embedded-subscribe-form" class="validate" action="https://jakecoppinger.us17.list-manage.com/subscribe/post?u=3c1bd4fc8fca6648af03e916a&amp;id=ad49243f2c&amp;f_id=00d3e4e3f0" method="post" name="mc-embedded-subscribe-form" target="_blank">
<div id="mc_embed_signup_scroll">
<h2><a href="http://eepurl.com/hemS9j" target="_blank" rel="noopener">Subscribe to Jake&#8217;s blog</a></h2>
Email notifications of new blog posts are infrequent, brief, and plain text.

</div>
</form></div>
</div>


<h1 class="wp-block-heading" id="aioseo-overview">Process overview</h1>



<p>This guide covers how to:</p>



<ul class="wp-block-list"><li>Capture a 3D model using <a href="https://3dscannerapp.com/" target="_blank" rel="noopener" title="">3d Scanner App</a> (recommended) or <a href="https://poly.cam/" target="_blank" rel="noopener" title="">Polycam</a><ul><li>The iPhone LiDAR sensor has 5 metres max range, so you&#8217;ll need to walk around</li></ul></li><li>Export the model to an <code>.obj</code> file with textures</li><li>Rotating the model in Blender to the required orientation</li><li>Use the <code>odm_orthophoto</code> program inside the OpenDroneMap Docker container to generate a raster <code>.tiff</code></li><li>Georeference the tiff using QGIS</li><li>Uploading the Geotiff to OpenAerialMap to generate a tileset, viewable in the OpenStreetMap <a href="https://github.com/openstreetmap/iD" target="_blank" rel="noopener" title="">iD editor</a> or a Felt map with a custom layer</li></ul>



<h1 class="wp-block-heading" id="aioseo-capturing-the-model">Capturing the model</h1>



<p>Capturing a 3D model on an supported iPhone is easy. I recommend using the app titled <code>3d Scanner App</code> as it allows considerable customisation of the scan settings. It allows finishing a scan and extending later, though this can be buggy. I haven&#8217;t had a crash during capture &#8211; I&#8217;ve had Polycam crash halfway through a large scan losing all data.</p>



<p>Download 3d Scanner App and use the LiDAR Advanced mode. I recommend the following options for scanning streets:</p>



<ul class="wp-block-list"><li>Confidence to low. This extends the range of the LiDAR sensor readings used at the expense of more noise. You can clean up this noise in the processing settings or Blender.</li><li>Range to 5.0 metres</li><li>Masking to None</li><li>Resolution to 50mm (the lowest &#8211; for large models like streets)</li></ul>



<p>In the app settings, make sure to set:</p>



<ul class="wp-block-list"><li>GPS tag scans to ON</li><li>Units to metric</li></ul>



<p>When scanning a street, walk (or cycle) slowly with a sweeping motion to increase the width. If the area is wide enough to require a grid pattern, follow the same shape as a drone survey (an S-shape with considerable overlap). Not enough overlap or higher speeds mean the linear passes don&#8217;t connect correctly due to (I assume) inertial measurement unit drift. I&#8217;m unsure if the GPS information is used in the sensor fusion (<a href="https://developer.apple.com/augmented-reality/arkit/" target="_blank" rel="noopener" title="">via ARKit</a>), please comment if you know!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="472" height="1024" src="https://jakecoppinger.com/wp-content/uploads/2023/03/3d-scanner-app-model-472x1024.jpg" alt="" class="wp-image-517" srcset="https://jakecoppinger.com/wp-content/uploads/2023/03/3d-scanner-app-model-472x1024.jpg 472w, https://jakecoppinger.com/wp-content/uploads/2023/03/3d-scanner-app-model-138x300.jpg 138w, https://jakecoppinger.com/wp-content/uploads/2023/03/3d-scanner-app-model-768x1665.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/03/3d-scanner-app-model-709x1536.jpg 709w, https://jakecoppinger.com/wp-content/uploads/2023/03/3d-scanner-app-model-945x2048.jpg 945w, https://jakecoppinger.com/wp-content/uploads/2023/03/3d-scanner-app-model.jpg 1179w" sizes="auto, (max-width: 472px) 100vw, 472px" /><figcaption>View of the completed model</figcaption></figure>



<h1 class="wp-block-heading" id="aioseo-exporting-and-preparing-the-model">Exporting and preparing the model</h1>



<p>In the <code>3d Scanner App</code> use the Share button, then select the <code>.obj</code> file type. Send this to your computer (Airdrop works great if using macOS). <em>If using <a href="https://poly.cam/" target="_blank" rel="noopener" title="">Polycam</a>, set &#8220;Z axis up&#8221; in the mesh export settings</em>.</p>



<h2 class="wp-block-heading" id="aioseo-rotating-the-model-into-the-correct-orientation">Rotating the model into the correct orientation (required for 3d Scanner App)</h2>



<p>Unfortunately the <code>3d Scanner App</code> exports objects with the Z axis as &#8220;up&#8221;, while the <code>odm_orthophoto</code> program expects the Y axis to be &#8220;up&#8221;. <em>Confusingly, you can skip this step if using <a href="https://poly.cam/" target="_blank" rel="noopener" title="">Polycam</a> if exporting with &#8220;Z axis up&#8221; in the mesh export settings, though Blender shows the Y axis as up in this export. If you know why this is, please leave a comment!</em></p>



<p>To rotate the model, import it to Blender and rotate it 90 degrees.</p>



<ul class="wp-block-list"><li>First, install Blender via your preferred method (<a href="https://www.blender.org/download/" target="_blank" rel="noopener" title="">https://www.blender.org/download/</a>).</li><li>Open Blender, delete the initial default cube (right click -&gt; delete, or <code>x</code> hotkey)</li><li>Import the <code>.obj</code> file: File -&gt; Import -&gt; Wavefront (.obj)</li><li>(optional: you can view the pretty texture by selecting &#8220;viewport shading&#8221; in the top right (the horizontal list of sphere icons))</li></ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="934" height="468" src="https://jakecoppinger.com/wp-content/uploads/2023/03/Screen-Shot-2023-03-12-at-20.44.19.png" alt="" class="wp-image-518" srcset="https://jakecoppinger.com/wp-content/uploads/2023/03/Screen-Shot-2023-03-12-at-20.44.19.png 934w, https://jakecoppinger.com/wp-content/uploads/2023/03/Screen-Shot-2023-03-12-at-20.44.19-300x150.png 300w, https://jakecoppinger.com/wp-content/uploads/2023/03/Screen-Shot-2023-03-12-at-20.44.19-768x385.png 768w" sizes="auto, (max-width: 934px) 100vw, 934px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="661" src="https://jakecoppinger.com/wp-content/uploads/2023/03/model-in-blender-before-rotate-1024x661.jpg" alt="" class="wp-image-519" srcset="https://jakecoppinger.com/wp-content/uploads/2023/03/model-in-blender-before-rotate-1024x661.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/03/model-in-blender-before-rotate-300x194.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/03/model-in-blender-before-rotate-768x496.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/03/model-in-blender-before-rotate-1536x991.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/03/model-in-blender-before-rotate-2048x1321.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Model appearing in correct orientation in Blender, before rotating for export</figcaption></figure>



<ul class="wp-block-list"><li>To rotate<ul><li>Click the object and make sure it is selected (orange border)</li></ul><ul><li>Press hotkey&nbsp;<code>r</code>&nbsp;(from any view)</li><li>Press&nbsp;<code>x</code>&nbsp;to only allow rotation on X axis</li><li>Type&nbsp;<code>90</code>&nbsp;(or desired degrees to rotate)</li></ul></li><li>Optional: You can check if the rotation is correct by pressing numpad key 1. If you don&#8217;t have a numpad you will need to enable numpad emulation (see instructions at <a href="https://www.hack-computer.com/post/how-to-emulate-a-third-mouse-button-and-keypad-for-blender" target="_blank" rel="noopener" title="">https://www.hack-computer.com/post/how-to-emulate-a-third-mouse-button-and-keypad-for-blender</a>). <ul><li>The rotation is correct if you have a &#8220;birds eye view&#8221; in the numpad key 1 view, where the blue Z axis is towards the top of screen and the red X axis is towards the right of screen</li></ul></li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="661" src="https://jakecoppinger.com/wp-content/uploads/2023/03/blender-view-after-rotating-1024x661.jpg" alt="" class="wp-image-521" srcset="https://jakecoppinger.com/wp-content/uploads/2023/03/blender-view-after-rotating-1024x661.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/03/blender-view-after-rotating-300x194.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/03/blender-view-after-rotating-768x496.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/03/blender-view-after-rotating-1536x991.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/03/blender-view-after-rotating-2048x1321.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Correct orientation for export to <code>odm_orthophoto</code>. Not the axis display at the top right.</figcaption></figure>



<ul class="wp-block-list"><li>File -&gt; Export as an <code>.obj</code> <strong>to the same folder</strong> with a new name (eg. <code>blender_export.obj</code>)<ul><li>Note: Blender doesn&#8217;t create a new texture <code>.jpg</code>. If you export to a different folder the path to the <code>.jpg</code> in the <code>.mtl</code> file will need updating.</li></ul></li></ul>



<h1 class="wp-block-heading" id="aioseo-generating-the-raster-orthophoto">Generating the raster orthophoto</h1>



<p>Use the <code>odm_orthophoto</code> command line tool to generate a raster orthophoto from a <code>.obj</code> file. This tool is available at <a href="https://github.com/OpenDroneMap/odm_orthophoto" target="_blank" rel="noopener" title="">https://github.com/OpenDroneMap/odm_orthophoto</a> but has a considerable number of dependencies.</p>



<p>I believe the easiest method currently is to install WebODM locally, copy the <code>.obj</code> and texture files (<code>.mtl</code> and <code>.jpg</code>) into the Docker container and then run the program from inside the Docker container.</p>



<h2 class="wp-block-heading" id="aioseo-installing-webodm-locally">Installing WebODM locally</h2>



<p>Running the software using Docker is a breeze. Install Docker from <a href="https://www.docker.com/" target="_blank" rel="noreferrer noopener">https://www.docker.com/</a> (or your preferred method) and then:</p>



<pre class="wp-block-code"><code>git clone https://github.com/OpenDroneMap/WebODM --config core.autocrlf=input --depth 1
cd WebODM
./webodm.sh start </code></pre>



<p>See <a href="https://github.com/OpenDroneMap/WebODM#getting-started" target="_blank" rel="noreferrer noopener">https://github.com/OpenDroneMap/WebODM#getting-started</a> for more details. WebODM itself is excellent and great fun if you have a drone!</p>



<h2 class="wp-block-heading" id="aioseo-copying-the-textured-object-into-the-odm-docker-container">Copying the object into the ODM Docker container</h2>



<p>You can start a shell in the container with the following command:</p>



<pre class="wp-block-code"><code>docker exec -it webodm_node-odm_1 /bin/bash</code></pre>



<p>Make a new directory to keep your files in</p>



<pre class="wp-block-code"><code>mkdir /iphone_model
cd /iphone_model</code></pre>



<p>In another shell, copy the object and texture files from your local machine into the new Docker container folder. <code>docker cp</code> can only copy one file at a time.</p>



<pre class="wp-block-code"><code>cd path/to/your/model/
docker cp blender_export.obj webodm_node-odm_1:/iphone_model/
docker cp blender_export.mtl webodm_node-odm_1:/iphone_model/
# Note: The blender .obj export doesn't create a new texture .jpg
#   If your Blender export wasn't in the same directory, check
#   update the path in blender_export.mtl
docker cp textured_output.jpg webodm_node-odm_1:/iphone_model/</code></pre>



<h2 class="wp-block-heading" id="aioseo-running-odm_orthophoto">Running <code>odm_orthophoto</code></h2>



<p>In the shell you started in the docker container above, run the following command:</p>



<pre class="wp-block-code"><code>cd /iphone_model/
/code/SuperBuild/install/bin/odm_orthophoto -inputFiles blender_export.obj -logFile log.txt -outputFile orthophoto.tif -resolution 100.0 -outputCornerFile corners.txt</code></pre>



<p>The <code>resolution</code> argument is how many pixels per metre &#8211; this may require changing.</p>



<h2 class="wp-block-heading" id="aioseo-exporting-the-orthophoto-out-of-the-docker-container">Exporting the orthophoto out of the Docker container</h2>



<p>To copy the generated orthophoto out, from a shell on your local machine run:</p>



<pre class="wp-block-code"><code>docker cp webodm_node-odm_1:/iphone_model/orthophoto.tif .</code></pre>



<p>Use a similar command to extract the log file if required.</p>



<h1 class="wp-block-heading" id="aioseo-georeferencing-the-orthophoto">Georeferencing the orthophoto</h1>



<p>Georeferencing is the process of specifying the location and orientation of the image so it perfectly aligns with maps or GIS software. <em>While a rough location (with a moderately incorrect rotation) is stored in the model, it appears to be removed by the Blender rotation step. If you know how to fix this please comment below!</em></p>



<p>To do this:</p>



<ul class="wp-block-list"><li>Install QGIS by your preferred method: <a href="https://www.qgis.org/en/site/forusers/download.html" target="_blank" rel="noopener" title="">https://www.qgis.org/en/site/forusers/download.html</a></li><li>Install the plugins (via the Plugins -&gt; Manage &amp; Install plugins&#8230; menu)<ul><li>QuickMapServices (to pull in Bing satellite imagery easily)</li><li>Freehand raster georeferencer (a beginner friendly georeferencing tool)</li></ul></li><li>Add a Bing satellite base layer: Web -&gt; QuickMapServices -&gt; Bing -&gt; Bing Satellite<ul><li>Feel free to choose another satellite background of your chosing</li><li>If you&#8217;re in NSW: the NSW LPI Imagery is likely the most detailed, follow: <a href="https://www.spatial.nsw.gov.au/products_and_services/web_services/qgis" target="_blank" rel="noopener" title="">https://www.spatial.nsw.gov.au/products_and_services/web_services/qgis</a></li></ul></li><li>Zoom &amp; pan to the rough location of the 3d scan (the initial <code>.tif</code> location will be wherever you&#8217;re viewing)</li><li>Drag the <code>.tif</code> output by the previous step into the sidebar (it won&#8217;t be visible yet as it is not aligned)</li><li>Go to Raster-&gt; Freehand raster georeferencer -&gt; Add raster for freehand georeferencing and select the same <code>.tif</code></li><li>Use the Move, Rotate and scale buttons in the toolbar to align your orthophoto with the imagery background (tip. Hold Cmd or Ctrl <em>before</em> scaling to keep the aspect ratio)</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="206" src="https://jakecoppinger.com/wp-content/uploads/2023/03/Screen-Shot-2023-03-11-at-14.14.48-1024x206.png" alt="" class="wp-image-512" srcset="https://jakecoppinger.com/wp-content/uploads/2023/03/Screen-Shot-2023-03-11-at-14.14.48-1024x206.png 1024w, https://jakecoppinger.com/wp-content/uploads/2023/03/Screen-Shot-2023-03-11-at-14.14.48-300x60.png 300w, https://jakecoppinger.com/wp-content/uploads/2023/03/Screen-Shot-2023-03-11-at-14.14.48-768x154.png 768w, https://jakecoppinger.com/wp-content/uploads/2023/03/Screen-Shot-2023-03-11-at-14.14.48.png 1046w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Buttons to move/scale/rotate</figcaption></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="791" src="https://jakecoppinger.com/wp-content/uploads/2023/03/aligning-tiff-1024x791.jpg" alt="" class="wp-image-522" srcset="https://jakecoppinger.com/wp-content/uploads/2023/03/aligning-tiff-1024x791.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/03/aligning-tiff-300x232.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/03/aligning-tiff-768x593.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/03/aligning-tiff-1536x1186.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2023/03/aligning-tiff-2048x1581.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Aligned to the nearby buildings</figcaption></figure>



<ul class="wp-block-list"><li>Click the &#8220;Export raster with world file&#8221; button (Green on the right with exclamation marks).</li><li>Check the &#8220;Only export world file for chosen raster&#8221; button. <strong>Make sure to do this before chosing the image path.</strong></li><li>Select the existing <code>.tif</code> image and press OK</li><li>Remove the orthophoto from the QGIS sidebar (right click -&gt; remove layer)</li><li>Drag the existing <code>.tif</code> image back into the sidebar. QGIS will now find the worldfiles next to it (<code>orthophoto.tif.aux.xml</code> and <code>orthophoto.tfw</code>) so it will be positioned in the right place</li></ul>



<h2 class="wp-block-heading" id="aioseo-export-georeferenced-geotiff-without-worldfile">Export geo-referenced GeoTIFF (without worldfile)</h2>



<p>If you would like to upload the GeoTIFF to OpenAerialMap or somewhere else, you will need to &#8220;bake in&#8221; the location into the GeoTIFF itself, rather than in the worldfile &#8211; OpenAerialMap can&#8217;t read the worldfile.</p>



<p>To do this:</p>



<ul class="wp-block-list"><li>right click your <code>orthophoto</code> layer (after the above steps) and click Export -&gt; Save As&#8230;</li><li>Set <code>CRS</code> to your desired coordinate system (if not yet in a coordinate system, <a href="https://gis.stackexchange.com/questions/48949/epsg-3857-or-4326-for-googlemaps-openstreetmap-and-leaflet" target="_blank" rel="noopener" title="">I assume you should use <strong><code>EPSG 3857</code></strong> if you want it to be aligned with OpenStreetMap tiles</a>, but this is the limit of my current understanding &#8211; I haven&#8217;t studied surveying yet!).</li><li>To avoid confusion, create a new subfolder and save it with the default settings (eg. make folder <code>qgis_export</code> and save as orthophoto.tif).</li><li>You now have a nice georeferenced GeoTIFF!</li></ul>



<h1 class="wp-block-heading" id="aioseo-uploading-to-openaerialmap">Uploading to OpenAerialMap</h1>



<p>If you want the imagery to be publicly viewable and accessible from the OpenStreetMap iD editor, OpenAerialMap is a free place to host your imagery.</p>



<p>This is the imagery from the above example: <a href="https://map.openaerialmap.org/#/-18.6328125,18.562947442888312,3/latest/" target="_blank" rel="noopener" title="">https://map.openaerialmap.org/#/-18.6328125,18.562947442888312,3/latest/</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="675" src="https://jakecoppinger.com/wp-content/uploads/2023/03/open-aerial-map-margaret-st-1024x675.jpg" alt="" class="wp-image-553" srcset="https://jakecoppinger.com/wp-content/uploads/2023/03/open-aerial-map-margaret-st-1024x675.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2023/03/open-aerial-map-margaret-st-300x198.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2023/03/open-aerial-map-margaret-st-768x506.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2023/03/open-aerial-map-margaret-st.jpg 1500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>I&#8217;ve heard of plans for a relaunch of the website, but currently the upload form can be finicky.</p>



<ul class="wp-block-list"><li>Open the explore page: <a href="https://map.openaerialmap.org/" target="_blank" rel="noopener" title="">https://map.openaerialmap.org/</a></li><li>Sign in (only Google &amp; FB Oauth supported)</li><li>Press upload<ul><li>Currently uploading from local file doesn&#8217;t appear to work, see <a href="https://github.com/hotosm/OpenAerialMap/issues/158" target="_blank" rel="noopener" title="">https://github.com/hotosm/OpenAerialMap/issues/158</a> for updates</li><li>Uploading via Google Drive with my account (2fa enabled, Gsuite) fails with This app is blocked: This app tried to access sensitive info in your Google Account. To keep your account safe, Google blocked this access.<ul><li>Enabling less secure apps is not possible for 2fa accounts. Otherwise, if you&#8217;re comfortable turning it off you can do that here: <a href="https://myaccount.google.com/lesssecureapps" target="_blank" rel="noopener" title="">https://myaccount.google.com/lesssecureapps</a></li></ul></li><li>Using a URL is likely the only way. Creating an S3 bucket is one way. If you have a fast connection it would be faster to run a local webserver with Python and running <a href="https://ngrok.com/download" target="_blank" rel="noopener" title="">ngrok</a> to make it publicly available. I recommend not keeping this server running for longer than necessary. Eg:</li></ul></li></ul>



<pre class="wp-block-code"><code>cd qgis_export
python3 -m http.server 8080
ngrok http 8080
# Your file is now available at https://SOME_PATH.ngrok.io/orthophoto.tif</code></pre>



<p>Specify this url in the form and add other details, then press upload.</p>



<h1 class="wp-block-heading" id="aioseo-limitations">Limitations</h1>



<ul class="wp-block-list"><li>Manual alignment limits the real world accuracy of imagery</li><li>Drift during long model captures occurs. My understanding is drift occurs more when there are sudden or fast movements. The 3d Scanner App unfortunately doesn&#8217;t warn you when you&#8217;re moving to fast, but Polycam does. As far as I know, the iOS ARKit doesn&#8217;t attempt to reconcile drift when completing a loop/circuit.</li></ul>



<h1 class="wp-block-heading" id="aioseo-future-work">Future work</h1>



<ul class="wp-block-list"><li>Automation! This process is slow but it works.<ul><li>Adding a Makefile or other compile tooling to <a href="https://github.com/OpenDroneMap/odm_orthophoto" target="_blank" rel="noopener" title="">https://github.com/OpenDroneMap/odm_orthophoto</a> would skip the requirement to install WebODM and transfer files to/from the Docker container</li><li>Rotating the model could be added (behind a flag to be backwards compatible) to the odm_orthophoto script</li></ul></li><li>Generating pointclouds (supported by 3d Scanner App) and then exporting as a raster from CloudCompare. This might make larger captures possible.<ul><li>If there is a way of addressing drift of pointclouds for multiple captures &#8211; let me know how!</li></ul></li><li>Georeferencing using ground control points rather than a freehand referencer</li><li>Creating street facade montages and evaluating doors &amp; soft edges (Jan Gehl (1986) “Soft edges” in residential streets, Scandinavian Housing and Planning Research,3:2,89-102, DOI: <a href="https://doi.org/10.1080/02815738608730092">10.1080/02815738608730092</a>)</li></ul>



<p>Let me know if you have any corrections/suggestions/feedback!</p><p>The post <a href="https://jakecoppinger.com/2023/03/generating-aerial-imagery-with-your-iphones-lidar-sensor/">Generating aerial imagery with your iPhone’s LiDAR sensor</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://jakecoppinger.com/2023/03/generating-aerial-imagery-with-your-iphones-lidar-sensor/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Lane-accurate street maps with OpenStreetMap &#8211; writing a vector tileserver for osm2streets</title>
		<link>https://jakecoppinger.com/2023/01/lane-accurate-street-maps-with-openstreetmap-writing-a-vector-tileserver-for-osm2streets/</link>
					<comments>https://jakecoppinger.com/2023/01/lane-accurate-street-maps-with-openstreetmap-writing-a-vector-tileserver-for-osm2streets/#comments</comments>
		
		<dc:creator><![CDATA[Jake C]]></dc:creator>
		<pubDate>Tue, 17 Jan 2023 12:18:49 +0000</pubDate>
				<category><![CDATA[Cycling]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Maps]]></category>
		<category><![CDATA[Side project]]></category>
		<category><![CDATA[Tech]]></category>
		<guid isPermaLink="false">https://jakecoppinger.com/?p=467</guid>

					<description><![CDATA[<p>I've built safecyclingmap.com, an open-source proof of concept map that renders cycleways and streets down to the individual lanes, to assist cyclists picking safe routes in cities with little dedicated cycling infrastructure.</p>
<p>The post <a href="https://jakecoppinger.com/2023/01/lane-accurate-street-maps-with-openstreetmap-writing-a-vector-tileserver-for-osm2streets/">Lane-accurate street maps with OpenStreetMap – writing a vector tileserver for osm2streets</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-image alignwide size-full"><img loading="lazy" decoding="async" width="2152" height="2112" src="https://jakecoppinger.com/wp-content/uploads/2023/01/safecyclingmap.png" alt="" class="wp-image-475" srcset="https://jakecoppinger.com/wp-content/uploads/2023/01/safecyclingmap.png 2152w, https://jakecoppinger.com/wp-content/uploads/2023/01/safecyclingmap-300x294.png 300w, https://jakecoppinger.com/wp-content/uploads/2023/01/safecyclingmap-1024x1005.png 1024w, https://jakecoppinger.com/wp-content/uploads/2023/01/safecyclingmap-768x754.png 768w, https://jakecoppinger.com/wp-content/uploads/2023/01/safecyclingmap-1536x1507.png 1536w, https://jakecoppinger.com/wp-content/uploads/2023/01/safecyclingmap-2048x2010.png 2048w" sizes="auto, (max-width: 2152px) 100vw, 2152px" /></figure>



<p>I&#8217;ve built <a href="https://safecyclingmap.com/" target="_blank" rel="noopener" title="">safecyclingmap.com</a>, an <a href="https://github.com/jakecoppinger/safe-cycling-map" target="_blank" rel="noopener" title="">open-source</a> proof of concept map that renders cycleways and streets down to the individual lanes, to assist cyclists picking safe routes and support advocacy for reallocating road space to more efficient modes (as supported by the TfNSW Future Transport Strategy).</p>



<p>I&#8217;ve open sourced the backend infrastructure so that others can incorporate the details into their web and phone maps (see <a href="https://github.com/jakecoppinger/osm2streets-vector-tileserver" target="_blank" rel="noopener" title="">osm2streets-vector-tileserver</a> or read below). This builds upon the incredible work of <a href="https://dabreegster.github.io/" target="_blank" rel="noreferrer noopener">Dustin Carlino</a> who leads the <a href="https://github.com/a-b-street/abstreet#ab-street" target="_blank" rel="noreferrer noopener">A/B Street traffic simulation project</a>.</p>



<p>I wrote the initial vector tileserver from scratch in one afternoon in Typescript, calling the JS bindings for the Rust osm2streets code compiled to wasm. It generates GeoJSON which is then returned by Koa as a protobuf. I&#8217;ve spent some more hours improving performance, but there is much that could be improved.</p>



<p>The TfNSW Future Transport Strategy states &#8220;We will focus on getting more out of our existing investments, by reallocating road space to more efficient modes of transport like buses, walking, cycling and micromobility devices.&#8221;</p>



<p>This blog post explains how and why I built it.</p>



<h3 class="wp-block-heading">Existing detailed street maps</h3>



<p>Most street maps just use a line for each street:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1005" src="https://jakecoppinger.com/wp-content/uploads/2023/01/straight_line_google-1024x1005.png" alt="" class="wp-image-478" srcset="https://jakecoppinger.com/wp-content/uploads/2023/01/straight_line_google-1024x1005.png 1024w, https://jakecoppinger.com/wp-content/uploads/2023/01/straight_line_google-300x294.png 300w, https://jakecoppinger.com/wp-content/uploads/2023/01/straight_line_google-768x754.png 768w, https://jakecoppinger.com/wp-content/uploads/2023/01/straight_line_google-1536x1507.png 1536w, https://jakecoppinger.com/wp-content/uploads/2023/01/straight_line_google-2048x2010.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Usually the colour of this line denotes how large or important the road is. If your city doesn&#8217;t have much dedicated bicycle infrastructure, picking a safe road can be a challenge.</p>



<p>In 2020 Google announced that it would be implementing more detailed street maps in selected cities:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Soon, you’ll be able to see highly detailed street information that shows the accurate shape and width of a road to scale. You can also see exactly where sidewalks, crosswalks, and pedestrian islands are located… We’ll start rolling out detailed street maps in London, New York, and San Francisco in the coming months, with plans to expand to more cities over time.</p><cite><a href="https://blog.google/products/maps/more-detailed-colorful-map/">A more detailed, colorful map, Aug 18th 2020, Google.</a></cite></blockquote>



<p>Justin O&#8217;Beirne, a prolific writer on the consumer maps competitive landscape, <a href="https://www.justinobeirne.com/google-maps-detailed-street-maps-release-3" target="_blank" rel="noopener" title="">wrote in April 2022</a> that Google has released detailed street maps in 40 cities so far. No cities in Australia make up this list.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1005" data-id="479" src="https://jakecoppinger.com/wp-content/uploads/2023/01/google_detailed-1024x1005.png" alt="" class="wp-image-479" srcset="https://jakecoppinger.com/wp-content/uploads/2023/01/google_detailed-1024x1005.png 1024w, https://jakecoppinger.com/wp-content/uploads/2023/01/google_detailed-300x294.png 300w, https://jakecoppinger.com/wp-content/uploads/2023/01/google_detailed-768x754.png 768w, https://jakecoppinger.com/wp-content/uploads/2023/01/google_detailed-1536x1507.png 1536w, https://jakecoppinger.com/wp-content/uploads/2023/01/google_detailed-2048x2010.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<h3 class="wp-block-heading">Open source competition</h3>



<p>OpenStreetMap (OSM) is a free, editable map of the whole world that is being built by volunteers largely from scratch and released with an open-content license. Because of the license it has grown quickly and now rivals (and often exceeds) the detail of commercial map providers. OSM data is used in Instagram, Wikipedia, Strava, Snapchat, Uber and many others.</p>



<p>An project using this data has been quietly generating highly detailed street maps. <a href="https://dabreegster.github.io/" target="_blank" rel="noreferrer noopener">Dustin Carlino</a> started building the <a href="https://github.com/a-b-street/abstreet#ab-street" target="_blank" rel="noreferrer noopener">A/B Street traffic simulation app</a> <a href="https://a-b-street.github.io/docs/project/history/year2.html" target="_blank" rel="noreferrer noopener">since around 2019</a>, and as part of this released the <a href="https://github.com/a-b-street/osm2streets" target="_blank" rel="noopener" title="">osm2streets</a> project. osm2streets takes OSM data and draws detailed shapes of streets &#8211; though didn&#8217;t yet support rendering into generic web or phone &#8220;slippy&#8221; maps as detailed on this <a href="https://github.com/a-b-street/osm2streets/issues/12" target="_blank" rel="noopener" title="">Github issue</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="706" src="https://jakecoppinger.com/wp-content/uploads/2023/01/brunswick-1024x706.png" alt="" class="wp-image-480" srcset="https://jakecoppinger.com/wp-content/uploads/2023/01/brunswick-1024x706.png 1024w, https://jakecoppinger.com/wp-content/uploads/2023/01/brunswick-300x207.png 300w, https://jakecoppinger.com/wp-content/uploads/2023/01/brunswick-768x530.png 768w, https://jakecoppinger.com/wp-content/uploads/2023/01/brunswick-1536x1059.png 1536w, https://jakecoppinger.com/wp-content/uploads/2023/01/brunswick-2048x1413.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Brunswick, Melbourne rendered in A/B Street</figcaption></figure>



<p>I wrote an open source vector tileserver <a href="https://github.com/jakecoppinger/osm2streets-vector-tileserver" target="_blank" rel="noopener" title="">osm2streets-vector-tileserver</a> to enable &#8220;slippy&#8221; web and phone maps to load the detailed car and bicycle lane information that osm2streets generates.</p>



<p>As a proof of concept, I&#8217;ve built <a href="https://safecyclingmap.com/" target="_blank" rel="noopener" title="">safecyclingmap.com</a> to consume the tiles produced by <a href="https://github.com/jakecoppinger/osm2streets-vector-tileserver" target="_blank" rel="noopener" title="">osm2streets-vector-tileserver</a>. It is a visualisation of this detailed street data to assist cyclists with picking safe routes in cities with little dedicated cycling infrastructure.</p>



<h2 class="wp-block-heading">Technical details</h2>



<p><em>Bear in mind: I initially wrote the tileserver in one afternoon, and I haven&#8217;t put much effort into reliably hosting the infrastructure yet, so this could be improved.</em></p>



<p>The backend works by taking vector tile requests from a frontend (with a url like https://api.safecyclingmap.com/tile/18/241180/157318).</p>



<p>Once a request is received, the tile at zoom level 15 that contains the requested tile as a subset is calculated.</p>



<p>The OSM XML is then fetched from a local Overpass Turbo instance for that superset tile, and the osm2streets street network output for this tile is generated (using the JS to wasm (Rust) bindings at https://www.npmjs.com/package/osm2streets-js).</p>



<p>Requested subset tiles are then generated using the street network object that covers the superset tile.</p>



<p>The geojson layers are then generated and combined, and returned to the client as a Protobuf.</p>



<p>If you have any questions or are interested in contributing, come and join the Matrix room at <a href="https://matrix.to/#/#osm2streets-vector-tileserver:matrix.org" target="_blank" rel="noreferrer noopener">#osm2streets-vector-tileserver:matrix.org</a> or raise a PR at <a href="https://github.com/jakecoppinger/osm2streets-vector-tileserver" target="_blank" rel="noreferrer noopener">https://github.com/jakecoppinger/osm2streets-vector-tileserver</a>.</p>



<h3 class="wp-block-heading">Caching</h3>



<p>I&#8217;ve used two least-recently-used caches to cache the osm2streets network output, as well as the final individual vector tiles. Vector tiles requested that fit within the bounds of an in-progress zoom level 15 Overpass Turbo download (and associated network generation) busy-wait for the cache to become available (with a timeout if there is an error).</p>



<p>Currently it works in all of Australia, as downloading all map data for the entire world needs a larger hard drive! I needed 8GB of swap space to set up the docker image without a failure.</p>



<p>The frontend is currently hosted on Github pages (behind Cloudflare) because haven&#8217;t yet configured SSL config on AWS S3 for this domain.</p>



<p>The backend currently runs on a Vultr VPS, using Cloudflare Tunnel to send requests to <code>localhost:3000</code>.</p>



<h2 class="wp-block-heading">Further work</h2>



<p>Further features that I think would be useful:</p>



<ul class="wp-block-list"><li>Making it work worldwide by passing requests outside Australia to a public Overpass instance from <a href="https://wiki.openstreetmap.org/wiki/Overpass_API#Public_Overpass_API_instances">https://wiki.openstreetmap.org/wiki/Overpass_API#Public_Overpass_API_instances</a> &#8211; with the new caching there shouldn&#8217;t too much traffic</li><li>Contributing to osm2streets to pass extra attributes in the vector tiles returned, such as:<ul><li>Speed of the street, to be able to colour code streets</li><li>Level of the street, to hide underground roads</li></ul></li></ul>



<p></p>



<p></p><p>The post <a href="https://jakecoppinger.com/2023/01/lane-accurate-street-maps-with-openstreetmap-writing-a-vector-tileserver-for-osm2streets/">Lane-accurate street maps with OpenStreetMap – writing a vector tileserver for osm2streets</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://jakecoppinger.com/2023/01/lane-accurate-street-maps-with-openstreetmap-writing-a-vector-tileserver-for-osm2streets/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Creating aerial imagery with a bike helmet camera (GoPro) and OpenDroneMap</title>
		<link>https://jakecoppinger.com/2022/12/creating-aerial-imagery-with-a-bike-helmet-camera-and-opendronemap/</link>
					<comments>https://jakecoppinger.com/2022/12/creating-aerial-imagery-with-a-bike-helmet-camera-and-opendronemap/#comments</comments>
		
		<dc:creator><![CDATA[Jake C]]></dc:creator>
		<pubDate>Sat, 10 Dec 2022 09:08:15 +0000</pubDate>
				<category><![CDATA[Cycling]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Side project]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Urbanism]]></category>
		<category><![CDATA[360 degree camera]]></category>
		<category><![CDATA[bike]]></category>
		<category><![CDATA[cycleways]]></category>
		<category><![CDATA[cycling]]></category>
		<category><![CDATA[gopro]]></category>
		<category><![CDATA[helmet]]></category>
		<category><![CDATA[openaerialmap]]></category>
		<category><![CDATA[opendronemap]]></category>
		<category><![CDATA[openstreetmap]]></category>
		<category><![CDATA[orthoimagery]]></category>
		<category><![CDATA[OSM]]></category>
		<category><![CDATA[photogrammetry]]></category>
		<category><![CDATA[spherical]]></category>
		<guid isPermaLink="false">https://jakecoppinger.com/?p=293</guid>

					<description><![CDATA[<p>This technical guide details how you can create your own orthorectified (aka satellite view/bird mode) imagery, point clouds and 3D models of streets with nothing but a 360 degree camera mounted on bicycle helmet, and the open source photogrammetry software OpenDroneMap.</p>
<p>The post <a href="https://jakecoppinger.com/2022/12/creating-aerial-imagery-with-a-bike-helmet-camera-and-opendronemap/">Creating aerial imagery with a bike helmet camera (GoPro) and OpenDroneMap</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><em>See comments on <a href="https://news.ycombinator.com/item?id=33947618" target="_blank" rel="noopener" title="Hacker News (#3, 11 comments)">Hacker News (24 comments, 220 points)</a></em></p>



<p>This technical guide details how you can create your own orthorectified (aka satellite view/<a href="https://twitter.com/btaylor/status/1099370126678253569" target="_blank" rel="noopener" title="">bird mode</a>) imagery, point clouds and 3D models of streets with nothing but a 360 degree camera mounted on bicycle helmet, and the open source photogrammetry software <a href="https://opendronemap.org/" target="_blank" rel="noopener" title="">OpenDroneMap</a>.</p>



<figure class="wp-block-image alignwide size-large"><img loading="lazy" decoding="async" width="1024" height="772" src="https://jakecoppinger.com/wp-content/uploads/2022/12/blender-perspective-1024x772.jpg" alt="" class="wp-image-356" srcset="https://jakecoppinger.com/wp-content/uploads/2022/12/blender-perspective-1024x772.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2022/12/blender-perspective-300x226.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2022/12/blender-perspective-768x579.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/12/blender-perspective-1536x1158.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2022/12/blender-perspective-2048x1544.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Why might you want to do this? With your own up-to-date and highly detailed orthorectified imagery you could:</p>



<ul class="wp-block-list"><li>quantify and communicate inefficient road space allocation</li><li>record necessary infrastructure repairs</li><li>take measurements such as lane and cycleway widths</li><li>measure footpath obstructions in 3D and rate pedestrian amenity</li><li>map kerb features on OpenStreetMap</li><li>survey street parking using the new OSM spec: <a href="https://wiki.openstreetmap.org/wiki/Street_parking" target="_blank" rel="noopener" title="">wiki.openstreetmap.org/wiki/Street_parking</a></li><li>3D print a model of your home street!</li></ul>


<div id="mc_embed_shell"><style type="text/css">
        #mc_embed_signup{background:#fff; false;clear:left; font:14px Helvetica,Arial,sans-serif; width: 600px;}<br />
        /* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.<br />
           We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */<br />
</style>
<div id="mc_embed_signup"><form id="mc-embedded-subscribe-form" class="validate" action="https://jakecoppinger.us17.list-manage.com/subscribe/post?u=3c1bd4fc8fca6648af03e916a&amp;id=ad49243f2c&amp;f_id=00d3e4e3f0" method="post" name="mc-embedded-subscribe-form" target="_blank">
<div id="mc_embed_signup_scroll">
<h2><a href="http://eepurl.com/hemS9j" target="_blank" rel="noopener">Subscribe to Jake&#8217;s blog</a></h2>
Email notifications of new blog posts are infrequent, brief, and plain text.

</div>
</form></div>
</div>


<iframe style="width:100%;max-width:100%;height:70vh" src="https://sketchfab.com/models/85937287d282425c86cd53ae85fbec35/embed?autostart=1" class=" alignfull" frameborder="0"></iframe>



<p></p>



<figure class="wp-block-image alignwide size-large"><img loading="lazy" decoding="async" width="1024" height="738" src="https://jakecoppinger.com/wp-content/uploads/2022/12/id-editor-portman-st-1024x738.png" alt="" class="wp-image-355" srcset="https://jakecoppinger.com/wp-content/uploads/2022/12/id-editor-portman-st-1024x738.png 1024w, https://jakecoppinger.com/wp-content/uploads/2022/12/id-editor-portman-st-300x216.png 300w, https://jakecoppinger.com/wp-content/uploads/2022/12/id-editor-portman-st-768x553.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/12/id-editor-portman-st-1536x1107.png 1536w, https://jakecoppinger.com/wp-content/uploads/2022/12/id-editor-portman-st-2048x1476.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Viewing orthoimagery generated with a GoPro in the OpenStreetMap ID editor</figcaption></figure>



<figure class="wp-block-video alignwide"><video controls src="https://jakecoppinger.com/wp-content/uploads/2022/12/measuring-cyclepath-v2.mp4"></video><figcaption>Making measurements in WebODM. Generating 2d elevation profiles is also possible.</figcaption></figure>



<p>Drones are great for surveying and mapping things on the kerb (parking/public space/road widths/building shadows) but there are a lot of places you can&#8217;t fly a drone.</p>



<p><a href="https://opendronemap.org/" target="_blank" rel="noopener" title="">OpenDroneMap</a> is usually used to combine a set of geotagged drone images into one coherent 3d model, but it can also be used with <em>any</em> geotagged images.</p>



<p>Roughly the process is as follows:</p>



<ul class="wp-block-list"><li>Take spherical images on a 360 degree camera</li><li>Import the files from the camera</li><li>Optional: Convert the photos into rectangular, spherical images (for GoPro: convert from the proprietary GoPro format to standard spherical images using GoPro Fusion v1.2)</li><li>Start/login to WebODM, upload the images <em>with fisheye lens setting</em> for 180 degree images or <em>spherical</em> for rectangular 360 degree images and generate imagery &amp; model</li></ul>



<p>Please comment any projects you make after reading this guide, or if you have any questions! There are certainly issues with this process with I&#8217;ve added under Limitations.</p>



<h1 class="wp-block-heading">Table of Contents</h1>



<div class="wp-block-aioseo-table-of-contents"><ul><li><a href="#aioseo-aquiring-a-camera">Buying a 360 degree camera</a></li><li><a href="#aioseo-gopro-fusion-specific-tips">GoPro Fusion specific tips</a></li><li><a href="#aioseo-downloading-the-images">Preprocessing the images</a></li><li><a href="#aioseo-generating-the-model-and-orthorectified-imagery-with-web-opendronemap">Generating the model and orthorectified imagery with Web OpenDroneMap</a><ul><li><a href="#aioseo-setting-up-webodm">Setting up WebODM locally</a></li><li><a href="#aioseo-optional-adding-webodm-lightening-as-a-processing-node">Optional: Adding WebODM lightening as a processing node</a></li><li><a href="#aioseo-generating-the-model">Generating the model &#038; selecting the correct options</a></li><li><a href="#aioseo-output-accuracy-taking-measurements">Output accuracy: taking measurements</a></li></ul></li><li><a href="#aioseo-optional-create-equirectangular-photos-rather-than">Alternative: Generating and processing equirectangular spherical images</a></li><li><a href="#aioseo-limitations">Limitations</a></li><li><a href="#aioseo-appendix-things-that-didnt-work">Appendix: Things that didn&#8217;t work</a><ul><li><a href="#aioseo-removing">Removing helmet artifacts by cropping</a></li><li><a href="#aioseo-removing-helmet-artifacts-by-adding-a-mask">Removing helmet artifacts by adding a mask</a></li></ul></li><li><a href="#aioseo-further-research-to-be-done">Further research/experimentation</a></li><li><a href="#aioseo-prior-art">Prior art</a></li></ul></div>



<h2 class="wp-block-heading" id="aioseo-aquiring-a-camera">Buying a 360 degree camera</h2>



<p>360 degree cameras can be very expensive (the ones mounted on Google Street View cars are <a href="https://www.quora.com/How-much-does-Google-Street-View-cost-Google-to-operate" target="_blank" rel="noopener" title="">possibly $45,000!</a>), but GoPro makes <em>relatively</em> affordable models. See <a href="https://help.mapillary.com/hc/en-us/articles/115001465989-About-360-cameras" target="_blank" rel="noopener" title="">https://help.mapillary.com/hc/en-us/articles/115001465989-About-360-cameras</a> for more suitable cameras. One common second hand (and now unsupported) model is the GoPro Fusion, which I&#8217;ll base this guide on.</p>



<p>Note: Seth Deegan has written a PowerShell script for using Insta360 cameras with ODM. I haven&#8217;t tried it but it seems worth a look: <a href="https://github.com/lectrician1/Insta360-2-ODM" target="_blank" rel="noopener" title="">https://github.com/lectrician1/Insta360-2-ODM</a></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="872" height="1024" src="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-11.09.23-pm-872x1024.png" alt="" class="wp-image-303" srcset="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-11.09.23-pm-872x1024.png 872w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-11.09.23-pm-255x300.png 255w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-11.09.23-pm-768x902.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-11.09.23-pm-1308x1536.png 1308w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-11.09.23-pm.png 1328w" sizes="auto, (max-width: 872px) 100vw, 872px" /></figure>



<p>To generate a detailed model you will need to capture enough images close together. You could mount it to the top of your car, but unless you bought an expensive elevated mount much of the image would just be your car roof!</p>



<p>Some advantages of taking imagery from a bicycle:</p>



<ul class="wp-block-list"><li>The unobstructed field of view is larger so ODM gets more data for a better model</li><li>The average speed is lower permitting more photos (the maximum self timer frequency of this camera is 2 shots/second)</li><li>You can capture images from different places in the street for more data, such as the road, footpath and bike lanes</li><li>If you&#8217;re putting in this much effort to study public space and urban planning you probably like bikes <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li></ul>



<p>You&#8217;ll need to buy a helmet mount for the GoPro or your chosen camera. GoPro makes a bicycle helmet mount: <a href="https://gopro.com/en/us/shop/mounts-accessories /vented-helmet-strap-mount/GVHS30.html" target="_blank" rel="noopener" title="">https://gopro.com/en/us/shop/mounts-accessories /vented-helmet-strap-mount/GVHS30.html</a> (though many non-branded mounts exist on eBay/Amazon too). Be aware a camera mounted on a bicycle helmet is possibly a safety risk to yourself if you crash &#8211; be careful.</p>



<p>If you have the ability to mount the camera on a long pole above your head, this will increase the unobstructed field of view and improve the perspective of the street which will improve the results. I imagine this would attract even more attention! If you have tips for building rigs like this please leave a comment. Andrew Harvey wrote an OpenStreetMap diary entry on his setup here: <a href="https://www.openstreetmap.org/user/aharvey/diary/42139" target="_blank" rel="noopener" title="">https://www.openstreetmap.org/user/aharvey/diary/42139</a></p>



<h2 class="wp-block-heading" id="aioseo-gopro-fusion-specific-tips">GoPro Fusion specific tips</h2>



<p>Set the camera to:</p>



<ul class="wp-block-list"><li>Timelapse photo mode (icon of camera &amp; timer circle)</li><li>Image frequency to 0.5 seconds</li><li>Enable GPS geotagging</li></ul>



<p>Mount the camera to the helmet, wait until the GPS location icon turns solid, and start capturing! Sometimes the first few shots don&#8217;t have any location in the EXIF data but this doesn&#8217;t seem to confuse WebODM, you can check this with <code>identify -verbose image</code> or your metadata viewer of choice.</p>



<h1 class="wp-block-heading" id="aioseo-downloading-the-images">Preprocessing the images</h1>



<p>The GoPro Fusion will output two 180 degree &#8220;fisheye&#8221; images to two separate SD cards. Copy all these images to a folder onto your computer.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2560" height="2474" data-id="359" src="https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277-scaled.jpg" alt="" class="wp-image-359" srcset="https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277-scaled.jpg 2560w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277-300x290.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277-1024x990.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277-768x742.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277-1536x1485.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277-2048x1979.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2560" height="2474" data-id="358" src="https://jakecoppinger.com/wp-content/uploads/2022/12/GF010277-scaled.jpg" alt="" class="wp-image-358" srcset="https://jakecoppinger.com/wp-content/uploads/2022/12/GF010277-scaled.jpg 2560w, https://jakecoppinger.com/wp-content/uploads/2022/12/GF010277-300x290.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2022/12/GF010277-1024x990.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2022/12/GF010277-768x742.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/12/GF010277-1536x1485.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2022/12/GF010277-2048x1979.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>
<figcaption class="blocks-gallery-caption">Front and back images</figcaption></figure>



<p>For an alternate method, see instructions under the generating equirectangular image heading.</p>



<p>Unfortunately, only the &#8220;front&#8221; images have geotagged information, so you&#8217;ll need to copy the exif data from each &#8220;back&#8221; image to each similarly named &#8220;front&#8221; image.</p>



<p>A quick and dirty way of doing this is generating a list of terminal commands, that copies all exif tags from each &#8220;front&#8221; to each &#8220;back&#8221; photo:</p>



<p><code>ls -l | grep "GF" | sed -E "s/^.* GF(.*).JPG*/exiftool −overwrite_original_in_place -gps:all -tagsFromFile GF\1.JPG GB\1.JPG/g" &gt; script.sh</code></p>



<p>I&#8217;m sure there are better and easier ways of doing this, please let me know if you come up with one.</p>



<h1 class="wp-block-heading" id="aioseo-generating-the-model-and-orthorectified-imagery-with-web-opendronemap">Generating the model and orthorectified imagery with Web OpenDroneMap</h1>



<p>WebODM (<a href="https://opendronemap.org/" target="_blank" rel="noreferrer noopener">https://opendronemap.org</a>) is an absolute marvel of open source engineering. Unfortunately, generating 3D models takes some serious computing horsepower. You can either use the paid cloud version (WebODM Lightening) at <a href="https://webodm.net/" target="_blank" rel="noopener" title="">https://webodm.net/</a> (fast) or run the software on your own computer (a few hours/overnight/days depending on the number of images).</p>



<p>You can directly upload images to WebODM Lightening to process, however you don&#8217;t get some friendly/useful features like a browsable map and 3d model viewer. I recommend setting up WebODM locally and adding WebODM Lightening as a &#8220;processing node&#8221;, so you get the power of the cloud and the extra features of WebODM.</p>



<h2 class="wp-block-heading" id="aioseo-setting-up-webodm">Setting up WebODM locally</h2>



<p>Running the software using Docker is a breeze. Install Docker from <a href="https://www.docker.com/" target="_blank" rel="noopener" title="">https://www.docker.com/</a> (or your preferred method), allocate as much memory &amp; CPUs as you can, and then:</p>



<pre class="wp-block-code"><code>git clone https://github.com/OpenDroneMap/WebODM --config core.autocrlf=input --depth 1
cd WebODM
./webodm.sh start </code></pre>



<p>See <a href="https://github.com/OpenDroneMap/WebODM#getting-started" target="_blank" rel="noopener" title="">https://github.com/OpenDroneMap/WebODM#getting-started</a> more more details including GPU acceleration.</p>



<p>You&#8217;ll now be able to open WebODM on <a href="http://localhost:8000" target="_blank" rel="noopener" title="">http://localhost:8000</a></p>



<h2 class="wp-block-heading" id="aioseo-optional-adding-webodm-lightening-as-a-processing-node">Optional: Adding WebODM lightening as a processing node</h2>



<p>Click lightening network in your WebODM sidebar and login.</p>



<h2 class="wp-block-heading" id="aioseo-generating-the-model">Generating the model &amp; selecting the correct options</h2>



<p>Add a new project, click &#8220;Select images &amp; GCP&#8221;, select your images, then you will see options for processing your imagery. If you&#8217;re using WebODM Lightening, make sure to set the Processing Node appropriately.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="421" src="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.30.39-pm-1024x421.png" alt="" class="wp-image-296" srcset="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.30.39-pm-1024x421.png 1024w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.30.39-pm-300x123.png 300w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.30.39-pm-768x316.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.30.39-pm.png 1368w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="759" src="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.47.37-pm-1024x759.png" alt="" class="wp-image-300" srcset="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.47.37-pm-1024x759.png 1024w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.47.37-pm-300x222.png 300w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.47.37-pm-768x569.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.47.37-pm-1536x1139.png 1536w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.47.37-pm.png 1538w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Some options I&#8217;ve found are required:</p>



<p>If you are using the raw 180 degree &#8220;fisheye&#8221; images straight out of the GoPro Fusion, set <code>camera-lens</code> to <strong>fisheye</strong> (this is critical). If you are using equirectangular images set to <code><strong>spherical</strong></code>. WebODM seems to be unable to auto-identify the lens type in both cases.</p>



<ul class="wp-block-list"><li>enable <code>sky removal</code> &#8211; this uses AI to mask out the sky in each frame so that there are less artifacts in the final model</li><li>enable <code>auto-boundary</code></li><li>enable <code>bg-removal</code></li></ul>



<p>This is just from my trial and error, there may be better option configurations.</p>



<p>You will likely need to enable &#8220;resize images&#8221; to 2000px or it is very easy to run out of memory.</p>



<p>Though it is out of scope for this article, you can also set up a VPS instance to speed up the process if you don&#8217;t want to use the hosted cloud processing tool. Ive tried this, but it&#8217;s probably more effort than it&#8217;s worth unless you&#8217;re making a business out of this.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="619" src="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.33.27-pm-1024x619.png" alt="" class="wp-image-297" srcset="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.33.27-pm-1024x619.png 1024w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.33.27-pm-300x181.png 300w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.33.27-pm-768x464.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.33.27-pm-1536x929.png 1536w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-17-at-10.33.27-pm-2048x1238.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>64 cores and 124GB of RAM!</figcaption></figure>



<p>Even with an EC2 instance with 124GB of RAM and 324 images at 5760 × 2180 pixels I ran out of memory &#8211; remember to enable some swap space if you want to run at full size: <a href="https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-18-04" target="_blank" rel="noopener" title="">https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-18-04</a></p>



<h2 class="wp-block-heading" id="aioseo-output-accuracy-taking-measurements">Output accuracy: taking measurements</h2>



<p>OpenDroneMap can make measurements of the 3D model. I&#8217;ve found these are usually quite accurate; they may have small &#8220;measurement&#8221; errors due to artifacts or distortion but will tend towards the correct value &#8211; GPS coordinates ensure the scale is correct.</p>



<p>For example, measuring the width of the green paint of the cycle path:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="699" src="https://jakecoppinger.com/wp-content/uploads/2022/12/measuring-cycle-path-compressed-1024x699.jpg" alt="" class="wp-image-378" srcset="https://jakecoppinger.com/wp-content/uploads/2022/12/measuring-cycle-path-compressed-1024x699.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2022/12/measuring-cycle-path-compressed-300x205.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2022/12/measuring-cycle-path-compressed-768x524.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/12/measuring-cycle-path-compressed-1536x1049.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2022/12/measuring-cycle-path-compressed-2048x1399.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<figure class="wp-block-gallery alignwide has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="857" data-id="381" src="https://jakecoppinger.com/wp-content/uploads/2022/12/large-path-1-1024x857.jpg" alt="" class="wp-image-381" srcset="https://jakecoppinger.com/wp-content/uploads/2022/12/large-path-1-1024x857.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2022/12/large-path-1-300x251.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2022/12/large-path-1-768x643.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/12/large-path-1-1536x1286.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2022/12/large-path-1.jpg 2000w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" data-id="380" src="https://jakecoppinger.com/wp-content/uploads/2022/12/small-path-1024x768.jpg" alt="" class="wp-image-380" srcset="https://jakecoppinger.com/wp-content/uploads/2022/12/small-path-1024x768.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2022/12/small-path-300x225.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2022/12/small-path-768x576.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/12/small-path-1536x1152.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2022/12/small-path.jpg 2000w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p>Large path:</p>



<ul class="wp-block-list"><li>OpenDroneMap: 4.54 metres</li><li>Tape measure: 4.56 metres</li></ul>



<p>Small path:</p>



<ul class="wp-block-list"><li>OpenDroneMap: 1.89 metres (though this varies slightly due to distortions)</li><li>Tape measure: 1.89 metres</li></ul>



<p></p>



<h1 class="wp-block-heading" id="aioseo-optional-create-equirectangular-photos-rather-than">Alternative: Generating and processing equirectangular spherical images</h1>



<p>I&#8217;m currently unclear whether this method is faster or produces better results than the raw 180 degree images. I&#8217;m very interested to hear if you have experience (and I&#8217;ll update this if I get more evidence). I believe the GroPro Max generates these images <em>in camera</em>, so this won&#8217;t be required.</p>



<p>If you use the GoPro Fusion, unfortunately because this camera is no longer supported GoPro discontinued the software: <a href="https://gopro.com/en/au/news/fusion-end-of-life" target="_blank" rel="noopener" title="">https://gopro.com/en/au/news/fusion-end-of-life</a></p>



<p>You&#8217;ll (unfortunately) need to use the proprietary GoPro Fusion software to generate spherical images. I&#8217;ve found on an M1 Mac (Monterey) the only version that still runs is 1.2, 1.4 just crashes. The least dodgy download I can find is <a href="https://macdownload.informer.com/fusion-studio/1.2/" target="_blank" rel="noopener" title="">https://macdownload.informer.com/fusion-studio/1.2/</a>.</p>



<p>If you make an open source solution (maybe building from <a href="https://stackoverflow.com/questions/37796911/is-there-a-fisheye-or-dual-fisheye-to-equirectangular-filter-for-ffmpeg" target="_blank" rel="noopener" title="">https://stackoverflow.com/questions/37796911/is-there-a-fisheye-or-dual-fisheye-to-equirectangular-filter-for-ffmpeg</a>) please let me know! Edit: Looks like this repo will do it. <a href="https://github.com/trek-view/fusion2sphere" target="_blank" rel="noopener" title="">https://github.com/trek-view/fusion2sphere</a></p>



<p>This camera has two SD card slots &#8211; one for the front facing camera, and one for the back facing camera. Sometimes only one camera works for part of the shoot and the proprietary software refuses to stitch any of the photos at all! The only way I&#8217;ve found to combat this is to format the card in camera before each shoot. Spending more on a GoPro Max may solve a lot of headaches!</p>



<h1 class="wp-block-heading" id="aioseo-limitations">Limitations</h1>



<p>Little helmets appear! I&#8217;ve tried some techniques but haven&#8217;t found a proper solution that doesn&#8217;t degrade the model/orthophoto structure.</p>



<h1 class="wp-block-heading" id="aioseo-appendix-things-that-didnt-work">Appendix: Things that didn&#8217;t work</h1>



<h2 class="wp-block-heading" id="aioseo-removing">Removing helmet artifacts by cropping</h2>



<p>I tried using the <code>convert</code> and <code>mogrify</code> tools (part of the amazing open source <code>ImageMagick</code> suite) can crop the spherical photos <em>and retain the geographical information!</em> The cropping works great, but OpenDroneMap doesn&#8217;t seem to be able to understand a cropped equirectangular image. If you&#8217;d like to try to get this working, here are the steps I took.</p>



<p>First install ImageMagick (<code>sudo apt-get install imagemagick</code> on Linux/<code>brew install imagemagick</code> on macOS).</p>



<p>The general syntax is:<br><code>convert -crop {x_size}x{y_size}+{x_offset}+{y_offset} inputfile outputfile</code></p>



<p>See <a href="https://deparkes.co.uk/2015/04/30/batch-crop-images-with-imagemagick/" target="_blank" rel="noopener" title="">https://deparkes.co.uk/2015/04/30/batch-crop-images-with-imagemagick/</a> for more detail and helpful diagrams.</p>



<p>Helpfully, the helmet artifact is always at the bottom of frame, so the x offset and y offset will be zero.</p>



<p>To crop 700 pixels off the bottom of a spherical image, you can use</p>



<p><code>convert -crop 5760x"$((2880-700))"+0+0 inputfile output</code>file</p>



<p>To batch convert a number of files, where the input files are in <code>./input/</code>, and you have made an output directory <code>./output/</code>, you can use:</p>



<p><code>mogrify -monitor -crop 5760x"$((2880-700))"+0+0 -path ./output ./input/*</code></p>



<h2 class="wp-block-heading" id="aioseo-removing-helmet-artifacts-by-adding-a-mask">Removing helmet artifacts by adding a mask</h2>



<p>Adding custom drawn masks, either covering just the helmet or also the surrounding black &#8220;void&#8221; either:</p>



<ul class="wp-block-list"><li>removed the helments but caused extra &#8220;holes&#8221;/missing segments in the ground</li><li>didn&#8217;t remove the helmets</li></ul>



<p>I think this may be due to clashing behaviour of the <code>bg-removal</code> and <code>sky-removal</code> flags with manual masks.</p>



<p>ODM requires a mask image for every image with <code>_mask.{EXT}</code> as a suffix (where <code>EXT</code> replaces the original extension).</p>



<p>The two mask types I tried:</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2560" height="2474" data-id="360" src="https://jakecoppinger.com/wp-content/uploads/2022/12/GB010284_mask-scaled.jpg" alt="" class="wp-image-360" srcset="https://jakecoppinger.com/wp-content/uploads/2022/12/GB010284_mask-scaled.jpg 2560w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010284_mask-300x290.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010284_mask-1024x990.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010284_mask-768x742.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010284_mask-1536x1485.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010284_mask-2048x1979.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2560" height="2474" data-id="361" src="https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277_mask-scaled.jpg" alt="" class="wp-image-361" srcset="https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277_mask-scaled.jpg 2560w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277_mask-300x290.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277_mask-1024x990.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277_mask-768x742.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277_mask-1536x1485.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2022/12/GB010277_mask-2048x1979.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>
</figure>



<p>If you know what may be happening please let me know!</p>



<h1 class="wp-block-heading" id="aioseo-further-research-to-be-done">Further research/experimentation</h1>



<ul class="wp-block-list"><li>How many &#8220;capture lines&#8221; per street are necessary to make a decent model? I didn&#8217;t have any luck with one but it may have been my settings. I used ~4 for the above model.</li><li>How much better are models when the camera is on a stick?</li><li>Improved WebODM settings for generation</li></ul>



<h1 class="wp-block-heading" id="aioseo-prior-art">Prior art</h1>



<ul class="wp-block-list"><li>&#8220;A Satellite in Your Pocket: Ground Based Action Cameras to Create Aerial Perspective for OSM Editing&#8221;. This was recorded at OpenStreetMap US: Connect 2020 by Sean Gorman. The company Pixel8 doesn&#8217;t appear to exist any more.<br><a href="https://www.youtube.com/watch?v=tfab-iuWlsQ" target="_blank" rel="noopener" title="">https://www.youtube.com/watch?v=tfab-iuWlsQ</a></li><li>Twitter thread by <a href="https://twitter.com/klaskarlsson">@klaskarlsson</a> (@klaskarlsson@fosstodon.org on Mastodon) on creating a model of his house using a &#8220;GoPro on a stick&#8221;: https://twitter.com/klaskarlsson/status/1583401741386936320</li><li>&#8220;<a href="https://community.opendronemap.org/t/create-aerial-imagery-base-on-360-pictures/12339">Create aerial imagery base on 360° pictures</a>&#8221; &#8211; discussion in the OpenDroneMap community: <a href="https://community.opendronemap.org/t/create-aerial-imagery-base-on-360-pictures/12339" target="_blank" rel="noopener" title="">https://community.opendronemap.org/t/create-aerial-imagery-base-on-360-pictures/12339</a></li></ul>



<p></p><p>The post <a href="https://jakecoppinger.com/2022/12/creating-aerial-imagery-with-a-bike-helmet-camera-and-opendronemap/">Creating aerial imagery with a bike helmet camera (GoPro) and OpenDroneMap</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://jakecoppinger.com/2022/12/creating-aerial-imagery-with-a-bike-helmet-camera-and-opendronemap/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		<enclosure url="https://jakecoppinger.com/wp-content/uploads/2022/12/measuring-cyclepath-v2.mp4" length="3108898" type="video/mp4" />

			</item>
		<item>
		<title>Visualising Sydney bus congestion with Marey charts</title>
		<link>https://jakecoppinger.com/2022/11/visualising-sydney-bus-congestion-with-marey-charts/</link>
					<comments>https://jakecoppinger.com/2022/11/visualising-sydney-bus-congestion-with-marey-charts/#comments</comments>
		
		<dc:creator><![CDATA[Jake C]]></dc:creator>
		<pubDate>Tue, 22 Nov 2022 13:40:06 +0000</pubDate>
				<category><![CDATA[Side project]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Transit]]></category>
		<category><![CDATA[Urbanism]]></category>
		<category><![CDATA[bunching]]></category>
		<category><![CDATA[bus]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[congestion]]></category>
		<category><![CDATA[graph]]></category>
		<category><![CDATA[marey]]></category>
		<category><![CDATA[occupancy]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[sydney]]></category>
		<category><![CDATA[TfNSW]]></category>
		<category><![CDATA[transit]]></category>
		<guid isPermaLink="false">https://jakecoppinger.com/?p=313</guid>

					<description><![CDATA[<p>As a side project I built Sydney Transit Graph - a visualisation of real-time Sydney bus congestion. Each line on the graph (a Marey chart) represents a bus completing its route (percentage) over time.</p>
<p>The post <a href="https://jakecoppinger.com/2022/11/visualising-sydney-bus-congestion-with-marey-charts/">Visualising Sydney bus congestion with Marey charts</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>As a side project I built Sydney Transit Graph &#8211; a visualisation of real-time Sydney bus congestion. Each line on the graph (a <a href="https://www.researchgate.net/figure/Mareys-graphical-train-schedule-Used-from-Tufte-2001-Original-source-E-J_fig3_340933385">Marey chart</a>) represents a bus completing its route (percentage) over time.</p>



<p>It&#8217;s open source on <a href="https://github.com/jakecoppinger/sydney-transit-graph" target="_blank" rel="noopener" title="">Github</a>, however I am no longer hosting it due to server costs.</p>



<p>The web app displays a map side by side with a Marey diagram. When you move your mouse across the horizontal (time) axis of the diagram, the locations of the buses are displayed at that point in time. The colour of the line represents the occupancy (warmer colours -&gt; higher occupancy) of the service.</p>



<figure class="wp-block-image alignfull size-large"><img loading="lazy" decoding="async" width="1024" height="601" src="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-12.53.58-1024x601.png" alt="" class="wp-image-314" srcset="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-12.53.58-1024x601.png 1024w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-12.53.58-300x176.png 300w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-12.53.58-768x451.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-12.53.58-1536x901.png 1536w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-12.53.58-2048x1201.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">The 370 bus has quite the reputation! &#8220;Is the 370 the worst bus route in Sydney?&#8221; <a href="https://www.youtube.com/watch?v=O7jqU39wvKk" target="_blank" rel="noopener" title="">https://www.youtube.com/watch?v=O7jqU39wvKk</a></figcaption></figure>



<p>Sydney Transit Graph uses a <a href="https://www.3cs.ch/analyze-work-flow-with-marey-chart/" target="_blank" rel="noopener" title="">Marey diagram</a> to view bus congestion in Sydney &#8211; showing the current (and historial) location of every bus.</p>



<p>Clicking on a line on Sydney Transit Graph highlights the position of that particular bus on the map. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="727" src="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-13.04.28-1024x727.png" alt="" class="wp-image-315" srcset="https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-13.04.28-1024x727.png 1024w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-13.04.28-300x213.png 300w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-13.04.28-768x545.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-13.04.28-1536x1090.png 1536w, https://jakecoppinger.com/wp-content/uploads/2022/11/Screen-Shot-2022-11-22-at-13.04.28.png 1640w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>The slope of the line indicates how fast the bus is going (distance verses time). A shallow line can be read as bus congestion.</p>



<h2 class="wp-block-heading">Long headways</h2>



<p>A large vertical gap between lines indicate a large distance gap between buses, and a large horizontal gap means a large time gap. Usually these are equally big or small!</p>



<figure class="wp-block-video"><video controls src="https://jakecoppinger.com/wp-content/uploads/2022/11/congested-bus-handbrake.mp4"></video></figure>



<p>In this example, there is a bus heading north-west that doesn&#8217;t have a service behind it. More people accumulate at the bus stops in that time, leading to the occupancy of the next bus being higher (orange means higher occupancy). The next bus <em>after that</em> also appears delayed, leading to&#8230;</p>



<h2 class="wp-block-heading">Bus bunching</h2>



<p>When the lines are bunched together, there is bus bunching &#8211; the phenomenon of multiple buses on the same route arriving at the same time (see the <a href="https://en.wikipedia.org/wiki/Bus_bunching" target="_blank" rel="noopener" title="">bus bunching Wikipedia article</a> for an explanation on why this occurs)</p>



<figure class="wp-block-video"><video controls src="https://jakecoppinger.com/wp-content/uploads/2022/11/bus-bunching-handbrake.mp4"></video></figure>



<p></p>



<h2 class="wp-block-heading">Why does bus congestion matter?</h2>



<p>Less bus congestion results in faster trip times, which in turn reduces labour costs, decreases bus headways (or reduces need for new buses) and improves passenger throughput.</p>



<p></p>



<h2 class="wp-block-heading">Possible future work</h2>



<p>Further analysis that would be interesting would be:</p>



<ul class="wp-block-list">
<li>Correlating congestion hotspots with OpenStreetMap lane data to better inform bus lane implementation policy</li>



<li>Analysis of pre/post COVID-19 transit patterns</li>



<li>Including train data in the pipeline (it&#8217;s the same API)</li>



<li>Improve interpolation of routes on the frontend so it&#8217;s not just a straight line average between dots (interpolating along the route instead)</li>
</ul>



<p>I&#8217;m not sure if I&#8217;ll have the time to get to this, but please let me know if you&#8217;re interested in analysis with this tool! I&#8217;ve been busy with life and other side projects so I haven&#8217;t made updates in a little while.</p>



<h2 class="wp-block-heading">How it works</h2>



<p>The web app is built with vanilla JS (TypeScript), <a href="https://p5js.org">p5.js</a> for the graph, and <a href="https://www.mapbox.com">Mapbox GL JS</a> for the map (which uses OpenStreetMap data).</p>



<p>Data is sourced from Transport for NSW via <a href="https://opendata.transport.nsw.gov.au/dataset/public-transport-realtime-vehicle-positions">OpenData</a>. Realtime data is ingested every few seconds via an service running on AWS EC2 to store Protocol Buffer files on AWS S3.</p>



<p>When requested via an API, a service on AWS Lambda retrives these Protocol Buffer files and computes the trip progress and occupancy of every bus in a specified time window.</p>



<p>I adjustably quantise the number of Protocol Buffers requested (and thus the number of results) via looking up available timestamps.</p>



<p>Trip progress is calculated by comparing positions against bus route shapes. These route shapes have been precomputed from GTFS database dumps (via Sqlite) and stored on AWS S3 as JSON.</p>



<p>It&#8217;s definitely not the cleanest or most efficient architecture, however I haven&#8217;t had the time to make a big refactor recently.</p>



<h2 class="wp-block-heading">Known issues</h2>



<ul class="wp-block-list">
<li>There are some line rendering issues in Safari</li>
</ul>



<h1 class="wp-block-heading">Prior art</h1>



<ul class="wp-block-list">
<li>Visualizing MBTA Data: An interactive exploration of Boston&#8217;s subway systemMike Barry and Brian Card: <a href="https://mbtaviz.github.io/" target="_blank" rel="noopener" title="">https://mbtaviz.github.io/</a></li>
</ul>



<h1 class="wp-block-heading">Conclusion</h1>



<p>Contributions are very welcome! If you have ideas on a project or analysis I&#8217;d love to hear. Feel free to contact me at <a href="mailto:jake@jakecoppinger.com" target="_blank" rel="noopener" title="">jake@jakecoppinger.com</a> or leave a comment.</p>



<p></p><p>The post <a href="https://jakecoppinger.com/2022/11/visualising-sydney-bus-congestion-with-marey-charts/">Visualising Sydney bus congestion with Marey charts</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://jakecoppinger.com/2022/11/visualising-sydney-bus-congestion-with-marey-charts/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		<enclosure url="https://jakecoppinger.com/wp-content/uploads/2022/11/congested-bus-handbrake.mp4" length="933916" type="video/mp4" />
<enclosure url="https://jakecoppinger.com/wp-content/uploads/2022/11/bus-bunching-handbrake.mp4" length="326357" type="video/mp4" />

			</item>
		<item>
		<title>How I helped ~6,000 Australians find a vaccine appointment</title>
		<link>https://jakecoppinger.com/2022/02/how-i-helped-6000-australians-find-a-vaccine-appointment/</link>
					<comments>https://jakecoppinger.com/2022/02/how-i-helped-6000-australians-find-a-vaccine-appointment/#respond</comments>
		
		<dc:creator><![CDATA[Jake C]]></dc:creator>
		<pubDate>Mon, 21 Feb 2022 03:21:00 +0000</pubDate>
				<category><![CDATA[Side project]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Side Projects]]></category>
		<guid isPermaLink="false">https://testing205399271.wordpress.com/?p=40</guid>

					<description><![CDATA[<p>In mid 2021 Australia had an acute vaccine shortage for various reasons, which meant vaccine appointments were extremely hard to come by - NSW had just declared a national emergency.</p>
<p>To help Australia increase it's vaccination rate ASAP I built GPVaccineSearch.com over a few weekends in July/August, an open-source vaccine appointment search engine, as a side project.</p>
<p>The post <a href="https://jakecoppinger.com/2022/02/how-i-helped-6000-australians-find-a-vaccine-appointment/">How I helped ~6,000 Australians find a vaccine appointment</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><em>Note: I have now shut down GP Vaccine Search as vaccines are readily available.</em></p>



<p>In mid 2021 Australia had an acute vaccine shortage for various reasons, which meant vaccine appointments were extremely hard to come by &#8211; NSW had just declared a national emergency.</p>



<p>To help Australia increase it&#8217;s vaccination rate ASAP I built <a rel="noreferrer noopener" href="https://gpvaccinesearch.com" target="_blank">GPVaccineSearch.com</a> over a few weekends in July/August, an open-source (<a rel="noreferrer noopener" href="https://github.com/jakecoppinger/gp-vaccine-search" target="_blank">on Github</a>) vaccine appointment search engine, as a side project.</p>



<span id="more-40"></span>



<p>As of Jan 2022, 23k users visited the site, and 5,809 unique users started a HotDoc vaccine booking after using my site!</p>



<figure class="wp-block-gallery alignfull has-nested-images columns-default wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1649" height="2560" data-id="45" src="http://13.236.128.105/wp-content/uploads/2022/07/7-scaled.jpg" alt="" class="wp-image-45" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/7-scaled.jpg 1649w, https://jakecoppinger.com/wp-content/uploads/2022/07/7-193x300.jpg 193w, https://jakecoppinger.com/wp-content/uploads/2022/07/7-659x1024.jpg 659w, https://jakecoppinger.com/wp-content/uploads/2022/07/7-768x1193.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/7-989x1536.jpg 989w, https://jakecoppinger.com/wp-content/uploads/2022/07/7-1319x2048.jpg 1319w" sizes="auto, (max-width: 1649px) 100vw, 1649px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2244" height="2560" data-id="44" src="http://13.236.128.105/wp-content/uploads/2022/07/8-scaled.jpg" alt="" class="wp-image-44" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/8-scaled.jpg 2244w, https://jakecoppinger.com/wp-content/uploads/2022/07/8-263x300.jpg 263w, https://jakecoppinger.com/wp-content/uploads/2022/07/8-898x1024.jpg 898w, https://jakecoppinger.com/wp-content/uploads/2022/07/8-768x876.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/8-1347x1536.jpg 1347w, https://jakecoppinger.com/wp-content/uploads/2022/07/8-1795x2048.jpg 1795w" sizes="auto, (max-width: 2244px) 100vw, 2244px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2279" height="3000" data-id="43" src="http://13.236.128.105/wp-content/uploads/2022/07/image-1.png" alt="" class="wp-image-43" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/image-1.png 2279w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-1-228x300.png 228w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-1-778x1024.png 778w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-1-768x1011.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-1-1167x1536.png 1167w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-1-1556x2048.png 1556w" sizes="auto, (max-width: 2279px) 100vw, 2279px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="3000" height="1820" data-id="41" src="http://13.236.128.105/wp-content/uploads/2022/07/image.png" alt="" class="wp-image-41" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/image.png 3000w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-300x182.png 300w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-1024x621.png 1024w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-768x466.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-1536x932.png 1536w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-2048x1242.png 2048w" sizes="auto, (max-width: 3000px) 100vw, 3000px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2560" height="1927" data-id="46" src="http://13.236.128.105/wp-content/uploads/2022/07/6-scaled.jpg" alt="" class="wp-image-46" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/6-scaled.jpg 2560w, https://jakecoppinger.com/wp-content/uploads/2022/07/6-300x226.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2022/07/6-1024x771.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2022/07/6-768x578.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/6-1536x1156.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2022/07/6-2048x1541.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="2560" height="1364" data-id="48" src="http://13.236.128.105/wp-content/uploads/2022/07/3-scaled.jpg" alt="" class="wp-image-48" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/3-scaled.jpg 2560w, https://jakecoppinger.com/wp-content/uploads/2022/07/3-300x160.jpg 300w, https://jakecoppinger.com/wp-content/uploads/2022/07/3-1024x546.jpg 1024w, https://jakecoppinger.com/wp-content/uploads/2022/07/3-768x409.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/3-1536x819.jpg 1536w, https://jakecoppinger.com/wp-content/uploads/2022/07/3-2048x1092.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1945" height="2560" data-id="49" src="http://13.236.128.105/wp-content/uploads/2022/07/2-scaled.jpg" alt="" class="wp-image-49" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/2-scaled.jpg 1945w, https://jakecoppinger.com/wp-content/uploads/2022/07/2-228x300.jpg 228w, https://jakecoppinger.com/wp-content/uploads/2022/07/2-778x1024.jpg 778w, https://jakecoppinger.com/wp-content/uploads/2022/07/2-768x1011.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/2-1167x1536.jpg 1167w, https://jakecoppinger.com/wp-content/uploads/2022/07/2-1556x2048.jpg 1556w" sizes="auto, (max-width: 1945px) 100vw, 1945px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="371" data-id="1177" src="https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025557-1024x371.png" alt="" class="wp-image-1177" srcset="https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025557-1024x371.png 1024w, https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025557-300x109.png 300w, https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025557-768x279.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025557-1536x557.png 1536w, https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025557.png 1880w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p></p>



<p>After the shortage eased in October 2021 and the government booking website improved traffic dropped off, but here is the story of how I built it!</p>



<figure class="wp-block-image alignwide size-large"><img loading="lazy" decoding="async" width="894" height="1024" src="https://jakecoppinger.com/wp-content/uploads/2022/07/image-2-894x1024.png" alt="Screenshot of GP Vaccine Search" class="wp-image-51" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/image-2-894x1024.png 894w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-2-262x300.png 262w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-2-768x880.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-2-1340x1536.png 1340w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-2-1787x2048.png 1787w" sizes="auto, (max-width: 894px) 100vw, 894px" /><figcaption class="wp-element-caption">I promise it looks good on mobile too!</figcaption></figure>



<p>Wanting to help Aussies get vaccinated as soon as possible, I searched for every possible data source (and considered crowd-sourcing phone call responses). I found that HotDoc (a Melbourne healthcare booking company) had lots of data on available bookings but had not yet built a way to search across clinics for the soonest appointments.</p>



<p>Always keen for a side project I managed to deploy a headless Chromium instance to AWS Lambda to walk through GPs near the user and find appointment times, and soon had a working demo. As you can imagine, I was concerned about the load this would add to the HotDoc site and resources to run it so I added strong rate limiting, but it&#8217;s hard to emphasize how in demand vaccines were at the time &#8211; I had friends asking me via social media to run queries for their location!</p>



<figure class="wp-block-gallery alignwide has-nested-images columns-default is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="719" height="1024" data-id="53" src="https://jakecoppinger.com/wp-content/uploads/2022/07/11-719x1024.jpg" alt="" class="wp-image-53" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/11-719x1024.jpg 719w, https://jakecoppinger.com/wp-content/uploads/2022/07/11-211x300.jpg 211w, https://jakecoppinger.com/wp-content/uploads/2022/07/11-768x1094.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/11-1078x1536.jpg 1078w, https://jakecoppinger.com/wp-content/uploads/2022/07/11-1438x2048.jpg 1438w, https://jakecoppinger.com/wp-content/uploads/2022/07/11-scaled.jpg 1797w" sizes="auto, (max-width: 719px) 100vw, 719px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="742" height="1024" data-id="54" src="https://jakecoppinger.com/wp-content/uploads/2022/07/10-742x1024.jpg" alt="" class="wp-image-54" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/10-742x1024.jpg 742w, https://jakecoppinger.com/wp-content/uploads/2022/07/10-217x300.jpg 217w, https://jakecoppinger.com/wp-content/uploads/2022/07/10-768x1060.jpg 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/10-1113x1536.jpg 1113w, https://jakecoppinger.com/wp-content/uploads/2022/07/10-1483x2048.jpg 1483w, https://jakecoppinger.com/wp-content/uploads/2022/07/10-scaled.jpg 1854w" sizes="auto, (max-width: 742px) 100vw, 742px" /></figure>
</figure>



<p>After posting on Reddit and sharing with a few friends, almost 2800 people visited on the first day. The most requested feature was searching by postcode rather than geo-location: once I implemented that I found most users preferred using that option. The Pfizer vaccine also became available via GPs which further added to the surge of visitors.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="3000" height="1323" src="https://testing205399271.files.wordpress.com/2022/07/image-3.png?w=1024" alt="" class="wp-image-56" srcset="https://jakecoppinger.com/wp-content/uploads/2022/07/image-3.png 3000w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-3-300x132.png 300w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-3-1024x452.png 1024w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-3-768x339.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-3-1536x677.png 1536w, https://jakecoppinger.com/wp-content/uploads/2022/07/image-3-2048x903.png 2048w" sizes="auto, (max-width: 3000px) 100vw, 3000px" /></figure>



<p>I got in contact with a friend of a friend working at HotDoc so I could make sure they were comfortable with myself using their data and API.</p>



<p>They were happy with the project and agreed my rate limiting threshold was well chosen, and submitted a PR so they could track referrals. Altogether the experience of communicating with HotDoc was excellent &#8211; they also emphasised how committed they are to helping Australians access vaccines.</p>



<p>After vaccines became more widely available visitors dropped off, though a smaller second wave visited when I added booster search support.</p>



<h3 class="wp-block-heading">All up</h3>



<p>Overall this was one of my favourite side projects I&#8217;ve built &#8211; it was a lot of fun to try and throw my hat in the ring to make this problem a bit easier to solve. It really meant a lot to me that I managed to help a few people in the process. Thanks for reading!</p>



<p>I think it&#8217;s important to acknowledge the number of people who used gpvaccinesearch.com pales in comparison to how many people found their vaccines using HotDoc itself &#8211; they&#8217;ve built a truly brilliant product.</p>



<p>Ken Tsang (the author of COVID-19 Near Me) also wrote up an article about his vaccine booking search engine titled <a target="_blank" href="https://jxeeno.medium.com/why-i-decided-to-build-my-own-vaccine-booking-search-engine-instead-of-using-the-governments-one-c932ca72fb3d" rel="noreferrer noopener">&#8220;Why I decided to build my own vaccine booking search engine instead of using the Government’s one&#8221;</a>.</p>



<p>Currently, a side project I&#8217;m working on is Gatho (<a target="_blank" href="https://gatho.party" rel="noreferrer noopener">gatho.party</a>), a platform for hosting small events. It supports one click RSVP links for guests, and can integrate with a Matrix group chat. It&#8217;s open source and works great, let me know what you think!</p>



<p>Some more graphs of gpvaccinesearch.com, because everybody loves graphs!</p>



<figure class="wp-block-gallery has-nested-images columns-1 is-cropped wp-block-gallery-7 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="332" data-id="1180" src="https://jakecoppinger.com/wp-content/uploads/2024/07/image-20220120-025631-1024x332.png" alt="" class="wp-image-1180" srcset="https://jakecoppinger.com/wp-content/uploads/2024/07/image-20220120-025631-1024x332.png 1024w, https://jakecoppinger.com/wp-content/uploads/2024/07/image-20220120-025631-300x97.png 300w, https://jakecoppinger.com/wp-content/uploads/2024/07/image-20220120-025631-768x249.png 768w, https://jakecoppinger.com/wp-content/uploads/2024/07/image-20220120-025631-1536x498.png 1536w, https://jakecoppinger.com/wp-content/uploads/2024/07/image-20220120-025631-2048x664.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="507" data-id="1181" src="https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025547-1024x507.png" alt="" class="wp-image-1181" srcset="https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025547-1024x507.png 1024w, https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025547-300x149.png 300w, https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025547-768x380.png 768w, https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025547-1536x760.png 1536w, https://jakecoppinger.com/wp-content/uploads/2022/02/image-20220120-025547.png 1842w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure><p>The post <a href="https://jakecoppinger.com/2022/02/how-i-helped-6000-australians-find-a-vaccine-appointment/">How I helped ~6,000 Australians find a vaccine appointment</a> first appeared on <a href="https://jakecoppinger.com">Jake Coppinger</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://jakecoppinger.com/2022/02/how-i-helped-6000-australians-find-a-vaccine-appointment/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
