2D Map of Elevation Difference between Two Maps

@Nipul, @zach1, @Jeremy, @chasemgray,

Is there a way to combine two 2D maps in order to display the elevation difference between them? I want to measure the growth of trees over time. Looking at the differential seems like a nice way to do this.

Currently I can tweak the elevation limits that control coloring of the 2D Elevation Map but this just allows me to highlight one range of elevations at a time. I could, say, look at the tops of the taller evergreen trees to try and pick out differences between the maps. But then the shorter deciduous trees become obscured. The differential would show the differences in all trees simultaneously while also eliminating changes due to the geological topology.

It would be like taking two big X-Y spreadsheets holding the value for the elevation in each cell, subtracting them cell-by-cell and then color plotting the result using continuous colors (NOT like the colors convolved with contours in the existing Elevation Map).

Very nice for monitoring the growth of crops too. Maybe there is a App for this already? Please let me know.


This would probably be done better in a 3rd party program like QGIS (free) or similar with the layers at this time.

If you are on a plan that supports it you can download the DXF contour files for the two maps and open them in DWG Trueview. When you select the line it gives you the elevation of that line. Otherwise you are going to need a Civil design software to complete a cut/fill comparison between the contours or a generated 3D surface.
Another option in the DD interface is to draw a distance measurement over the specific area and look at the profile of that line. You would need to do that in each map though. :unamused:


I only have a Pro trial for now so I do not have access to the contour file. But I came up with a better way. At least for me. Back at the beginning of this year I spend 100’s of hours playing with Rhino to make parts for CNC machining. From this I learned about all the Rhino commands for manipulating 3D objects and how to write Python scripts for automating operations. I was looking thru the commands and found a way to get what I want.

  1. I load up the 3D .obj model which displays as a mesh in Rhino.
  2. I use the Drape command to create a surface whose Z is the elevation of the trees. This cleans up the 3D model as hidden regions under the edges of the trees are removed as the drape lands on the tree above.
  3. Now I store the surface’s z-value for each grid-cell used to create the draped surface and get a point cloud.
  4. I do the same with a map from a later date, subtract the z’s and make a new surface from this point cloud.
    The resulting surface contains the differential of the elevation which is the plant growth. I think I can color this in Rhino to give me a very nice looking elevation map just like DD shows now but without the obscuring, dark pseudo-contour lines.

I am not all done scripting this up yet but hope to have something today. Fingers crossed.


That sounds like a good workaround. Rhino is probably the most versatile 3D modeling software I have seen. We use it to clean up our Revit models. I know you can do a gradient using the variance in height, but as a comparison between two 3D models is beyond me. Have you tried grasshopper3D?


Thanks for your encouragement and tip.

I have tried a little grasshopper3D but prefer to have tighter control of the underlying algorithms. I really have a great time with Rhino. I use its immediately available 3D display to graphically show, for example, the convergence of my Newton-Raphson procedure that trims two curves so that the angle of their end points to the origin hits a design target. This is really great for spotting weaknesses in my algorithm and facilitates me in developing an alternative since I can see the conditions under which it fails. It lets me visually see into the normally black box of a 2D or 3D software module. I am hoping to do something along the same line in order to turn the two 3D models into a growth map.


I can’t wait to hear how it goes! The thing I end up worrying about is the fact that DD’s data is an interpolation of the actual collection and then when I download a point cloud that doesn’t contain every point I am once again interpolating. How do you end up defining your “fixed” points? Do you use GCP’s?


What do you mean by collection? I am using the meshed representation of the 3D model to obtain the Z value at all the locations so I am limited by that accuracy.

There needs to be a fixed reference point that each of the maps is aligned to so that the Z data can be accurately subtracted. Again, I only have a Pro trial and necessity is the mother of invention, so for this case I developed an Auto-Calibration Technique (ACT) to create a virtual GCP at a location with known elevation. This is giving me exactly the same elevation at that point on all my maps (that I auto-calibrate). My ACT is described in the Forum. Go to Latest and then look down a bit and you will find Accuracy problems. This is really working great for me. It enables me to add photos from a mission flown on a later date and still be able to register their Z accurately with the existing map. Without this I would get up to 100’s of feet error in elevation as explained near the bottom of Steep Terrain Question topic that can still be found on the first page of the Forum Latest topics.

