Photogrammetric Mapping

Repost from

So you’re probably asking yourself “What exactly is ‘photogrammetric mapping’?“, “Why should I use it?” and “Why should I care?

What photogrammetric mapping is

Simply put, photogrammetry is the use of photography in surveying and mapping to measure distances between objects. In other words, the photos that are collected from a drone can be stitched together to create a 3-dimensional mesh, point cloud or orthomosaic top-down image of a geographic location. Think of Google Maps and it’s 3D view capability, but unlike Google Maps, aerial photogrammetry provides up-to-date information about an area which can be measured, utilized in design programs, and shared with stakeholders. aerial drone photo video photogrammetry reality capture mapping modeling Connecticut

Why you should use photogrammetric mapping

To answer the question of why YOU should use photorgrammetry, let’s first discuss who uses it.

Photogrammetry is used by architects, landscape designers, commercial property owners & real estate agents, and construction professionals to name a few, as a way to quickly gather up-to-date information about a project site in order to make informed decisions. You can’t expect to make good decisions with bad, outdated information.

Architects can utilize photogrammetry by generating a 3-dimensional mesh or point cloud of existing buildings which can then be incorporated into design software to begin preliminary sun/shadow and massing studies for a new building. aerial drone photo video photogrammetry reality capture mapping modeling Connecticut

Landscape designers utilize the orthomosaic image to get an accurate bird’s eye view of project location to determine where things such as walkways, paths, water features and plantings can go. aerial drone photo video photogrammetry reality capture mapping modeling Connecticut

Commercial property owners & real estate agents can leverage the power of the orthomosaic image to see an overall top-down view of their properties to quickly locate problem areas on building rooftops that may be in need of repair. aerial drone photo video photogrammetry reality capture mapping modeling Connecticut

Construction professionals use photogrammetry to measure stockpile volumes (using multiple meshes, stockpile volumes can be calculated and compared) to get a better understanding of how much material is on site or has been hauled away, and building progression (how far along is construction and how does it compare to the actual project schedule), in addition to getting an overall view of the job site to mitigate or remove any potential safety hazards.

Hopefully the examples outlined above have given you a better understanding of some of the use cases and clients that incorporate this technology into their everyday workflows. Now ask yourself… why should I use photogrammetry & 3D mapping? What benefits could I gain by using this technology? How can I augment my workflow and become more efficient using photogrammetry and 3D mapping & modeling?

Why you should care about photogrammetric mapping

So now you know what photogrammetry is, who uses it and how, let’s answer the “why should I care” question. Let me answer the question with a question… What do you stand to lose by using outdated information? Time? Money? Reputation?? Clients?? Unlike Google and Bing Maps, which updates their aerial imagery every couple of years (typically between 1-3 years), photogrammetry via a drone can give you up-to-date information the same day the mission is flown.

Misinformed decisions can lead to lost time and profitability due to having to make multiple trips to a project site to collect data either by traditional ground-based photography and/or hand-written notes and sketches. Using drones to perform photogrammetric mapping will produce up-to-date, measurable and actionable data that you can comfortably rely on. And the various output formats of photogrammetric mapping means the data – whether it’s a point cloud, orthomosaic tif, or a 3D object – can be used in many of today’s design applications such as AutoCAD, Revit, InfraWorks, Microstation, ArchiCAD and more.

Share the results and design with stakeholders

When it comes time to share a design idea or iteration, that can easily be done using an online service such as SketchFab. Simply upload the design model and send the secure link to owners, property managers, contractors, etc and they can view the model from their web browser or mobile device, eliminating the need install software and download the model data.


Still have questions? Please contact to learn how they can help augment your current workflow by incorporating up-to-date aerial imagery, mapping and 3D modeling.

Posted in Drone, Infraworks, Point Cloud, Revit,, Technology | Tagged , , , , , , , , , , , , | Leave a comment

Sometimes change isn’t just good…

…it’s necessary to grow as an individual, as a team member and progress as a professional.

Back in September 2017 I left a multi-discipline engineering firm after working there for nearly 17 years as a drafter then proving myself as a CADD Manager and then ultimately becoming the BIM Manager. I needed a change of scenery. A change of responsibilities. A change of challenges. But sometimes that change can end up not being what you thought it would be or hoped for.

