× New: Site Scan integration with Autodesk BIM 360

How Drones Save Time on Bridge Replacement Projects

Built in 1949, the Pinto Creek Bridge is a historic crossing on Highway 60, an hour and a half east of Phoenix, Arizona at the foothills of the Tonto National Forest. Built as part of President Roosevelt’s public works initiative, the steel arch bridge sits atop a steep ravine with scenic views of the countryside.

With over 6 decades of use, however, the bridge has started to show its age: inspections and appraisals have returned poor ratings, and the bridge was considered “structurally deficient” in a 2014 review.

Though the bridge is still open and in use, its decay led to the decision to replace it. Because there are no easy detours on this roadway, the replacement bridge will be built just north of the current bridge, and then the old Pinto Creek bridge will be demolished.

3D rendering of the new bridge across Pinto Creek

The project is currently in its early stages: the Arizona Department of Transportation has been conducting geotechnical surveys of surrounding ravine, ensuring that the land is suitable for new infrastructure. Any new construction in this area must first go through an exhaustive survey process in order to ensure its sustainability and effect on the surrounding ravine within the Tonto Forest. It’s vital that the bridge blends with its natural surroundings and has limited impact on the existing plants and rock outcroppings. The ravine is approximately 80 meters deep, so traditional survey methods would require at least a day to complete the site from top to bottom. This includes using climbing equipment, rappelling down the ravine and walking the rocky terrain by foot, which comes with its own set of risks, hazards, and inefficiencies.

The solution

Surveying the Pinto Creek — a large, environmentally sensitive site with rough terrain — presented the perfect use case for drones, which are able to quickly capture aerial data and help land surveyors stay out of harm’s way. 3DR went to Pinto Creek and used Site Scan to capture the full context of the bridge and its underlying topology.

Jeremiah Johnson, Solutions Architect at 3DR, was the pilot for the day. He took off from the west end of the bridge, using the Site Scan app to plan the flight over the approximately 7.5 acre site. Jeremiah set up the crosshatch flight, and picked the appropriate altitude and gimbal angle for a scan of this size.

Sample image from Site Scan Field iPad app, showing the crosshatch grid of the Pinto Creek Bridge

In half an hour, we surveyed the entire area with a single flight, taking 358 high-res photos and collecting millions of precise datapoints.

In half an hour, we surveyed the entire site with a single crosshatch flight, taking 358 high-res photos and collecting millions of datapoints.

“Mapping this ravine using traditional methods would take, at the very least, a day to survey from the top to bottom,” Jeremiah said. “The bigger challenge, though, is in processing the data from this traditional survey: to get the same kind of accuracy as Site Scan, it would take approximately two weeks of processing time.”

Jeremiah, Solutions Architect at 3DR, piloted this flight. It took just half an hour to capture the whole site.

Key deliverables

What, exactly, does a single 30 minute flight get you? By the end of the day, we had fully processed 4 main deliverables: an orthomosaic, a digital elevation model, overlays, and a point cloud.

1. Orthomosaics

By processing the 358 captured images, we stitched together a detailed orthomosaic of the entire site, providing clear aerial data that can be manipulated in Autodesk tools like Civil 3D, Infraworks, and more.

Orthomosaic

Orthomosaic image of the Pinto Creek Bridge from a single crosshatch flight, 30 degree gimbal

2. Digital Elevation Model (DEM)

We captured data that could be used to create a digital elevation model, giving surveyors a clear, accurate view of different heights throughout the ravine.

DEM

DEM in ReCap 360 Pro

3. Overlays

By bringing the topographical survey data into Site Scan and overlaying it on the orthomosaic, we’re able to easily compare reality to the original surey plans, and uncover new insights about the location.

Overlay

 

4. Point Cloud

Using ReCap 360 Pro, we then created a point cloud of the site, which can easily be edited, measured, and annotated throughout the design and engineering process.

Point cloud

By flying Site Scan, we were able to capture the Pinto Creek Bridge in entirely new ways, collect useful, actionable information for surveyors and constructors, and demonstrate just how fast — and safe — aerial data capture can be.

Want to learn more about Site Scan?

Sign up for our newsletter

Get our latest stories on drones and construction.

Thanks for signing up. Now, check out some stories while you're here!

