# Performing Multicriteria Analysis using QGIS?

I have to do a multi-criteria analysis to answer the question : "which is the best lot to develop".

A few of the criterias are :

• distance of the nearest bus stop (point layer with bus stops)
• distance of the nearest shop (point layer with shops)
• what is the flood danger (polygon layer, with danger grade attribute from 1 to 4)
• is the lot in a nature-protection area (polygon layer)
• is the owner already planning something on his lot (manual entered information in the lot's attributes) and so on...

I thought I'd give it a try with QGIS, and here's how I've done :

1. add the following columns in my lots layer attributes table :

• "analysis_BUS"
• "analysis_SHOPS"
• "analysis_FLOOD"
• "analysis_PROJECT"
• "..."
• "analysis_MEAN"
2. Convert my lots layer to points using "polygons to centroids"

3. Run the "distance matrix" tool

4. Open the CSV to run an operation in excel (bus stop grade is 1.0 if nearer than 200m, and 0.0 if more than 750m, but I coulnt find the MIN() function in QGIS)

5. Join the resulting CSV back in QGIS

6. Repeat the same for shops

7. Run the "point in polygon" tool to select all the points in nature-protection area

8. Set 0.0 to all selected points

9. Repeat for other "in ... area" criterias

10. Run the "spatial join" tool to merge flood danger area information

11. Run a calculation using the column calculator to have the mean grade (using determined factors for each criteria)

12. Once all that done, re add the BUILDING LOTS shapefile once for each criteria

13. For each criteria, join the converted layer (that one with the centroids) on the LOT id

14. Set the display to a gradient from red to green according to the corresponding criteria attribute and the mean grade attribute

Now, after a good 2 days of work, i now have all my criterias displaying in green if good choice for building, and red if bad choice, and I have my synthesis which aggregates all my criterias in one beautiful red-green map. (and I also have a huge mess in my "shapefiles" folder)

Now the problem.

What if :

• i'd like to try the same analysis with another bus network scenario ?
• i receive an updated lots shapefile (with, let's say, 13 modification in all the 13000 lots)
• i'd like to test different weights for my criterias ?

Do I have to start all over again ?

Am I correctly using the wrong tool, or am I using the correct tool wrong ?

Would it be easier with a commercial GIS software ?

I see what answerers/commenters mean, and i didn't really think of using rasters.

However, the main question was more about the ability to try different scenarios or update the base data without having to restart all the process from scratch.

It seems that your suggestions are not much more flexible than what I suggested (even maybe more complex) since you have news steps : - (for each criteria) rasterization. - (in the end) sampling (quite complex if you want to include partial overlaps)

That Sextante Model builder seems awesome; in fact I was exactly thinking at something like that when posting my last comment.

I've used Grasshopper3D quite alot (it has nothing to do with GIS software) which is a great plugin for the Rhino3D modeler and which uses the same concept of node graph workflow construction. (example : http://designreform.net/2009/07/rhino-grasshopper-parametric-truss )

This seems so well adapted to a lot of GIS data analysis that I'd love to see a GIS software really built around such a node graph tool.

I'm looking forward to try Sextante Modeler and let you know how it worked out. I wish i had found about it by myself by googling it, but i didn't know the keyword "model builder".

• Re the update: There may be a valid point here, but the latter part of it appears--pardon me for saying so--to confuse the operator's abilities with the capabilities of the software. There are many active members of this community who can provide you excellent, seasoned advice about automating your procedures. I suspect most of them haven't even read through the entire question: it's long and most of it is not relevant to what you really want to know. Why don't you reread our FAQ about how to ask good questions and edit this one accordingly? Commented May 23, 2012 at 16:22
• Did a multi criteria analysis a few years ago. Wrote up a blog post on it. Might be useful for you. thadwester.com/1/post/2011/02/power-of-gis.html
Commented May 29, 2012 at 19:18

I would suggest a raster approach with one raster layer for each criterion:

• bus quality (distance from pixel center to the nearest bus stop)
• shopping quality (distance to the nearest shop)
• flood danger (rasterize polygon layer, with danger grade attribute from 1 to 4)
• protection area (rasterize polygon layer)

Then you can combine and weigh the layers according to your needs and sample them at whichever lot location you are interested in.

However, the main question was more about the ability to try different scenarios or update the base data without having to restart all the process from scratch.

If you have a new scenario, say "different bus network", you just need to recalculate one raster (the bus raster) and let the combination run again. That's only two interactions.

Also, once Sextante model builder is stable, it should be possible to build a model to automate all steps. You could even test it now.

• This approach then allows you to add weights as you need simply by multiplying the rasters by a weight (0-1) Commented May 23, 2012 at 7:43
• Agree with using the raster approach. Also once you figure out your workflow, you can automate your entire process using GRASS commands that you can run with different inputs. grass.osgeo.org/wiki/… Commented May 30, 2012 at 5:16

Like iant said, raster with map algebra might be the easiest way to go.

From my experience, after converting all your input data in raster, you should do some reclassification, with two different types: Factors and Conditions

Factors will rage between a min and a max values, from less desirable values to more desirables values (you sould use the same range of values for all of them), example:

F1 - BUS distance: 1 - very far away; 2 - far away; 3 - close; 4 - very close

F2 - flood danger: 1 - very high; 2 - high; 3 - low; 4 - very low

The conditions will be binary raster only with zeros and ones (not suitable, suitable), example:

C1 - Protected area : 0 - yes; 1 - no

For each of the factors you should give a weight, according to the importance you think that factor have in your decision, say: Bus distance W1 = 0,4 and flood danger W2 = 0,6

In the end using map algebra, all you have to do is:

(C1 x ... x Cm) x (W1 x F1 + W2 x F2 + ... + Wn x Fn)

After the first result you probably will need to adapt weights or even factor values, as multicriteria analysis is most of the times a highly subjective analysis.

There has been an MCDA add-in developed for ArcGIS 10.1.

The add-in supports the following multi-criteria methods: Weighted Linear Combination (WLC) Ordered Weighted Averaging (OWA) Local Weighted Linear Combination (LWLC)

http://mcda4arcmap.codeplex.com/

See also: Multicriteria Decision Analysis (MCDA) support in GRASS GIS at http://grass.osgeo.org/wiki/MCDA_in_GRASS

There is a set of dedicated Addons available for GRASS GIS 6: ELECTRE (r.mcda.electre), REGIME (r.mcda.regime) and FUZZY (r.mcda.fuzzy) algorithms. Furthermore there is the module r.roughset used for geographical rough set analysis and knowledge discovery.