So with that being said, I’m making yet another change, but this time I’ll be entrenched in an environment in which I’m most comfortable with – Revit.

I’ve been at Svigals + Partners for less that 2 days but I’m already feeling the love of my fellow team members. But best of all is that I’m once again doing what I know and love.

Thanks to everyone at S+P for making me feel welcome!!

Posted in Revit, Uncategorized | Leave a comment

MORE work with BETTER graphics created in LESS time

Andrew Anagnost’s opening keynote address at Autodesk University 2017 about making more, better and with less was the inspiration behind this blog posting. Here at AI Engineers I’ve been up to my neck in InfraWorks, building models to help us win MORE work by creating BETTER presentation graphics in LESS time.

2563-No Logo-Underside of Bridge

Winning MORE work…

In this day and age of technology and software it’s almost expected of you to create some sort of 3-dimensional model to help tell your story. And here at AI Engineers, that’s exactly what I’ve been doing.

2563-No Logo-Bridge 02

…by creating BETTER presentation graphics…

Using InfraWorks to generate the base model conditions – roadways, water areas, trees, buildings, etc – and a combination of Revit and FormIt to generate additional content, we’re able to create BETTER presentation graphics for proposals and job interviews. These graphics have definitely given us an advantage over our competition. When the client/owner can see their project in 3D, it removes a lot of the “What are those?” questions, and helps put the focus on what’s really important – the final product.

2563-No Logo-Bridge 04

…in LESS time.

And by continuously developing content for models, I’ve been able to create a large library of content that can be quickly imported into a new project model and be up and running on a design-intent model in no time at all.

2563-No Logo-PPT Image 01

Posted in Infraworks, Revit | Tagged , , , , , | 1 Comment

Batch Create Snapshots from InfraWorks Bookmarks using Javascript

Using a few lines of Javascript code you can automate the process of creating snapshots for each bookmark in your model.

To run the code simply open the SCRIPTING editor and copy/paste the code below into the main window then click the START SCRIPT button and the code will iterate through the bookmarks of the current model and create a snapshot for each one. You can modify the length, width and location of the snapshot by modifying the variables in the code below. The snapshots that are created have the same name as their corresponding bookmarks.

// Some global vars...
var doc = app.ActiveDocument(); // the Active Document
var bmList =  app.ActiveDocument().Bookmarks; // a variable to hold the list of bookmarks
var imgWidth = 1920; // snapshot width in pixels. change to your preference
var imgHeight = 1080; // snapshot height in pixels. change to your preference

