Thursday 25 October 2018

raster - 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".




No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...