Georeferencing Aerial Imagery

In the tutorial Georeferencing Topo Sheets and Scanned Maps we covered the basic process of georeferencing in QGIS. That method involved reading the coordinates from your scanned map and inputting it manually. Many times though you may not have the coordinates printed on your map, or you are trying to georeference an image. In that case, you can use another georeferenced data source as your input. In this tutorial, you will learn how to use existing open data sources in your georeferencing process.

Overview of the task

We will georeference high resolution balloon-imagery using reference coordinates from OpenStreetMap.

Other skills you will learn

  • Downloading super high-resolution public domain imagery.
  • Using the OpenLayers plugin in QGIS.
  • Converting coordinates between different projection using cs2cs command-line tool.
  • Using an existing georeferenced layer to input GCP points in the Georeferencer tool.
  • Setting a custom no-data value for a layer.

Get the data

In this tutorial, we will be using some gorgeous kite and balloon imagery collected by The Public Laboratory. They make the georeferenced versions of the images also available, but we will download a non-georeferenced JPG image and go through the process of georeferencing it in QGIS. If you like the imagery they provide, you can explore it in Google Earth as well.

Download the JPG image of Washington Square Park, New York. You can right-click the JPG button and choose Save link as….

For convenience, you may directly download a copy of the dataset from the link below:

newyorkcity-washingtonsquarepark.jpg

Procedure

  1. For this tutorial, we will be using the OpenStreetMap layer as our reference layer. Install the OpenLayers plugin from Plugins ‣ Manage and install plugins ‣ Get more. See Using Plugins for more information on using plugins in QGIS.
../_images/120.png
  1. Once installed, go to Plugins ‣ OpenLayers plugin ‣ Add OpenStreetMap layer. This will add a layer of pre-rendered tiles created from OpenStreetMap data.
../_images/219.png
  1. Now you have the OpenStreetMap layer loaded in QGIS. Note the Coordinate Reference System (CRS) for this layer. It is set as EPSG 3857 Pseudo Mercator. This is important to note, since the coordinates we infer from this layer will be in this CRS.
../_images/317.png
  1. Now the task is to locate the general vicinity of the area that we are trying to georeference. You can just use Pan and Zoom tools to locate that area on the OpenStreetMap layer. But we can take this opportunity to demonstrate another tool that may help you in future. We know that the image we downloaded is for Washington Square Park in New York. If you search for that place, you will be able to locate the wikipedia page for it. The coordinates for the park are listed there.
../_images/47.png
  1. You will notice that the coordinates are in Degrees/Minute/Seconds and are Latitude and Longitude. But since our layer is in Mercator projection, we will need Mercator coordinates to locate the park. Here’s where a command-line tool called cs2cs comes handy. If you have installed QGIS from OSGeo4W installer, you will already have it installed on your system. On Linux and Mac too, it comes pre-installed with QGIS. Launch a terminal window and type cs2cs to check if it is available. Windows users can find a terminal at Start ‣ OSGeo4W ‣ MSYS.

Note

MacOS users can locate the cs2cs tool at /Library/Frameworks/PROJ.Framework/Programs/cs2cs

../_images/57.png
  1. Once you have verified that the cs2cs tool exists on your system, it is time to convert out Latitude and Longitude to Mercator coordinates. The way this tool works is that you need to specify a source and destination CRS. The CRS definition could be a PROJ4 string or an EPSG code. Since we already know the EPSG code for out input and output CRS, we will use this. The simplest way to use the tool is to supply the input coordinates on the command line itself. Note that the tool accepts coordinates in the order X Y, so we need to enter Longitude Latitude. Enter the following command in the terminal and press Enter. Note that we need to escape the quotes (“) with a backslash (\). Once you press enter, you will see the tool process the coordinates and print out output X Y coordinates in EPSG 3857 CRS.
echo "-73d59'51\" 40d43'51\"" | cs2cs +init=EPSG:4326 +to +init=EPSG:3857

-8237364.02 4972720.34 0.00

If the above command does not work for you, please try the following variant

echo -73d59'51 40d43'51 | cs2cs +init=EPSG:4326 +to +init=EPSG:3857
../_images/66.png
  1. Copy these coordinates and switch to QGIS. At the bottom of the QGIS window, you will see a textbox labeled Coordinates. Enter the coordinates there in X,Y form. Press Enter. You will see the map shift a bit, but not zoom. To zoom to the area, select 1:2500 scale from the Scale drop-down next to the Coordinate box and press Enter.
../_images/77.png
  1. Voila! you now see Washington Square Park area on your canvas. Now it is time to start georeferencing. Launch the Georeferencer from Raster ‣ Georeferencer ‣ Georeferencer. If you do not see that menu item, you will need to enable the Georeferencer GDAL plugin from Plugins ‣ Manage and install Plugins ‣ Installed.
../_images/85.png
  1. In the Georeferencer window, go to File ‣ Open raster. Navigate to the downloaded JPG file and click Open.
../_images/97.png
  1. In the Coordinate Reference System Selector, choose EPSG:3857 Pseudo Mercator
../_images/105.png
  1. Now click on the Add Point button on the toolbar and select an easily identifiable location on the image. Corners, intersections, poles etc. make good control points.
../_images/1110.png
  1. Once you click on the image at a control point location, you will see a pop-up asking you to enter map coordinates. Click the button From map canvas.
../_images/127.png
  1. Find the same location in your reference layer, i.e. the OpenStreetMap layer and click there. The coordinates are auto-populated from your click on the map canvas. Click Ok. Similarly, choose at least 4 points on the image and add their coordinates from the reference layer.
../_images/137.png
  1. Now go to Settings ‣ Transformation settings.
../_images/146.png
  1. Choose the settings as shown below. Make sure you the Load in QGIS when done button is checked. Click OK. Back in the Georeferencer window, go to File ‣ Start georeferencing. This will start the process of warping the image using the GCPs and creating the target raster.
../_images/156.png
  1. Once the process finishes, you will see the georeferenced layer loaded in QGIS. If all went well, you will see it nicely overlay the OpenStreetMap layer.
../_images/165.png
  1. To make our output look nicer, let’s remove the black and white no-data values. Right click on the image layer and choose Properties.
../_images/175.png
  1. Switch to the Transparency tab. We want to indicate that any black or white pixels in the image are no-data values and should be made transparent. Input 0 as the No data value. Also, in the Custom transparency options, click the + button and add 255 as the transparent pixels for each band and enter 100 as the :Percent transparent. Click OK.
../_images/185.png
  1. Now you will see your georeferenced image nicely overlaid on the base layer.
../_images/194.png
comments powered by Disqus

This work is licensed under a Creative Commons Attribution 4.0 International License