GIS is very useful in analyzing spatial relationship between features. One such analysis is finding out which features are closest to a given feature. QGIS has a tool called Distance Matrix which helps with such analysis. In this tutorial, we will use 2 datasets and find out which points from one layer are closest to which point from the second layer.
Given the locations of all known significant earthquakes, find out the nearest populated place for each location where the earthquake happened.
We will use NOAA’s National Geophysical Data Center’s Significant Earthquake Database as our layer representing all major earthquakes. Download the tab-delimited earthquake data.
Natural Earth has a nice Populated Places dataset. Download the simple (less columns) dataset
For convenience, you may directly download a copy of both the datasets from the links below:
ne_10m_populated_places_simple.zip
Data Sources: [NGDC] [NATURALEARTH]
signif.txt
file.Note
You may see some error messages as QGIS tries to import the file. These are valid errors and some rows from the file will not be imported. You can ignore the errors for the purpose of this tutorial.
EPSG: 4326
. Verify that is the case in
the bottom-right corner. Let’s also open the Populated Places layer. Go to
.ne_10m_populated_places_simple.zip
file and
click Open.signif
as the Input point layer and the
populated places ne_10m_populated_places_simple
as the target layer. You
also need to select a unique field from each of these layers which is how
your results will be displayed. In this analysis, we are looking to get only
1
nearest point, so check the Use only the nearest(k) target
points, and enter 1. Name your output file matrix.csv
, and
click OK. Once the processing finishes, click Close.Note
A useful thing to note is that you can even perform the analysis with only 1 layer. Select the same layer as both Input and Target. The result would be a nearest neighbor from the same layer instead of a different layer as we have used here.
matrix.csv
file
in Notepad or any text editor. QGIS can import CSV files as well, so we
will add it to QGIS and view it there. Go to .matrix.csv
file. Since this file is just
text columns, select No geometry (attribute only table) as the
Geometry definition. Click OK.Note
Remember that the distance calculation will be done using the layers’ Coordinate Reference System. Here the distance will be in decimal degrees units because our source layer coordinates are in degrees. If you want distance in meters, reproject the layers before running the tool.
matrix
as the Join layer` and InputID
as the
Join field. The Target field would be I_D
.
Leave other options to their default values and click OK.signif
layer by right-clicking and
selecting Open Attribute Table.signif
layer and select Save As….earthquake_with_places.shp
. Make sure the
Add saved file to map box is checked and click OK.signif
layer. As our dataset is quite large, we can run our
visualization analysis on a subset of the data. QGIS has a neat feature
where you can load a subset of features from a layer without having to
export it to a new layer. Right-click the earthquake_with_places
layer
and select Properties."COUNTRY" = 'MEXICO'
ne_10m_populated_places_simple
layer and select
Properties."adm0name" = 'Mexico'
MMQGIS
. Find and install the plugin. See Using Plugins for more
details on how to work with plugins. Once you have the plugin installed, go
to .ne_10m_populated_places_simple
as the Hub Point
Layer and name
as the Hub ID Attribute. Similarly, select
earthquake_with_places
as the Spoke Point Layer and
matrix_Tar
as the Spoke Hub ID Attribute. The hub lines
algorithm will go through each of earthquake points and create a line that
will join it to the populated place which matches the attribute we
specified. Click Browse and name the Output
Shapefile as earthquake_hub_lines.shp
. Click OK to start
the processing.earthquake_hub_lines
layer loaded in QGIS. You can see that each earthquake point now has a line
that connects it to the nearest populated place.This work is licensed under a Creative Commons Attribution 4.0 International License