GQIS is the leading free, open source Geographic Information Systems (GIS) application. It is capable of sophisticated geodata processing and analysis, and also can be used to design publication-quality data-driven maps.
The possibilities are almost endless, but you don’t need to be a GIS expert to put it to effective use for both displaying and processing geographic data, whether for online or print maps.
Launch QGIS, and you should see a screen like this:
Download the data from this session from here, unzip the folder and place it on your desktop. It contains the following folders and files:
seismic
Shapefile with data on the risk of a damaging earthquake in 2017 for the continental United States, from the U.S. Geological Survey.seismic_raw
As above, but not clipped to the coast and borders of the United States.gdp_pc
gpd_pc.csv
gdp_pc.csvt
CSV file with World Bank data on GDP per capita for the world’s nations in 2015, plus ancillary file for QGIS to understand the data types for each field.ne_50m_admin_0_countries_lakes
Natural Earth shapefile with boundary data for the world’s nations.sf_test_addresses
Shapefile derived from the addresses we geocoded in week 9.quakes.csv
This file isn’t in the folder. Instead, we will39.828175
degrees and a longitude of -98.5795
degrees. Type this url into the address bar of your browser:https://earthquake.usgs.gov/fdsnws/event/1/query?starttime=1960-01-01T00:00:00&latitude=39.828175&longitude=-98.5795&maxradiuskm=6000&minmagnitude=6&format=csv&orderby=time
A file called query.csv
should download. Rename it quakes.csv
and add to the week10
folder.As we discussed in week 9, choropleth maps fill areas with color, according to values in the data.
We will first import the shapefile in the seismic
folder.
Select Layer>Add Layer>Add Vector Layer...
or click on this icon:
At the dialog box, click Browse
and navigate to the file seismic
. It is important that you select the file with the .shp
extension. Then click open, and the following map should appear, filled with a random color:
The Layers
panel ay bottom-left should now show the seismic
layer. You can turn off the visibility of any layer by unchecking its box in the Layers
panel. This can be useful to see the status of layers that would otherwise be obscured.
These controls allow you to pan and zoom the display:
You can focus the display on the full extent of any layer by right-clicking it in the Layers
panel and selecting Zoom to layer
.
Notice EPSG:4326
at the bottom right. This defines the map projection and datum for the layer.
Right-click on seismic
in the Layers
panel at left and select Properties>General
. You should see the following under Coordinate reference system
:
EPSG:4326
and WGS84
mean that this shapefile is in an equirectangular projection, and the WGS84 datum. This is also the default for QGIS if no projection is specified.
We will select another projection for our map later. Click Cancel
or OK
to close Properties
for this layer.
Now we need to color the areas for the sesimic
layer by values in the data. Right-click on the layer in the Layers
panel and select Open Attribute Table
, which corresponds to the .dbf
of the shapefile:
There is one variable, ValueRange
, which gives ranges for the percentage chance of experiencing a damaging quake in 2017.
Close the attribute table and open Properties>Style
for the seismic
layer. Select Categorized
from the dropdown menu at top, which is the option to color data according to values of a categorical variable.
(Note, although these values are percentages, they have already been binned into categories in this data. If we were coloring by a continuous variable that had not already been binned, we would select Graduated
and select values for the bins. See last year’s class for an example.)
Click the Classify
button and the values in the data will be assigned random colors:
Notice that the range 10-12
is out of order, and we also have a blank range at the bottom. First select this blank and click the red minus symbol to remove it. Now click and drag the range 10-12
to the correct position.
Now click on the Color ramp
dropdown menu and select Reds
:
It is also possible to import a wide variety of color palettes, including those from ColorBrewer, using the Color ramp
dropdown menu.
Click OK
, and the map should look like this:
Next we’ll remove the black outlines around the polygons. Open Properties>Style
again, and double-click on the colored square under Symbol
. Select Simple fill
in the dialog box:
Scroll down, and change Outline style
to No Pen
:
Click on OK
at each of the dialog boxes and the map should now look like this:
It is also possible to edit the colors for each value individually.
If you are likely to want to style data with the same column headings in the same way in future, it is a good idea to click the Style
button at bottom left and select Save Style>QGIS Layer Style File
. This saves the style in QML
, which is a variant of XML. When loaded using the Style>Load Style
, it will automatically apply the saved styling to future maps.
Now is a good time to give the project a projection: We will use a variant of the Albers Equal Area Conic projection, optimized for maps of North America.
Select Project>Project Properties>CRS
(for Coordinate Reference System) from the top menu, and check Enable 'on the fly' CRS transformation
. This will convert any subsequent layers we import into the Albers projection, also.
Type Albers
into the Filter
box and select North_America_Albers_Equal_Area_Conic
, which has the code EPSG:102008
:
Click OK
and the map should reproject. Notice how EPSG:102008
now appears at bottom right:
Save the project, by selecting Project>Save
from the top menu.
Add the ne_50m_admin_0_countries_lakes
layer, as before. It will appear above our choropleth map:
So click and drag the seismic
layer over the base layer in the Layers Panel
. Also right-click on the layer and Zoom to Layer
so that the view is optimized for this projection:
Now open up the Properties
for the ne_50m_admin_0_countries_lakes
layer, select Simple fill
, and click on the Fill
color to change it to #cccccc
for a light gray. Also change the Outline
to #ffffff
for white:
Click OK
and the map should look like this:
Now select Project>Project Properties...>General
, click on the Background color
and set it to #686868
for a dark gray:
The map should now look like this:
To import a CSV or other delimited text file with points described by latitude and longitude coordinates, select Layer>AddLayer>Add Delimited Text Layer
from the top menu or click this icon:
Browse
to the file quakes.csv
, and ensure that the dialog box is filled in like this:
If your text file is not a CSV you may have to select the correct delimiter, and if your latitude and longitude fields have other names, you may have to select the X field
(longitude) and Y field
(latitude) manually.
When you click OK
you will be asked to select a projection, or CRS, for the data. You may be tempted to select the same Albers projection we have set for the project, but this will cause an error. QGIS will handle the conversion to that projection: Because the data in the CSV file is not yet projected, instead select a datum with the default equirectangular projection WGS 84 EPSG:4326
(NAD83 EPSG:4269
, which is an equirectangular projection in the 1983 North American Datum, would also work.)
Click OK
and a large number of points will be added to the map:
Now we will style these points, giving them a single color but sizing them according to the amount of shaking that quake each caused. Open the attribute table for the quakes layer and notice that it contains a variable called mag
, for earthquake magnitude. This is a logarithmic scale, so that a magnitude difference of 1 corresponds to a 10-fold difference in earth movement, as recorded on a seismograph, as this calculator shows:
This means that the equation to convert magnitude into the amplitude of the shaking, as recorded on a seismograph, is amplitude = 10^magnitude
, or ten raised to the power of magnitude.
So if we want to scale the points according to the actual size of the quake, we need to create a new field in the data for amplitude. To do this, click on the abacus symbol in the top toolbar:
Fill in the dialog box as follows:
The formula is: amplitude = 10^mag/100000
. The final division by 100,000 helps keep the values in a range that is easy to read and understand, which will help when we set the size of the points. The Outout preview
at the bottom shows the resulting value for the first row in the attribute table. Click OK
to create the new amplitude
variable.
Select Properties>Style
for the quakes
layer, set the Color
to #ffffff
for white and the transparency
to 50%
:
Now click on this icon for Size
, and select Size Assistant...
:
Fill in the dialog box as follows:
Using the Scale method
of Surface
will scale the circles by area, according to values in the data; Flannery
is a method of scaling that is designed to compensate for the errors people make when estimating the area of circles. You may wish to experiment with this, but I would strongly advise against using Radius
, for the reasons we discussed in week 2.
By default, QGIS will select the range of values in the data. Make sure to set both Size from
and Value from
to zero to ensure that the area of the points scales accurately according to values in the data.
Click OK
until you return to the map, which should now look like this:
To export the map as a JPG, PNG, or other raster image format, select Project>Save as Image...
from the top menu.
To export as a vector graphic, for further editing in Adobe Illustrator or another vector graphic editing program, select Project>New Print Composer
, give the composer an appropriate name and click OK
. Set Page size
as required, then click the Add new map
icon:
Draw a rectangle over the page area, and the map should appear. At this point, you may need to alter the zoom level and position of your map in the main QGIS display to get a pleasing display in the print composer.
Your print composer should now look something like this:
The print composer also allows you to add and edit a legend, by clicking this icon:
You can also add text and other items. In practice, however, you may find it easier to add legends and labels in Adbobe Illustrator.
The map can be exported in SVG and PDF vector formats by clicking these export icons:
Finally, save the QGIS project.
Open a new project by selecting Project>New
from the top menu.
In this new project, import the ne_50m_admin_0_countries_lakes
shapefile. Right-click on it in the Layers
panel and Save As ...
an ESRI shapefile
, keeping the default WGS 84
CRS. Browse
to the gdp_pc
folder, call the new file gdp_pc
and check the option to Add saved file to map
.
Now remove the original shapefile, by right-clicking on that layer and selecting Remove
.
Open the attribute table of the new shapefile and notice that it contains a field called iso_a3
, which is a three-letter code for each country, assigned by the International Organization for Standardization.
Now use Add Vector Layer
to import the file gdp_pc.csv
. (Note that when joining external data in a CSV file to a shapefile, you do not import the file as a delimited text file, as we did previously to display data on a map.)
After import, this file will appear as an isolated table in the Layers
panel.
Select it and open the attribute table to view the data, which contains country names, the three-letter country codes, and data on GDP per capita in 2015:
Notice that some cells contain the value -99
, which is here being used to designate null
values, where there is no data.
The same subfolder with the file also contains the file gdp_pc.csvt
. This contains information about the type of data in each field of the CSV file, in this case:
"String","String","Real"
When we make the join, this will tell QGIS what sort of data is in each field of the CSV file. String
indicates a string of text, Real
indicates numbers that can include decimals, while Integer
indicates whole numbers. Without this information, QGIS will treat all of the fields in the file as text.
Close the attribute table once more, right-click on the gdp_pc
shapefile and select Properties>Joins
. Click the green plus sign and fill in the dialog box as follows to join the CSV file to the shapefile by the iso_a3
three-letter country codes:
Click OK
at each dialog box to completethe join, then open shapefile’s attribute table once more to confirm that the data from the CSV file has appeared.
Right-click on the joined shapefile, select Save As ...
and notice the Format
options include ESRI shapefile, GeoJSON and KML. You are also able to choose a projection (CRS) for the new file and restrict its extent by latitude and longitude coordinates. Click the Browse
button to select the location to save the data.
Save this file in the gpd_pc
folder as GeoJSON with an appropriate name, keeping the default WGS 84
CRS.
Start a new project, and import both the ne_50m_admin_0_countries_lakes
shapefile, and the seismic_raw
shapefile. Note that it extends beyond the boundaries and coastline of the U.S.:
Turn off the visibility of the seismic_raw
layer, turn on the visibility of the ne_50m_admin_0_countries_lake
layer, select it in the Layers Panel
, and click the Select feature(s)
button:
Now click anywhere within the borders of the United States to select the nation, which should now appear yellow:
Select Vector>Geoprocessing Tools>Intersection
from the top menu and fill in the dialog box as follows:
Click Run
and a new layer will be created, clipped to the borders and coastline of the United States:
Its attribute table will contain data from both layers used for the intersection.
You can now right-click on the new Intersection
layer and Save As ...
as a shapefile, GeoJSON, or another geodata format.
Look at the other options in the Vector>Geoprocessing Tools
menu. Their icons give a good idea of what they do. (Clip
is similar to Intersection
, except that it does not include data from both layers in the new attribute table.)
Now open a new project, and import the shapefile sf_test_addresses
. I made this shapefile from the addresses we geocoded in week 9. I saved it in a Google Mercator
projection, also known as EPSG:900913
, used for Google and other online maps.
This is important, because we are going to create a “buffer” defining areas within 1,000 feet of the nearest point. For this we need a projection with units defined in distance, rather than degrees, which is the unit for the WGS 84
datum.
To confirm the units for the Google Mercator
projection, click on the globe symbol at bottom-right:
You should see that the CRS/projection information that appears near the bottom of the dialog box contains +units=m
, which tells us that distances in this projection are measure in meters:
Creating a buffer shapefile is a task you might perform if, for example, working out which areas are off-limits for sex offenders under residency restrictions.
Select Vector>Geoprocessing Tools>Fixed distance buffer
and fill in the dialog box as follows:
Selecting 99
under Segments to approximate
ensures that the resulting shapes are as smooth circles. Buffer distance
is set to 304.8
because the projection’s units are meters; this value gives the 1,000 feet we require. Checking Dissolve result
merges overlapping buffers into the same polygon.
Click Run
, and this should be the result:
Again, you can now right-click on the new Buffer
layer and Save As ...
as a shapefile, GeoJSON, or another geodata format.
File an update on progress with your final project. Pay particular attention to identifying problems/obstacles.
You can file the update as a markdown file in GitHub, or by email. Either way, make sure that your GitHub repo is up to date with data, charts etc, so that I can sync with my version of your project and review your progress. The update should be sufficiently detailed that I can look at your repo and understand what you are doing.
If you are having trouble with GitHub, get in contact for a refresher.