tag * ppcUrlCookiePart1 and ppcUrlCookiePart2 must be called, see bottom of script * update ppcUrlCookiePart2 and ppcUrlCookiePart2 to match your querystring and form field names * */ //Leave this as true to always use querystring values if they exist, if no querystring will attempt to get cookie values var ppcUseLatestValues = true; //set this to false to use cookie values if they exist (if false, will not check querystring first). //function to grab params from cookie function getCookie(param_name) { var i, x, y, cookie = document.cookie.split(";"); for (i = 0; i < cookie.length; i++) { x = cookie[i].substr(0, cookie[i].indexOf("=")); y = cookie[i].substr(cookie[i].indexOf("=") + 1); x = x.replace(/^\s+|\s+$/g, ""); if (x == param_name) { return unescape(y); } } } //function to create cookie function setCookie(param_name, value, exdays) { var exdate = new Date(); exdate.setDate(exdate.getDate() + exdays); //CHANGE DOMAIN BELOW TO MATCH SITE var c_value = escape(value) + ((exdays == null) ? "" : "; domain=.3dr.com; path=/; expires=" + exdate.toUTCString()); document.cookie = param_name + "=" + c_value; } //function to check if cookie exists and, if so, run the setCookie function function checkCookie(param_name, param_url_name) { var param_value = getCookie(param_name); if ((param_value != null && param_value != "" && param_value != "undefined") && ppcUseLatestValues == false) { //this means the param name/value pair exists - and we don't want to use latest } else { //this means the param name/value pair does not exist - so create it //grab values from URL var pageURL = window.location.search.substring(1); var URLVariables = pageURL.split('&'); for (var i = 0; i < URLVariables.length; i++) { var parameterName = URLVariables[i].split('='); if (parameterName[0] == param_url_name) { //filter out "#" in case that is in the last URL param param_value = decodeURIComponent(parameterName[1].split("#")[0]); } } if (param_value != "undefined" && param_value != "" && param_value != null) { //create cookie setCookie(param_name, param_value, 365); } } } //function to setup the parameters and save the cookie values function ppcUrlCookiePart1() { //setup list/array of parameters desired. names on right should match querystring names var param_names = new Array( 'utm_source;utm_source', 'utm_medium;utm_medium', 'utm_campaign;utm_campaign', 'utm_term;utm_term', 'utm_content;utm_content' ); //loop through all params and create cookie for (i = 0; i < param_names.length; i++) { var param_object = param_names[i].split(";");//split out the cookie name and url name var param_name = param_object[0]; var param_url_name = param_object[1]; //start the cookie creation checkCookie(param_name, param_url_name); } } //function to grab cookie params function mGetCookie(param_name) { var i, x, y, cookie = document.cookie.split(";"); for (i = 0; i < cookie.length; i++) { x = cookie[i].substr(0, cookie[i].indexOf("=")); y = cookie[i].substr(cookie[i].indexOf("=") + 1); x = x.replace(/^\s+|\s+$/g, ""); if (x == param_name) { return unescape(y); } } } //function to check if cookie exists and, if so, fill out the corresponding form fields function mCheckCookie(param_name, param_field_name) { var param_value = mGetCookie(param_name); if (param_value != null && param_value != "" && param_value != "undefined") { try { var obj1 = document.getElementsByName(param_field_name); obj1[0].value = param_value; return true; } catch (err) { return false; } } return false; } //function to setup parameters and begin cookie value insertion into marketo form function ppcUrlCookiePart2() { //setup list/array of parameters desired. names on right should match hidden form field names var param_names = new Array( 'utm_source;Lead Source Name (Last Touch)', 'utm_medium;Lead Source Last Touch', 'utm_campaign;Lead Campaign (Last Touch)', 'utm_term;Lead Campaign Term (Last Touch)', 'utm_content;Lead Campaign Content (Last Touch)' ); //loop through all params and create cookie for (i = 0; i < param_names.length; i++) { var param_object = param_names[i].split(";");//split out the cookie name and url name var param_name = param_object[0]; var param_field_name = param_object[1]; //start the cookie creation mCheckCookie(param_name, param_field_name); } } //ppcUrlCookiePart1 will grab values from the querystring and save them in cookies ppcUrlCookiePart1(); //ppcUrlCookiePart2 will retrive values from the cookies and populate the hidden form fields - should be in the onload try { //attempt for Marketo form MktoForms2.whenReady(function (form){ ppcUrlCookiePart2(); }); } catch (err) { //if error on Marketo form, try loading for regular form. ppcUrlCookiePart2(); }