QGIS Basemaps: The ULTIMATE Guide
Jun 9, 2025
Learn how to add basemaps from different services to QGIS. There are many freely available basemaps you can add to QGIS. These include satellite imagery, elevation, topography, and much more. Various maps are served via different methods. This tutorial demonstrates how to add basemaps to QGIS from several different services. Introduction to QGIS basemaps: https://youtu.be/_5Rc3tfFGmY Check out my website for more: https://opensourceoptions.com
View Video Transcript
0:01
Welcome to opensource options. Today I
0:04
want to show you uh the power that QGIS
0:08
has by pulling on public data for base
0:12
mapaps. And I'm going to show you how to
0:14
do this with a variety of different
0:16
styles of uh basemap services uh web
0:21
feature services
0:23
um raster services um fe
0:26
uh and then uh feature servers. We're f
0:30
we're focus on a day. Each one of these
0:32
has a little bit of a different way for
0:34
loading in the data. And each one has
0:36
some different functionalities once the
0:39
data are loaded in. So let's go ahead
0:41
and get started. To to start off, I just
0:44
want to show you how these are loaded in
0:46
QGIS. So if I go to my browser panel
0:49
over here, um you'll notice that I have
0:53
my file structure up here and then down
0:56
below I have these QGIS specific things.
0:58
I have base maps
1:00
in WMS, WMTS. I have base maps uh in XYZ
1:06
tiles. I showed you how to work with XYZ
1:10
tiles in the previous video. So, go
1:12
check that out. I'll link in the
1:13
description if you haven't seen it.
1:14
It'll give you the beginner's intro to
1:17
base maps and QGIS with Google satellite
1:19
imagery. And then I have WCS layers
1:23
here. Um these are web coverage
1:25
services. They're designed for raers.
1:27
they introduce additional functionality
1:30
over the web map
1:32
services. And then um down here I have
1:36
ArcGIS REST services. This is a feature
1:39
server. You can see we have feature
1:41
servers here. Um the particular server
1:44
I'm using does not work with the OGC
1:47
API, the Open Geospatial Consortium, but
1:50
it does work with the RGIS REST servers.
1:53
So, we're going to go through these, how
1:55
to add these, where to find some of
1:56
these. These are all over the place.
1:58
We're going to focus on the ones for the
2:00
United States that we can get to the
2:01
national map, but you can find these
2:04
anywhere. And it just might take a
2:06
little bit of trial and error to find
2:07
out which one of these services your um
2:10
base map fits into. Without further ado,
2:14
let's go ahead and get started. So, I'm
2:17
going to just search here um National
2:20
Map Services and let's pull this up. If
2:24
we go to the National Map TNM services
2:27
for the United States, this is
2:32
apps.nationalmap.govservices, it's going
2:34
to give us uh some things here. So, we
2:36
have base mapaps, we have things like
2:39
hydrography,
2:41
um imagery, autobo imagery only, shaded
2:44
relief. Okay, so we can all these
2:46
different things here. Uh we can come
2:48
down with a land cover. We have NLCD
2:51
canopy cover, land cover,
2:54
shrublands. Um and this is what I have
2:56
added in in QGS right now. So if I zoom
2:58
into an area here, let me just show you
3:00
some of these layers. Uh so load as we
3:04
get in closer. Let's just come into an
3:06
area down
3:09
here. And right now I have
3:12
on land cover 2008. Let's see how this
3:15
changes when I go to
3:17
2021. So, you can see we definitely see
3:20
some changes mostly in those uh urban
3:25
areas there. We can see some changes. I
3:28
can turn this off. And now I have uh
3:31
topography. You can see the topographic
3:33
contours here with an imagery uh
3:36
underneath it. Can turn that off. And
3:40
you'll notice that we have some uh
3:42
terrain shading here. I can turn that
3:45
off. And here we have elevation data.
3:50
And these elevation data are served as a
3:52
WCS. These others are served as WMS. And
3:57
we'll get into some of those differences
3:59
here. All right. You can see this is
4:01
being slower as far as the elevation
4:03
data go because we're actually loading
4:04
in some data we can work with here and
4:07
not just basically PNG images. For now,
4:11
let's remove all these and we'll go back
4:13
and add these in. So you can see how it
4:15
is done. So we'll remove all those. When
4:18
I go to my browser to start off,
4:23
um let's remove our MLCD land cover.
4:27
Let's remove that connection. And we'll
4:30
come and we'll add this back in so you
4:32
can see how it's done. Let's go back
4:34
over to our web map services. Let's come
4:37
to the NLCD. Let's get the land cover.
4:41
Now here we can just grab this WMS WMTS
4:45
link. If we click on this is going to
4:46
give us information an XML file. This is
4:49
what we need. We don't need the actual
4:51
file. We just need the link to it. So we
4:53
can come back here. NLCD land cover.
4:55
Right click on the WMS WMTS. Copy link
5:00
address. Let's go back to
5:02
QGIS. Go to our WMS WMTS layers.
5:06
Rightclick. We're going to new
5:09
connection. And I'm going to call this
5:12
NLCD land
5:14
cover. This is the national land cover
5:17
data set I believe is what it stands
5:19
for. I'm going to paste the URL. I'm
5:21
going to say okay. And now you'll notice
5:24
we have this added. I can open it up. It
5:27
will load up my geoerver web map
5:29
service. And inside of here I have NLCD
5:32
land cover. And inside of there I have
5:35
these different areas. Alaska, uh, the
5:37
contiguous United States, Hawaii, and
5:39
Puerto Rico. Go to Konis. Now, we can
5:42
add it in for any year. So, if I had the
5:44
most recent for 2021, we'll just drag
5:47
that in there. We'll take a minute to
5:49
load. So, there you have your national
5:52
land cover data set pulled into QGIS. We
5:55
can look at this for the whole uh,
5:58
contiguous United States. Uh, pull up
6:00
any area you want and it's just being
6:02
pulled in from a web service. So we can
6:05
look at that that uh land cover data. We
6:09
can't see any values. We can just see
6:10
the symbolization. We can go check out
6:12
the legends online. Okay. So we can do
6:15
this with any WMS
6:19
WTS web map. We can load that into QGIS
6:22
just as easily as that. Let's head back
6:25
over to um our services to see what else
6:29
we have. I'm going to close the land
6:31
cover. We're not going to load one of
6:33
these. These are the same thing WMS WMTS
6:36
layers we can add in. Let's take a look
6:38
at the WCS services which are the web
6:41
coverage services. These are for raster
6:43
data.
6:45
Um let's go ahead and grab this ArcGIS
6:50
server. I hope this is going to work the
6:51
way I think it is. Um let's copy the
6:54
link address and we're going to head
6:57
back into QGIS now. Okay. So, we want to
7:02
add WCS here. I want to add this
7:05
elevation layer back in. I'm going to
7:07
remove this
7:09
layer. Okay, let's just go check this
7:12
out again. So, we have the rgs.com. We
7:14
can also open this the rests here, the
7:16
rest services. See what that shows us.
7:18
You can see we have this here. Um, once
7:21
again, it's an XML file. Um, we'll try
7:23
to load this rgis server in the WCS
7:27
option. If that doesn't work, we'll try
7:29
the rest. uh option. Okay, so let's go
7:32
give this a try. So we just come to WCS,
7:35
we right click, we do a new connection,
7:37
and we'll just call this um 3D EP 3D
7:42
elevation program. And we'll paste in
7:45
our
7:47
URL. Okay, it's
7:49
rgx.com. Let's see how this works. Let's
7:52
say
7:53
okay. Okay, so it added in three
7:57
here and we don't have anything. So
7:59
that's not working properly. It should
8:01
show us some layers. So let's just
8:02
remove this connection. I'm show you
8:04
this so you can see what trial and error
8:06
looks like sometimes to load these
8:08
things in. Let's go back to the
8:09
internet. Let's copy the rest
8:13
service. Copy link address. And let's go
8:16
back to
8:17
QGIS. Let's come into
8:21
WCS new
8:23
connection.
8:26
Um URL. Paste
8:29
it.
8:32
And let's try
8:34
that. Now we have freed up in there
8:37
again. Looks like it's actually loading
8:39
something this time. We see the spinning
8:41
wheel. Hopefully we get some of these
8:43
services to pop up. There we go. Now we
8:45
have elevation, aspect, and
8:48
degrees, an aspect map, hillshade,
8:51
multiirectional. Okay, now let's show
8:53
you something cool we can do with the
8:55
elevation data. So let's go ahead and
8:57
pull this in. and we'll just pull in the
8:58
basic
8:59
elevation. And this is where you're
9:01
going to see the WCS differ from um the
9:06
WMS,
9:08
WMTS is we can adjust the symbology. So
9:11
you'll notice that took longer to load.
9:13
We can come in and we have our elevation
9:15
layer selected here in our symbology.
9:17
Now if I go to NLCD, you see that we
9:20
just have single band color data. We
9:21
can't we can't change anything here. If
9:24
I change to my 3D, we have all of these
9:27
styling options available again. So, we
9:29
can go to single band pseudo color and
9:31
it's going to it's going to color that
9:33
for us. We can change our color ramp
9:35
even. Um, so we can let's say we want to
9:38
do something
9:40
um I don't know what a good elevation
9:42
thing is. See if we can do something
9:43
like
9:45
um uh let's just try brown to blue
9:49
green. And when we zoom out, it's going
9:51
to command to load. We'll see these
9:53
color variations come across. So there
9:56
you go. You can see we can do some
9:58
custom styling with this. So that's the
10:00
difference you get with the WCS is it
10:03
brings in the ability to style these
10:06
layers. Um we're still not going to be
10:08
able to like pull up our value tool and
10:10
hover over this to see what the actual
10:12
values in the map are. Um but we do get
10:15
the styling
10:16
options. All right. Uh I'm going to turn
10:19
this off. Both of these. I'm going to
10:21
turn that one off because it
10:23
uh is a little more data intensive to
10:26
pull across. And now I'm going to add in
10:30
one more thing here just for some
10:31
context as we do the next one. So let's
10:34
come to
10:35
our let's go back to our services in the
10:39
internet. Let's go to our base maps.
10:41
Let's grab the USGS imagery only. I'm
10:45
going to grab the WMS WMTS. I'm going to
10:48
copy the link address by right clicking.
10:51
I'm going to go back to QGIS. I'm going
10:53
to right click here, new connection.
10:56
Going to name it USGS
10:58
imagery. Going to paste the URL and say
11:03
okay. So, we'll add that in. We have our
11:06
imagery here and we're going to pull
11:08
this
11:09
in. Okay. So, there we have some
11:11
imagery. I'm going to turn
11:15
off the national land cover data set.
11:17
Now, the final thing I want to show you
11:20
is um web feature services. Now, these
11:23
are really powerful. It's going to be
11:25
even slower than the WCS, but it's going
11:27
to be quite powerful. I have 3DHP, the
11:31
3D hydrography project loaded in here.
11:33
I'm going to remove this and add it back
11:35
in. Now, notice this is added under
11:37
ArcGIS REST services. It took me some
11:40
trial and error with the different
11:41
links. I wanted to add it under the W
11:43
the web feature services here, but I
11:45
could not get it to work. Okay, but
11:47
let's get rid of this and I'll show you
11:48
the differences here. So, let's remove
11:50
this
11:51
connection and let's go back into the
11:55
internet and let's see if we can find
11:57
this. So, web feature services, that's
12:01
what we
12:02
want.
12:05
And it's not here. So, theme overlays.
12:09
Did I miss it?
12:11
Oh, web feature
12:15
services watershed
12:18
boundary. I know it's here somewhere to
12:20
find this. We have theme overlays,
12:22
hydrography. Oh, here we go. It's going
12:23
to be in here. So, if we scroll down,
12:26
you see this 3D hydrography program
12:29
feature server. We have 3DHP and we have
12:32
the WMSWMTS option here. Um, and that's
12:36
going to give us uh just our map that we
12:40
can't do really anything with. If we
12:42
pull in a feature server, we can
12:43
actually have access to the features.
12:44
So, I'm going to copy this rgis.com
12:46
link. I'm going to copy this link
12:48
address and I'm going to come back to
12:51
QGIS and I'm going to come to my rest
12:54
server, my REST servers. So, any
12:56
publicly available arcs rest server, one
12:59
you have access to, you can add in here.
13:01
And so, I'm going to add this. I'm going
13:02
to call this uh
13:05
3DHP. Paste in the
13:07
URL and click
13:10
okay. All right. Now we have 3DP. Let's
13:13
see if we can get this to Oh, we had a
13:16
connection fail. So, let's remove this
13:19
connection. See if we can get this to
13:22
work. And we'll come back here. Let's
13:25
grab the the rest service and see if
13:29
this will work. Let's uh copy the link
13:32
address. Let's go back to
13:34
QGIS. Let's do a new
13:37
connection
13:39
3DHP. Let's paste in the
13:42
URL and let's click okay. It's added.
13:46
Let's see if this loads. There we go.
13:48
Now it's loaded in. So, you need the
13:49
rest service to add to the RGIS REST
13:52
servers. Okay. So, it's it gets a little
13:55
tricky sometimes getting all this
13:57
figured out. Okay. Now, I'm going to see
14:00
if this is going to work. There's this
14:02
is a new data set and it has some
14:04
issues. So, I'm going to try to add in
14:06
this flow line. I think we're going to
14:07
face some issues with it, but we'll give
14:08
it a shot. So, I'm going to pull in the
14:09
flow line and I'm going to go to layers.
14:12
And sure enough, you can see here that
14:15
it can't connect to that data source,
14:17
but I think we can connect to something
14:18
else. So, let's go ahead
14:21
and let's remove
14:25
this and let's go to the browser and
14:28
let's add in
14:32
um let's just add in like uh some hydro
14:36
locations for example like a headwater
14:40
terminus divergence something like that.
14:42
So, let's add that in. You can see we're
14:45
getting features added in here. Let me
14:46
just zoom into that
14:48
area. Let's grab the zoom tool and we'll
14:51
just zoom in
14:53
here. Okay. And these are going to load
14:55
in. Let's zoom into an even smaller
14:58
area. We can see some of these. Okay.
15:01
So, here we have a bunch of features.
15:03
Now, here's the awesome thing about
15:05
this. Um, we're still loading these
15:08
features in. So, I'm just going to pause
15:09
the video. I'm going to pull my pen back
15:11
up. We'll pause the video while these
15:12
finish loading so I can show you what we
15:15
can do with these web feature services.
15:18
That's that's really
15:20
powerful. Okay, so this is still
15:22
loading. There's a lot of data in here,
15:23
but we're going to try to do this
15:26
anyway. And I want to draw your
15:27
attention to something um real quick.
15:30
So, first, if I right click here, you
15:32
can see that I have the option to open
15:34
the attribute table. I'm not going to do
15:37
that because there be a ton of features,
15:39
but it is an option. We have an
15:41
attribute table that we can
15:43
open. I'm going to go ahead and select
15:45
some features from this layer. And this
15:48
is where the web feature service comes
15:50
into play. So if I get my select by
15:52
rectangle tool, I'm just going to come
15:54
and select a handful of these features
15:56
right here like this. Okay. And you can
15:58
see they actually are selected
16:00
now. And what I can do is I can even
16:04
perform operations with these. So I can
16:05
come and I can right click here and I
16:07
can export these data and I can do save
16:09
features as and I'm going to save them
16:15
um to a geo
16:17
package
16:19
and let's see we have to find a location
16:22
for these
16:24
um which we can just make this a test
16:27
geo package here
16:30
um we'll call this test 3DHP
16:34
and we'll save it
16:36
there. And I can add this to the map.
16:39
So, I'm going to just save these. Say,
16:42
okay. Once that exports, it's going to
16:44
take a minute. We have a lot of data
16:46
here. Um, we'll be able to save these
16:50
features out of this massive data set
16:53
into something that we can use locally
16:55
if we want to. So, I'll just pause this
16:58
while that finishes the export so we can
17:00
work with this data a little bit more.
17:02
Okay, so we've exported those data. I'm
17:04
going to clear the selection now. And
17:07
I'm going to turn off my hydro
17:09
locations. Oh, it selected way more. It
17:12
didn't just Oh, I realized what I did. I
17:15
didn't export only the selected
17:16
features. I exported all features. So
17:18
that's why we have all these features.
17:19
Why it took so long to export um
17:22
exported all the features. Anyway, um we
17:27
can I'm going to get rid of this before
17:29
I before I do something wrong. So, let's
17:32
remove that layer. Okay, let's go back
17:34
and do this the right way. Now, we'll
17:35
turn this back on and I'll turn my
17:37
selection back on and we'll grab a
17:39
handful of features and I'll right click
17:41
here and I'll export. I'll save features
17:45
as. We'll save it to a geo package and
17:48
we'll save it into this one. And we'll
17:52
call this um a few
17:55
features. And now we'll click save only
17:58
selected features. And now we'll say
18:01
okay. And this will export much more
18:02
quickly. And now I can clear my
18:05
selection here. And I'll turn off the
18:07
web feature service. And you can see I
18:09
have that handful of features there. And
18:11
when I open the attribute table, you can
18:14
see that I have features in here. A lot
18:16
of these are null. Like I said, this is
18:17
a new data set. It's not fully populated
18:19
yet. But we have all the attributes that
18:22
are available in the parent data set.
18:24
And let's turn this back on. If I right
18:28
click here, let's open the attribute
18:29
table. This is Oh, it didn't take too
18:31
long. Good. But you can see here that we
18:34
have all these features in the XE table.
18:36
We can interact with this. We have them
18:38
all here. We can select things here. Um
18:41
so if I come back and select some
18:43
features again over here and then I open
18:46
the attribute table
18:48
here by right clicking now I can change
18:52
this to show selected features and I
18:55
have just those features I've selected.
18:57
All right so you can see how powerful
18:59
these web map services can be um and how
19:02
we can use them as base maps to serve
19:05
them over the web. how we can pull in um
19:08
web coverage services for raster that we
19:10
can then symbolize. Uh there's a lot we
19:12
can do with these. So if you want to
19:14
learn more about QGIS, go check out open
19:16
source options.com. Um I don't have the
19:19
courses there yet. I promise I'm working
19:21
on developing some courses that are
19:23
going to be free. They're going to be
19:24
free GIS courses on opensource
19:27
options.com. Go over there. You can
19:28
enter your email to be notified as soon
19:30
as those courses become available. Um
19:32
and there's also additional trainings on
19:33
the website. Thanks for watching. I hope
19:35
you found this useful and go out there
19:38
and make some maps.