Ground Control Point Interface (other options?)


I’m testing out WebODM and I’m struggling a little bit with creating the ground control point file that I would upload along with the images. I’ve been using Reality Capture by CapturingReality and the interface for marking ground control points to the images they reside in is quite quick. I understand how the ground control point interface in WebODM works and I am able to load my control point file and select the points in each photo.

I have about 650 images which I drag onto the “Choose Images / drag here” box. It takes a very long time for the images to appear. They remain white boxes for several minutes before the actual photo is rendered. I’m guessing my browser is loading all the images? I have 10 control points and it’s a very painstakingly slow process to find all of the photos that have my control points in them and then go and mark them with this interface.

I have also used Agisoft’s Metashape as a trial and marked control points with their interface. Their interface is more similar to WebODM’s ground control point interface than RC’s.

I’m curious to see what everybody’s methods are for marking ground control points. Is using the web based interface the only way to mark the points? The web interface just takes me far too long to mark all of the points and I’m hoping there is some other method that I haven’t discovered yet.

1 Like

I know your pain. I ended up building my own. For mine, you choose a marker on a map that’s pre-loaded from the photo’s GCP EXIF tags and stored in the database. I pull this data out automatically when users upload the photos into the system. To add GCPs, they choose a photo marker on the map which brings up that specific photo and another map of the general location. Then, the user adds a GCP point on the photo and moves a marker on the map to its location. Lat/Longs and WGS84 coordinates are calculated automatically and on the fly, or the user can manually type these (and it converts both ways also). The altitude is also pre-loaded but customisable based on the photo’s GPS data.

When they save, it’s stored into the database. After they’ve added all GCPs, they start the job processing and the GCP file is generated and fed into ODM automatically - users don’t even know it exists.

Here’s an example (you can’t add or edit without logging in):
Survey (see the tabs at the top):

GCP Example:

Is there any way you could share the code with the community?
It is fantastic what you have done and I am really struggling with gcp’s as well.
Thanks in advance

It’s all javascript, so if you’d like a copy just lift it straight off the site :slight_smile:

1 Like

@ITWarrior thanks a lot! I am not very familiar with JavaScript but I will certainly have a go on this!

Hi @ITWarrior thanks for sharing your workflow for dealing with ground control points. It looks like quite a project to implement something like that.

Have you ever used Autodesk’s Recap Photo? It uses a cloud processing engine, but they have an interface for ground control points that sort of reminds me of what you’ve implemented.

I haven’t seen that. I built an interface that was easy for people to use with the given inputs, produced the required outputs, and fit in with the rest of the workflow (and automate as much as possible in between, like the EXIF extraction and photo/map overlay). I do this for a living (system integration) so it was something that I immediately identified as a usability issue with the current system and set out to improve it.

I’m currently working on a way for people to add their own branding and automatically produce PDF reports from results so that people can provide these to their own customers as a PaaS. I’m hoping to have that piece done by mid-next week.


I noticed one thing about your dashboard. When viewing a 3D model, applying the texture doesn’t change the height of the model viewed, something that happens on my webodm installed viewer (since I installed it for the 1st time).
Is there something wrong with the way I capture my photos? Or do you have more software down your aquire to presentation path?

Thanks, Carlos

I haven’t modified ODM in any way other than adding some minor CSS changes (applied to the theme via the Administration menu) to strip some things that I’d replicated elsewhere to make it clearer - e.g. the download popup when clicking the orthophoto is gone and replaced by the green button to the left, the little 3D button in the corner is also gone and replaced by a tabbed view; share button and other control buttons are gone to tidy up the UI, etc.

If you start customising other people’s code that serves as a core function to your own, it becomes difficult to keep up to date with changes in the original application. Most open source licenses also insist that modifications to the code are made available to the public, so I’d need to run an additional repository for that too.

I’m not sure what you mean by changing the height. Maybe post a screenshot to a new topic about it? Could be a bug.

Well it’s good to know that it’s possible to change the UI via THEME (CSS) as I would like to have a showcase of the 3dmodels using the potree js app. I was gonna do it on a separate apache server where the showcase would have a copy of the 3dmodels and viewed with potree downloaded … (this was cleary a DUHH moment).

On the subject of bugs, what bugs me lately is that I have to restart webdom after each heavy dataset (>100 images) or else i’ll get a node wen’t offline due to not enough memory.

About the shifting/skewing of the viewer when changing from Cloud to Textured, here goes:






We have run tests and the processed orthophoto output has a curved surface we assume is due to no ground control during processing. So, we have 6 images (screenshots) with a GPS location taken at our test site (see image below) that we intended to use as ground control (after flying).

But how do you use the GCP interface page? I have tried to be logical with it but I cannot understand how it works. I cannot find where/how to enter a coordinate value into the interface, i.e. enter the coordinates from the screenshots and not try to find the location by panning around the map. I must be missing how this works? Can someone please direct me to a workflow or help file - I can’t find anything.

Many thanks, Grant.

There is a lot of work yet to be done on the ground control point interface, but your task is achievable in it’s current state.

Create a GCP list that only includes gcp name (this is the label you will see in the GCP interface), x, y, and z, with a header with a proj4 string of your GCPs (make sure they are in a planar coordinate system, such as UTM. It should look something like this:

+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs 
gcp01 529356.250827686 9251137.5643209 8.465 
gcp02 530203.125367657 9250140.80991621 15.781
gcp03 530292.136003818 9250745.02372435 11.977
gcp04 530203.125367657 9250140.80991621 15.781
gcp05 530292.136003818 9250745.02372435 11.977

Then you can load this GCP list into the interface, load the images, and place each of the GCPs in the image.

1 Like

FYI: help with writing docs on this would be most welcome, but let’s get you going on what you need first.

I have started adding this to the docs:

Hello smathermather-cm,

Thank you for your assistance. I think my problem is not knowing what the sequence of steps is. Currently, I believe, the steps are,

  1. Add ONLY the drone images that have visible GCP markers in them to the GCP interface. Correct?
  2. Then use the GCP Interface to locate on the world map the matching location where the GCP marker is. I then place a point at that location.
  3. I then repeat that process for each image with a visible GCP marker. Correct? I only have 6 images with identifiable markers but I have read that you should have at least 15?
  4. Then I would use the EXPORT FILE button to export the coordinates of all the newly-placed GCP markers (added using the GCP interface) to a GCP text file.
  5. I would save that text file (named GCPlist.txt?) in the same folder with all of the source drone images.
  6. Then I would run a project from scratch selecting both the images and the GCP text file just created. Correct?

The reason I am detailing my process is I spent several hours the other day adding markers to the images and then the web browser was accidentally closed (!) and I lost the points I had placed using the GCP interface. I do not want to repeat that if my understanding of the process is incorrect.

Many thanks, Grant

PS. what is a ‘proj4 string of your GCPs’? Do I enter the string as you show (+proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs ) or only the EPSG code? That part is still unclear.

1 Like

Hey grantd,
I have the same question re: the proj4 string for the header of the gcp file and this is what I found.
if you go here
you can search in the top right for your gcp’s coordinate system. (mine was alabama west state plane us survey foot) I searched alabama west and found from the list provided.

Once you select you will get the page for that coordinate system and it will have a list, one of which is proj4 type definition.

This will bring up the text for the header for your gcp file.

Hope this helps, hope this is correct.

1 Like