GIS & Geospatial Data (QGIS, GeoPandas, PostGIS) Module 4
QGIS desktop interview questions
Interview questions on QGIS desktop: short warm-ups, then what each harder question tests, the first step of a good answer and its follow-ups.
Warm-up questions
Short questions with short answers, each answered in full.
-
Fresher
What is the difference between the project CRS and a layer's CRS in QGIS?
Answered in the lesson QGIS setup: LTR or latest, and the interface
-
Fresher
What is the difference between a categorised and a graduated renderer in QGIS?
Answered in the lesson QGIS symbology, classification and labels
-
Fresher
What does NULL mean in a QGIS expression, and how do you find it?
Answered in the lesson QGIS attribute tables, joins and expressions
-
Fresher
What is the difference between an invalid geometry and a topology error in QGIS?
Answered in the lesson Digitising, topology and georeferencing
-
Fresher
What is the difference between a batch run and a model in QGIS Processing?
Answered in the lesson Processing toolbox, batch runs and models
-
Fresher
What does an atlas do in a QGIS print layout?
Answered in the lesson Print layouts, atlases and map design
-
Fresher
What is the difference between PyQGIS in the Python console and in a standalone script?
Questions with model answers
What each question tests, the first step of a good answer and the follow-ups to expect.
-
Mid to senior
A state agency wants one QGIS version on 200 desktops for the coming year. Two in-house plugins were written for QGIS 3, and one analyst wants a feature that only QGIS 4.2 has. Which version do you recommend, how do you roll it out, and what would change your mind?
- What it tests
- Understanding QGIS's release cycle and long-term releases, what the move to Qt6 means for plugins, and how to plan a version for many machines without blocking the people who need newer features.
- First step
- Separate the fleet from the exception. The plugins decide the fleet: QGIS 4 loads a plugin only when its metadata allows QGIS 4, so check both plugins on 4.2 before anything else. The analyst's feature is one machine's need, which a second installed version can meet.
- Follow-ups
-
- The plugins turn out to load on 4.2 after small changes. Does that change your recommendation?
- How do you keep 200 desktops on exactly one build?
- What do you do when 4.4.4 becomes the long-term release?
From the lesson QGIS setup: LTR or latest, and the interface
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
-
Fresher to mid
A colleague's map of households per ward uses QGIS's default quantile classes. The legend reads 126 - 198.75, 198.75 - 359.5, 359.5 - 474 and 474 - 1,169, and readers complain that it looks careless. Explain where the decimals come from and how you would fix the map without hiding anything.
- What it tests
- Understanding how the quantile method places breaks, why counts get fractional limits, and how to choose and label breaks that readers can trust and quote.
- First step
- Sort the 12 counts and look at where the first quantile break falls: between the third and the fourth ward, 183 and 204 households. A break that falls between two counts is a fraction, so a legend of whole counts shows decimals.
- Follow-ups
-
- Why not just set the legend's precision to 0?
- When would you keep quantile classes anyway?
- The map will be compared with next year's. Does that change your choice?
From the lesson QGIS symbology, classification and labels
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
-
Fresher to mid
A district health officer's map colours zones by the number of fever cases. The largest zone is darkest, and the officer plans to send more staff there. What would you check before anyone acts on the map, and what map would you make instead?
- What it tests
- Recognising that a choropleth of raw counts mostly shows area or population, knowing how to normalise, and choosing a denominator that matches the decision.
- First step
- Put each zone's area, and if possible its population, next to its count. A zone four times larger can have the most cases and the fewest per person, so rank the zones by count and by rate and see whether the order changes.
- Follow-ups
-
- Should you divide by area or by population here?
- Two small zones have very few people, and their rates jump around. What do you do?
- How would you show both the count and the rate on one map?
From the lesson QGIS symbology, classification and labels
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 2 minutes
-
Mid to senior
Your team styles layers in QGIS, and a web map server must draw the same layers for the public. After the first export, the public map does not look like the QGIS map. How do you work out what changed, and how do you keep the two in step?
- What it tests
- Knowing what QML and SLD each keep, how styles change on export, and how to build a workflow that checks the exported style in the program that draws it.
- First step
- Load the exported SLD back into a fresh QGIS layer and compare it with the QML, setting by setting: the renderer, the classes, the label sizes, the halo and the opacity. Then render the server's map and QGIS's at the same scales, side by side.
- Follow-ups
-
- Why not send the QML file to the server instead?
- How do you stop the two styles drifting apart over months of edits?
- What do you check on the server itself before publishing?
From the lesson QGIS symbology, classification and labels
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 2 minutes
-
Fresher to mid
Two analysts calculated households per square kilometre for the same 12 wards in QGIS, and their columns differ slightly on every ward, by about 0.04 %. Neither made a typing mistake. What do you look for, and which value would you publish?
- What it tests
- Knowing QGIS's two families of measuring functions, which project settings they depend on, and how to choose and document the measure a published number uses.
- First step
- Ask for both expressions and both projects' settings. One analyst probably divided by $area, which measured W08 on the WGS 84 ellipsoid as 4,001,752.60 m², and the other by area($geometry), the planar 4,000,000 m² on the UTM grid: 84.96 against 85.00 households a square kilometre.
- Follow-ups
-
- The same check on a layer stored in degrees gives a much larger difference. What do you suspect?
- How do you stop the same thing happening in the next report?
- When would you publish the planar value?
From the lesson QGIS attribute tables, joins and expressions
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 2 minutes
-
Fresher to mid
A state dashboard joins clinic visits to districts by district name. QGIS reports most rows joined, yet the state total is higher than the source table's, and one district shows no visits at all. Diagnose it and design a join you would trust.
- What it tests
- Recognising duplicate and mistyped keys in a table join, checking a join by counts and totals, and replacing names with official codes or a crosswalk.
- First step
- Compare the joined total with the source total, then look for names that occur more than once on either side, such as the two Bilaspurs of Chhattisgarh and Himachal Pradesh, and for names that differ only by spaces or letter case. A first-match join gives a repeated name one row's values twice.
- Follow-ups
-
- The visits table has no codes. What do you do?
- Why not use one-to-many and add up the rows?
- What checks would you run on every refresh of the dashboard?
From the lesson QGIS attribute tables, joins and expressions
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 2 minutes
-
Fresher to mid
You add a field total = "adults" + "children" to a survey layer of 300 households with the field calculator. 40 rows come out NULL, and the layer's sum of total is lower than the sum of adults plus the sum of children. Explain, and fix it without hiding real gaps.
- What it tests
- Understanding how NULL spreads through QGIS operators, the difference between a missing value and zero, and how to find and report rows that a calculation could not handle.
- First step
- Select the 40 rows with "total" IS NULL and look at their inputs. In QGIS any operator with a NULL gives NULL, so a household with adults recorded and children missing gets no total at all, and the layer's sum skips it.
- Follow-ups
-
- Would coalesce("children", 0) be right here?
- How do you show the result honestly in a report?
- The same field in a GeoPackage SQL query also gives NULL. Is everything else the same in SQL?
From the lesson QGIS attribute tables, joins and expressions
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 2 minutes
-
Fresher to mid
Three interns digitised a city's 120 wards from a scanned plan. The wards' areas add up to almost exactly the city's official area, so the team lead wants to publish. What would you check first, why is the total not enough, and how would you organise the next digitising round?
- What it tests
- Knowing that area totals hide errors that cancel, the order of validity and topology checks, safe repairs, and a digitising setup that prevents slips.
- First step
- Do not trust the total: a gap takes area away and an overlap adds it, so the two can offset. Run Check validity first, because Processing's gap and overlap checks refuse invalid input, then run those checks and count what they find.
- Follow-ups
-
- Check validity reports 3 bow-ties. Do you run Fix geometries on them?
- The gap check finds 400 slivers under 1 m². Do you fix them all by hand?
- What would you set up in QGIS before the next round of digitising?
From the lesson Digitising, topology and georeferencing
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 2 minutes
-
Mid to senior
A colleague georeferenced an old district map with a third-order polynomial on exactly ten control points and proudly reports an RMSE of 0.00 m. Roads drawn from it miss the GPS tracks by hundreds of metres in places. Explain what happened and how you would georeference the map instead.
- What it tests
- Understanding residuals and RMSE, why exact fits are not accurate fits, the role of check points, and choosing a transformation and a point layout for a scan.
- First step
- Count the unknowns: a third-order polynomial has ten per coordinate, so ten points determine it exactly and leave no residual to see. Then measure a few independent points that the fit never saw, and compare their errors with the GPS tracks.
- Follow-ups
-
- How would you compare Polynomial 1 with Polynomial 3 on this map?
- When is a thin plate spline the right choice?
- What would you write into the result's metadata?
From the lesson Digitising, topology and georeferencing
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 2 minutes
-
Fresher to mid
Four field teams digitise land use into copies of one GeoPackage. When the copies are merged, the land-use column holds 14 different spellings of five classes, some points have no surveyor, and point numbers repeat. How would you prevent this in the next survey, and what would you still check after merging?
- What it tests
- Designing attribute rules with field domains, form widgets, constraints and default values, and knowing where each rule is enforced and where it is not.
- First step
- Put the rules into the data the teams receive: a coded field domain for land use, so QGIS gives every copy the same value list in its form, then constraints for a unique point number and a required surveyor.
- Follow-ups
-
- Where is each of these rules enforced?
- Which rules would you make soft rather than hard?
- How do you clean the 14 spellings already collected?
From the lesson Digitising, topology and georeferencing
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 2 minutes
-
Fresher to mid
Two analysts ran the same monthly coverage analysis by clicking through QGIS dialogs and got different answers from the same data, and last month's number cannot be reproduced at all. How would you find the cause, and how would you make the analysis repeatable and checkable from now on?
- What it tests
- Knowing where QGIS keeps the settings of a run, turning a chain of dialogs into a model, keeping run records, and telling a repeatable answer from a right one.
- First step
- Compare what each analyst actually ran before comparing results: the parameters of every step, from the Processing history or Advanced ▸ Copy as JSON, and the QGIS version. One value left at its default by one analyst and typed by the other is enough to change a count.
- Follow-ups
-
- One analyst uses the long-term release and the other QGIS 4.2. Does that matter?
- The model now gives the same answer every month. How do you know it is the right one?
- What exactly do you hand over to the next analyst?
From the lesson Processing toolbox, batch runs and models
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
-
Fresher to mid
A batch run reprojected 40 field-survey files to UTM zone 43N without a single error, yet on the map one team's 379 points sit on the equator, about 2,000 km south of the town. Explain what happened, how you fix that file, and how you would catch the same slip automatically in next month's batch.
- What it tests
- Recognising coordinates of one CRS labelled as another, the difference between assigning and reprojecting a CRS, and checks that verify every output of a batch.
- First step
- Read the bad output's extent and compare it with the town's: coordinates that small cannot be eastings of this town. Then compare what the source file's label says its numbers are with what the numbers look like.
- Follow-ups
-
- Why did the batch report success?
- Why not reproject that file again, from the CRS it should have had?
- Which checks would you run on every input and every output?
From the lesson Processing toolbox, batch runs and models
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
-
Mid to senior
District officers who do not write Python must run the clinic-coverage analysis themselves, and the same analysis must also run every night on a server and publish a table. What would you build and hand over, and how would you make sure the officers' runs and the server's runs give the same answer?
- What it tests
- Choosing between models, batch runs, qgis_process and scripts for different users, running a model without a window, and controlling versions and inputs so that two environments agree.
- First step
- Build one model, not two tools: a .model3 file whose layers and distance are inputs. The officers run it from the Processing toolbox, and the server runs the same file with qgis_process --json, keeping each run's record beside its table.
- Follow-ups
-
- The server has a different QGIS version from the officers' desktops. What do you do?
- An officer reruns it at 2,000 m and shares the table. How do you keep published numbers honest?
- How do you test the model before you hand it over?
From the lesson Processing toolbox, batch runs and models
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
-
Fresher to mid
A 36-page block atlas came out of QGIS with the same whole-district map on every page, though each page's title names the right block. What went wrong, how do you fix it, and how would you check the next atlas before anyone prints it?
- What it tests
- Understanding which layout items follow the atlas feature and which do not, the map's atlas settings, and checks that cover every page of an atlas.
- First step
- Open the map item's properties. Labels read the atlas feature on their own, which is why the titles changed, but a map follows the feature only when Controlled by atlas is ticked; with it off, the map keeps its own extent on every page.
- Follow-ups
-
- The map moves now, but some blocks touch the frame's edge. What do you change?
- How do you check 36 pages without opening each one?
- The office wants one PDF per block. How do you name the files?
From the lesson Print layouts, atlases and map design
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
-
Fresher to mid
A colleague's draft map page has the title "Map" in small text, a legend titled with the field name hh_cnt, a scale bar in metres from 0 to 4,000, grey ward labels on dark blue wards, and no credits. Review it: what would you change, in which order, and how would you check each change?
- What it tests
- Applying visual hierarchy to a page, choosing legend and scale-bar wording for readers, measuring label contrast, and knowing that credits belong on the page.
- First step
- Start with what the page must say. Rewrite the title as the finding and make it the largest text, because every other choice follows from it; then fix what a reader needs to read the map: the legend's words and the scale bar's units.
- Follow-ups
-
- How do you prove that the labels can be read?
- The labels fail on the darkest class only. Do you change the classes?
- Where do the credits go, and what do they say?
From the lesson Print layouts, atlases and map design
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
-
Mid to senior
Your team will publish ward maps as PDF files on a public portal, exported from a QGIS atlas. Beyond how the pages look, what do you check in the files before they go up, and how would you check all of them at once?
- What it tests
- Knowing what an exported PDF carries besides the drawing, such as text, metadata and point locations, and checking exports by their content rather than by eye.
- First step
- Open one PDF's properties and try to search its text. An export can carry a name you never meant to publish and text that cannot be found, so fix the causes in the project and the export settings, not file by file afterwards.
- Follow-ups
-
- Why should the text be text objects, not outlines?
- One layer shows individual households as points. What do you do?
- How do you compare this month's PDFs with last month's?
From the lesson Print layouts, atlases and map design
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
-
Mid to senior
A nightly PyQGIS report has written all 12 ward PDFs every night for a month, yet the scheduler marks every run failed with exit code 139. Nobody has found anything wrong in the files. What is most likely happening, and how do you make the job's exit code trustworthy?
- What it tests
- Reading exit codes and signals, the shutdown of a standalone PyQGIS script, and designing a scheduled job whose exit code and checks say whether its output can be trusted.
- First step
- Decode the number first: a shell reports 128 plus the signal's number, so 139 means signal 11, a segmentation fault. The files are complete every night, so look at what the script does after its work, at the very end.
- Follow-ups
-
- Why not tell the scheduler to accept 139?
- How should the job report a real failure, such as a missing input?
- The job now exits with 0. How do you know the report is right?
From the lesson Automating QGIS with PyQGIS
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
-
Mid to senior
A PyQGIS script counts 2 million address points per district by looping over every point and testing it against each of 300 districts. It runs for hours. How would you make it fast, and how would you show that the fast version gives the same counts?
- What it tests
- Using feature requests and spatial indexes, choosing a Processing algorithm over a hand-written loop, reading only the fields a task needs, and checking a rewrite against the old answer.
- First step
- Count the work first: 2 million points times 300 districts is 600 million geometry tests. Most of them test a point against a district nowhere near it, so let an index do the rejecting: a request per district that starts from its bounding box, or Count points in polygon, which does the whole join in one call.
- Follow-ups
-
- Some addresses lie exactly on district boundaries. What happens to them?
- Would GeoPandas be faster for this?
- How do you test that the new counts equal the old ones?
From the lesson Automating QGIS with PyQGIS
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
-
Mid to senior
Your team's in-house QGIS plugin must keep working for analysts on the long-term release, QGIS 3.44, and on QGIS 4.2. What do you change in its code and its metadata, and how do you test it before you release it?
- What it tests
- Knowing what the move to Qt6 changed for plugins, the metadata that lets QGIS 4 load a plugin, and a test plan that covers both versions.
- First step
- Start with the metadata, because QGIS 4 will not load a plugin whose metadata.txt has no maximum version that allows it: set qgisMaximumVersion=4.99. Then find the spellings that Qt6 dropped, such as unscoped enumerations, with the migration guide's pyqt5_to_pyqt6 script run on a Qt6 QGIS.
- Follow-ups
-
- Which spellings break on QGIS 4, and which keep working?
- Should the plugin be published in the official repository?
- How do you test on both versions without installing two QGIS on every laptop?
From the lesson Automating QGIS with PyQGIS
Model answer, Pro.In the answer:
- Model answer
- Follow-up answers
- Common mistakes
- Rubric
- Variants
- about 3 minutes
All GIS & Geospatial Data (QGIS, GeoPandas, PostGIS) interview questions · The GIS & Geospatial Data (QGIS, GeoPandas, PostGIS) track