<?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>iphone - Jake Coppinger</title>
	<atom:link href="https://jakecoppinger.com/tag/iphone/feed/" rel="self" type="application/rss+xml" />
	<link>https://jakecoppinger.com</link>
	<description>Jake Coppinger&#039;s blog and portfolio.</description>
	<lastBuildDate>Wed, 05 Apr 2023 14:08:17 +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>iphone - Jake Coppinger</title>
	<link>https://jakecoppinger.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 fetchpriority="high" 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="(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 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="(max-width: 1024px) 100vw, 1024px" /><figcaption>Different segments, ordered front (left) to back (right)</figcaption></figure>



<figure class="wp-block-image size-large"><img 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="(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>
	</channel>
</rss>