Since I started flying the P4P drone with DD 3 weeks ago, I have been amazed at the yin and yang of this system. On the one hand, I have been very impressed with how DD can pull out the 1/4"/ft. slope of my driveways from photos taken at 300’. This shows it can achieve superb relative-elevation accuracy. On the other hand, I am aghast at the terrible absolute elevation accuracy of the maps. It shocked me to see that the DD measured elevation of the takeoff point varied by 500’ in the course of 2 weeks (for an explanation of this shocking variation please see my post 500’ Elevation Variation Recorded for Takeoff from Same Spot). Why people are not jumping out windows over this I cannot understand. Using GCPs eliminates this problem but only if you go up to a Business Plan and pay $49/map. The GCPs are overkill for fixing the large elevation error which is 10X to 100X bigger than the x, y errors. With ACT you get a virtual, altitude-only GCP at a known location that fixes the elevation error at zero cost and it can be retroactively applied to any of your maps.



I just got the first contour map of my forest using one Rhino command:
AddSrfContoursCrvs(obj, ((0,0,0),(0,0,200), 3.048)
This draws contours every 10’. I use the Rendered view to get a near black on white contrast so its looks really crisp. Counting the contours you can see some of the trees are over 100’ tall which is correct. It took Rhino less than a minute to generate the contours on my little Lenovo Yoga 900 laptop with dual-core i7-6500U chip (one I helped design when I was at Intel for 19 years).



Essentially you are doing GCP’s digitally. Sounds like a new term to me… DCP. :grin: This works great for map to map of the same thing, but GCP’s are for real-world values to integrate with engineering files.I.E. translating from satellite WGS84 datum to land survey State Plane coordinates.

Looking good! If you don’t mind could you share the OBJ when you are happy with it?

ACT can give real-world values for elevation if you have the real-world value for your know location. I am looking at getting a cm-level accurate GPS receiver for real-world calibration of my reference points (aka known points). I have a lead on one for less than 1K. This would be helpful for my terrain because it drops off 100’. I would like to go down the hill and fly a second mission in order to get better resolution on the lower half. So I need a new reference point down there.


I re-did the contour map with 1’ increments to see if the 3D model was bringing over the details in the North field where the highest elevation is located but the terrain is changing slowly. The DD elevation map, with the limits adjusted to 998’ to 1021’ nicely shows the gradual slope around this highest land-elevation area. And my contour map, I think, looks similar. Once I get a gradient working I may pick up more detail between the 1’ digital increments I now have.

Nice DD Elevation Map of Highest Land Elevation Region with Gradual Slope:

Rhino Contour Map of Same Region:

You mentioned OBJ. The one from Rhino with contours?


Gotcha, key being elevation. GCP’s as used in this process are more for horizontal manipulation of the “flat” drone flight plus and minus to the ellipsoid use by the GPS equipment. If you are picking the same point every time then your are essentially doing the same thing horizontally even though it may not be quite as accurate. Tenths vs hundredths unless you are on the edge of a cliff and the point is interpreted in the wrong direction.
I forgot to answer the question above about collection. The collected data is the original points in the base point cloud. This is still an interpretation of the real world because of the camera calibration. Theoretically, if i have a job site that the original dataset contains 100 million points generated and I don’t have a supercomputer I have to download and process a simplified version of that dataset. I have software and a decent enough computer to process that many points, but it is still tough so I don’t know how any average user would process the original set. Once I have brought in the points and cleared trees, cars and other unneeded features I process the surface to be used. Again an interpretation of another dataset. It is not put into a format that can be directly imported into our survey data collectors so it is processed one more time by our civil engineering/survey software and ends up in the data collector. I don’t know how much accuracy I can expect after that process. It’s kind of like scanning and reprinting a document several times then zooming in on the pixels… yuck.

Anyone used Cloud Compare for this ?
They have a tutorial doing the comparison, showing variations between two surfaces.


My plan is to use a point cloud subtract in Rhino to generate the growth surface as outlined in the 4th post from the top of this topic. I got sidetracked customizing contour and elevation maps (example below) in Rhino but I coding up the point cloud-based growth map is next.

Ain’t it pretty?


Hi Terry
All looking great :slight_smile:
I recently overlaid a DEM generated through Agisoft from a DD flight with a LiDar created 15 years ago to show the cut & fill variations on a quarry.
Much of that work was done in Manifold GIS package. End result swayed the judge in a court case that has been on going, however it does raise interesting options beyond quarries…
What time difference are you working with for the growth?




Year by year going forward over the next decades.

Below is an improved version of the elevation map. It uses more colors and delivers more resolution. The trick is to give the Yellow-to-Green and Green-to-BlueGreen transitions only 4-5% of the Z range. It is hard to see much color variation in the greens so it is better to give the other transitions more of the Z range. The Red-to-Orange-to-Yellow likes a lot of range as does the BlueGreen-to-Blue. My current breakdown is:
Dred2Red = 15%
Red2Orange2Yellow = 20%
Yellow2Green = 5%
Green2BlueGreen = 4%
BlueGreen2Blue = 25%
Blue2Purple = 14%
Purple2Black = 17%


Here is the 3D version. The colors just amplify the 3D topology changes.

I am still contemplating the Blue-to-Purple section. The added color enhances overall resolution but looks less intuitive than just grading the blue off to black like on the DD Elevation Maps.


I applaud you for you perseverance! Seems like you have done allot of work. I don’t want to dissuade you from your pursuit because it sounds like fun to me as well and no ill will, but I can do everything you have shown with native DD data in about 5 minutes. Also, we have the option as to whether it is a DSM or DTM comparison.

  • Download data from DroneDeploy
  • For DSM comparison simply the DXF contours file in Carlson Civil and running a cut/fill command against a previous flight or the proposed design. The datum sections are customizable from 0.001’-1000000.00’. Color schemes are also customizable. Variations can also be plotted in 3D so you have a map of the variances not just the absolute values from each flight.
  • For DTM comparison it’s the same operation, but I download the point cloud and run it through Carlson Precision 3D to strip everything above ground. I generate a new surface and contours from the edited point cloud and then perform the cut/fill.
    I could have done it twice in the time it took to explain it and I know people don’t want to spend money, but at some point you really have o think about how precious/valuable your time is. It wouldn’t take me very long to justify the $4k in software that was meant to handle this kind of data.


Nice to learn some details about using Carlson Civil. But getting the data over requires a Business plan. I am in a Pro plan so I am exploring what I can do within its export constraints (no DXF data export, no x,y,z point cloud export). As you can see, I now can do contour maps customized to my application and elevation maps based upon actual numerical values with my own custom colors. And I can create virtual, altitude-only GCPs for cm-level accuracy in the absolute elevation data of my maps. All this on a Pro plan without the $49/map cost of GCPs. So I am pretty happy. Being retired I have the time, map making gives me something new to learn, I get to use my Rhino skills and it fits within my budget.

I find that no matter what program I use, there are changes I want to make, enhancements I want to add and custom GUI interfaces to develop that streamline operations. Below is a jog wheel generator in Rhino that creates parts for CNC machining with 2 to 15 arms with adjustable Torus [radius, width, height, recess depth, outer edge bulge] and Arms [number, shape, curvature, reverse curve, top-center width, side-center width, overall arm width and height]. It also takes it own picture (check 2-15 box and push Generate), generating wheels with 2 to 15 arms, screen capturing each one and then these appear appropriately in the dynamic picturebox of the GUI as you change the number of arms. This generator sure beats editing Rhino by hand to create new versions.

So I have some time and I look for interesting investments. Managing my 1500+ trees with drone mapping is more interesting than I thought. I had no idea that easily affordable drones and software packages had developed to the point that 3D maps with cm-level relative elevation accuracy could be routinely generated. I am having a blast massaging the data with my own 3D programming in Rhino. My mapping GUI is going to be really fun to develop and will have capabilities probably not even though about by Carlson Civil since they are not up their alley.