// Loop through the bookmarks within the model
for (var i=0; i<bmList.length; i++) {
    var bm = bmList[i]; // list of bookmarks
    var strFilePath = "C:\\temp\\";  // Change this path to where you want your snapshots saved
    var bName = (;  //gets the bookmark name
    var bmName = (".jpg");  // appends .JPG to the bookmark name
    strFilePath = strFilePath + bmName;  // concatenate the string of the path (from above) and the bookmark name with .JPG
    CreateBookmarkSnapshot (bName, strFilePath);  // pass the bookmark's name and concatenated file path/name to the CreateBookmarkSnapshot function

// Create a snapshot of the active bookmark
function CreateBookmarkSnapshot (strBookMarkName, strJPGPath) {
    doc.MoveToBookmark(strBookMarkName);  // activate the bookmark
    app.CreateSnapshot(strJPGPath, imgWidth, imgHeight);  // create the snapshot using the defined path/name and width & height variables

And there you have it. A short, simple script to automate the sometimes tedious process of creating snapshots from multiple bookmarks.

Posted in Infraworks | Leave a comment

Update Infraworks 360 data using JavaScript and a CSV file

You can add or update data for any object within Infraworks 360 using a simple CSV file saved from Excel and a little bit of Javascript coding. Here’s how….

In this simple example, I have a CSV file which has four (4) columns and six (6) rows. The first row doesn’t really count because it’s the header information for the columns. Everything below that is where the magic happens.


You can copy/paste the code below to the Scripting dialog. To open the Scripting dialog box click on CREATE AND MANAGE YOURMODEL then click SCRIPTS.IW_JS_002


My Javascript code looks like this.

function UpdateBldgData() {
  var db = app.ActiveModelDb;
  var sset = app.ActiveSelectionSet;
  if (sset.QueryCount() < 1) {
    alert("Please select one or more buildings and try again.");
  var tableName = "BUILDINGS";
  var filter = sset.GetFilter(db.TableIndex("BUILDINGS"));
  var table = db.Table("BUILDINGS");
  var extent = table.QueryExtent(filter);

  var read;
  var write = table.GetWriteRow();
  while (read = table.Next()) {
    var coords = file.ReadFile("e:/temp/AU 2016.csv");
    var coordsa = coords.split("\n");
    for (var i = 0; i < coordsa.length; i++) {
      var txta = coordsa[i].split(",");
      if (txta.length < 4) // Number of columns in the CSV file
      // If the name of the building is euqal to the record
      // found in the CSV file then...
      if (read.NAME == (txta[0])) { // 0 is the first column - A
        write.USER_DATA = (txta[1]); // Owner - Description
        // (2nd column - B)
        write.DESCRIPTION = (txta[2]); // Update the description
        // (3rd column - C)
        write.ROOF_HEIGHT = (txta[3] * 3.6576); // Update the roof
        // height based on number of floors
        // (4th column - D)
        table.UpdateFeature(write, read.ID); // Update the model
  app.InvalidateTileCache(db.TableIndex(tableName), extent);
  return true;


And works like this…

  • You must have (in this case) one or more buildings selected to update properties about the buildings
  • There must be a unique identifier for each building that corresponds to the values in the first column. In this case I’m using the building names as a way to check against the information in the CSV file.
  • If one of the selected building’s name is equal to one of the values in the building name column in the CSV file (cells A2 thru A6), then the code proceeds to update the following information
    • The building usage type (the USER DATA property in this example) from cells B2 thru B6
    • The owner (the DESCRIPTION property for this example) from cells C2 thru C6 and finally
    • The roof height (based on the number of floors in the CSV file) from cells D2 thru D6

If you have more data (I.E. more columns) you’ll need to adjust the code accordingly to either include or exclude certain data that pertains to your model.

To run the code, with the SCRIPTING dialog box open, select the buildings you want to update then click the START SCRIPT button. After a few seconds or less (depending on how much data you have to update) the model will be updated. My code took just 0.169 seconds to complete.


The final result looks something like this…


The highlighted row below is the data that was pulled from the CSV file for this particular building.


If you have more data that you’d like to populate your model with but you don’t have enough space in the properties palette well, there’s a solution for that – create a custom im.schema.json file.

Posted in Infraworks | 1 Comment

Create Custom Properties in Infraworks

At the end of my previous article (Update Infraworks 360 data using JavaScript and a CSV file) I mentioned you could create your own custom categories in the Properties Palette. This article will walk you through the different parts that make up the im.schema.json file – the file that tells InfraWorks 360 what to display for each category in the properties palette, the different categories you can expand upon, the different data types allowed for each category, and there is also a sample file you can download to use as a starting point for your own models.

NOTE: I strongly recommend you create a test model that you can work on to test your im.schema.json file before loading up in a working project because if you mess up or decide to remove an entry from the json file, your model will contain some leftovers that cannot be removed.

Now that we’ve gotten the disclaimer out of the way, let’s start creating our custom im.schema.json file. The categories within Infraworks 360 that you can create custom properties for are as follows:

  • POIS
  • PARCELS (2017)
  • RIGHT_OF_WAYS (2017)
  • EASEMENTS (2017)

The im.schema.json file consists ot two main parts: CLASSES (user-defined categories that are based upon the base categories listed above) and DISPLAY (defines how you see the custom attributes in the properties palette). In addition to the CLASSES and DISPLAY, there are four types of data formats available:

  • STRING – Can contain numbers, letters or special characters
  • INTEGER – A whole number that can be positive, negative, or zero
  • BOOLEAN – A Yes/No or True/False value represented by a checkbox
  • DOUBLE – A decimal number

The following example will be based on the COVERAGES category. Let’s assume for this example that coverage areas will be used to help identify parcels and they will have the following custom attributes defined:

  • Lot Name (string)
  • Lot Number (integer)
  • Private Lot? (boolean)
  • % Impervious (double)

The properties palette will look something like this with our custom attributes when we’re done.

Create Custom 01

So what does the code look like that creates this? Remember the first part is CLASSES so we have to tell Infraworks 360 which class(es) we want to add attributes to.

Create Custom 02.png

And the second part is DISPLAY.

Create Custom 03.png

So when you put it all together, it looks like this.

NOTE: You can use a simple text editor such as NOTEPAD to create your file.

 "Classes": [{  
 "name": "COVERAGES",
   "base": "COVERAGES",
   "Attributes": [{
 "name": "LOT_NAME",
 "type": "String"
 "name": "LOT_NUMBER",
   "type": "Integer"
 "name": "PRIVATE_LOT",
   "type": "Boolean"
   "type": "Double"
 "Display": {
 "en": [{  
 "name": "LOT_NAME",
   "displayName": "Lot Name",
   "category": "Lot Name and Number",
   "priority": "1007"
 "name": "LOT_NUMBER",
   "displayName": "Lot Number",
   "category": "Lot Name and Number",
   "priority": "1002"
 "name": "PRIVATE_LOT",
   "displayName": "Private Lot?",
   "category": "My Custom Lot Data",
   "priority": "801"
   "displayName": "Percent Impervious",
   "category": "My Custom Lot Data",
   "priority": "802"

For a copy of an im.schema.json file that includes all data types for each of the categories, you can download it from my A360 Drive.

Now that you’ve got your im.schema.json file created with all of the attributes you want, you’ll need to test it out to make sure everything is working correctly. Again, I HIGHLY RECOMMEND you try this out on a test model – one that you won’t mind deleting if things don’t work out quite like you expect. With that being said, the file needs a place to reside and that location will be the same sub-folder located in each model directory structure. Browse to Documents/Autodesk Infraworks Models/Autodesk 360. In this folder will be a series of numbered sub-folders. Each of these folders is the root folder of an Infraworks 360 model. From here it’s a matter of opening a folder, checking the contents and moving on to the next folder until you find the one that contains the .sqlite file for the model you want to apply your custom properties to.

Create Custom 04

NOTE: The .sqlite file name and the model name that you see in the tiles on the Infraworks 360 Home screen are the same.

Create Custom 05

Once you find the correct folder you need to dig a little bit deeper. Double-click on the [model name].files folder and then double-click the UNVER folder to open it. This is where the im.schema.json file needs to reside in order to be read by Infraworks 360 for each project.

Create Custom 06

After you get your im.schema.json file set up with the categories and attributes you want, copy it to the UNVER folder of each project where you would like these attributes. And that’s it.

NOTE: You must close then reopen Infraworks 360 for it to recognize any changes to your .json file.

From here you can create custom themes based on the various custom attributes so whether it’s a broad overview of building usage type, the types or diameter of trees, or the age of certain structures. The possibilities are endless.

Posted in Infraworks | 3 Comments

Adjust building height using image date

Infraworks’ Model Builder is great for giving you a starting point for your model but the building heights aren’t always accurate when the data is imported. Sometimes the building heights aren’t even close to what they are in the real world, but there’s a relatively easy way of adjusting them so they’re shown closer to their actual height. The key is to use the shadows of the satellite imagery along with the approximate date of the image to set the building height.

Start off by creating a model in Infraworks either manually or by using Model Builder. We’ll need the help of the OpenStreetMap’s Bing Imagery Analyzer tool (direct link). Zoom into your project area by entering the address of your project site in the search box in the upper-right hand corner. It will show you a series of tiles with the date the image was taken (month/year). As you zoom in/out there may be more or less tiles available and at different dates.


Set the date in your Infraworks model to be close to the OSM Imagery Analyzer date. You may need to adjust the time as well to get the shadows of the buildings to line up.

TIP: To make the imagery in the Infraworks model easier to see turn off the following surface layers; roads, railways, watermultis, waterareas, waterways, landuse


Because Bing Maps’ Birds Eye view is limited to just four views (North, South, East & West) you can’t always get a good look at a building. And sometimes the stitched images don’t always come together nicely.



BONUS TIP: Use Google Maps’ 3D view to verify building shape and roof heights.

To view Google Maps in a 3D view simply switch to the Earth view, hold SHIFT+LEFT MOUSE BUTTON and move the mouse. The view will automatically change to a 3D view so you can get a better look at the buildings and surrounding areas.


Posted in Infraworks | Leave a comment