Together with Asia Air Survey we’ve developed MOLUSCE (Modules for Land Use Change Simulations) – a new tool based on QGIS that allows to perform quick and convenient analysis of land cover changes.

A researcher who analyses changes in landscape through time often deals with questions like:

- What are the changes and where did they happen?
- Which factors can explain the changes and strong is their explanatory power?
- What changes are expected in future and where?

The answer for the first question can be obtained by visual estimation, but to answer other questions one will need to set hypothises, verify them, derive conclusions and see how they meet the reality.

MOLUSCE is a toolbox to partially automate the process of answering such questions.

Briefly, the workflow consists of the following steps:

- Obtain landcover map for few time slices and a set of potential explanatory variables;
- Calculate probabilities of transitions from class to class;
- Build a model using ANN, logistic regression, Weights of evidence or Multi-criteria evaluation to describe transitions based on factor variables;
- Use this model for forecasting;
- Validate the result with real data.

Find more information in GIS-Lab article (Russian, autotranslated).

Hello. My name is Ana.

I’m working with maps of land use and land occupation. I’m trying to use the molusce but always appear errors saying that the geometry of the selected components do not match.

Would you help me?

Thank you very much in advance.

https://github.com/nextgis/molusce/issues/10

There is a graph at above figure on x and y. I knew that x-ordinate showed iteration. How about y-ordinate?

This graph shows changes of errors during the training process (one line presents training set errors, the second line presents validation set errors). The errors are measured as mean squared errors for all transition classes.

There is also a plot on Validation page where “Error Budget” technique is used for validation (see the article http://www.econgeography.org/~rpontius/pontius_suedmeyer_2004_rsgisaa.pdf). More technical details about validation are presented here: http://wiki.gis-lab.info/w/Landscape_change_analysis_with_MOLUSCE_-_methods_and_algorithms#Validation

Hi,

I am a PhD Student and I am working on land use and land cover changes. I am trying to use MOLUSCE plugin for the land-use simulation but I couldn’t find where to enter the exact year for which I am interested in predicting. It ask for initial and final year at the first step, but I am not sure for which year the simulated map is for.

Thank you for your help.

Hi Claudia, target year is year_after + year_diff, where year_diff = year_after-year_before

So if your data is for 2005 and 2010, than the prediction will be for 2015.

Hi Maxim, thanks for the answer.

Just another question, at the windows ‘Cellular Automata Simulation’ we have the option ‘Number of Simulaton iterations’. It means if I put 1, it will be project into the future only once. For example, If the data is for 2005 and 2010, it will be project into 2015. In case I change the ‘Number of Simulation iterations’ to 2, it will be project into 2020???

Thanks for your help and congrats for the plugin.

correct

Maxim, was any paper published about the MOLUSCE plugin? I need a reference to include in my paper.

Thanks

I believe so, but we’re not tracking citations. Just Google it and let us know here what you found.

Hi,

I would like to use the MOLUSCE plugin to forecast land use. I am not sure if the plugin uses Monte Carlo Cellular Automata, CA Markov Chain, or only Cellular Automata aproach to to forecast land use.

Could you please just clarify which approach is used to predict? If it uses Monte Carlo simulation, how many iteration is used?

Regards,

Andre Santos

Hi Andre,

thank you for the important question.

MOLUSCE realization is cellular-like approach, but it isn’t classic cellular automata. Classic realizations of cellular automata are rule-based (e.g. “if current pixel is forest and at least six neighbours are pasture, then new state is pasture”). MOLUSCE realization does not use explicit user-defined rules; instead it uses models (such as ANN) that make prediction of the probabilities. (For example, an ANN takes states of the current pixel and it’s neighbourhood, then updates state of the pixel using information encoded in the neighbourhood pixels. All rules are implicit and received during the ANN fitting procedure.)

So MOLUSCE uses the following simulation logic:

For every transition class (for example forest -> pasture) perform steps 1-3.

1. Find number of pixels that have to be changed (forest -> pasture). The count depends on transition probabilities.

2. For every pixel calculate transition potential using trained model. The potential depends on the model, current state of the pixel and its neighbours.

3. Find pixels with the highest transition potentials and change their state.

Hi Dmitry,

Thank you very much for the detailed explanation.

Can I conclude that the method use a combination of three approach (Markov transition probability, artificial neural network and Cellular automate) to predict future land use change?

Regards

Hi Andre,

Really I don’t know because terminology is quite ambiguous. I’m not sure that we using the same terms. So I can’t say simple ‘Yes’ or ‘No’, but I have to explain in more words. Sorry for the wordiness.

Yes, you are right in general: MOLUSCE uses a combination of three approaches. But below are presented some details.

The predictions/simulations are done using the next procedure:

1.

Get Transition Probabilities.Get two rasters (Init-State -> Final-State). For every pixel in Init-State-raster find corresponding pixel in Final-State-raster and update lookup table:```````| Class1 | Class2 | ... | Class N

-------+--------+--------+-----+--------

Class1 | n_11 | n_12 | ... | n_1N

.......| ... | ... | ... | ...

Class N| n_N1 | n_N2 | ... | n_NN

where n_ij is the number of pixels that changed their class (Class i -> Class j). Finally we can calculate frequencies using the counts and use the frequencies as the transition probabilities.

2.

Model Training.Second step trains a model for predicting the transitions between classes. This step doesn’t uses transition probabilities, it tries to find appropriate model for every transition Class i -> Class j. (The model uses user-defined predictors and window of user defined size). Initially the training procedure creates some random points for sampling. For example if the user gives 2 predictor (say, elevation and annual temperature) and uses 3×3 window, then the training procedure uses 27 dimensional vector of input variables for every sample: 9 neighbors in Init-State-raster + 9 neighbors in elevation raster + 9 neighbors in temperature raster and K output variables (we use dummy encoding for the transitions). Then we train a model to predict transition Class i -> Class j (molusce has 4 modes, not ANN only).3. The simulation procedure I described in the previous note.

So finally:

* The transition probabilities are Markovian because they are depend on current state only (state number L) and don’t depend on on previous states (L-1, L-2, …).

* But the transitions Class i -> Class j depend on probabilities AND the predictors AND the current class of pixel AND the neighbors AND the trained model.

In other words, if we define state of the system as the tuple

`STATE == (the current class of pixel, the neighbors, the predictors, the trained model),`

then we can say that the process in Markovian.

Hi

I am trying to use molusce for land use prediction. For this I will have many explanatory variables/ factor maps like distance to road, distance to river, slope and land use type. So my question how should be the factor map be like? For example for distance to road and distance to river variables if their factor maps are merely rasters with distance values then how to indicate that distance close to road has more suitability for urban growth but on contrary suitability for urban growth increases with distance in case of distance to river.

This is not how it works. Transition probabilities are determined from land-cover data, you can’t assign probabilities yourself.

Hi

Thank you for your kind response. I still have few questions regarding explanatory variables/factor maps:

1. As i mentioned before i have many explanatory variables. I prepared all of them in the range of 0-1 ( 0 meaning low and 1 meaning highly suitable). For example for distance to road i obtained a raster representing distance to road then applied fuzzy membership with linear decreasing function (so that close region to road would get 1 and the value decreases linearly) in arcgis to obtain the range 0-1. Then i used it in molusce as factor map. I did similar to other factors as well obtaining 0-1 range. So is it the right way of preparing factor map or not. If not could you explain how should they be prepared

2. Is it possible to impose constraint. For example i dont want certain reserved areas in my area of interest to undergo land use change in the simulated model.

1. This is one way to approach this, yes.

2. Just exclude areas you don’t need from the source rasters and patch them back later (nodata mask).

Also, I wasn’t totally correct about your initial question. Multi-criteria evaluation method allows you to weight variables. Read more here (but we used modified version): https://en.wikipedia.org/wiki/Analytic_hierarchy_process

Hi.

I am trying to use MOLUSCE to model the land use change.

When I tried to create changes map, the error showed up:

AttributeError: ‘NoneType’ object has no attribute ‘save’

Could you please tell me what is going on? I’m new to GIS…

Best,

Mark

I solved the problem.

Thank you

Hi Mark

How did you solve the problem? I am trying to run Molusce and the same error appears in the stage of “Automata cellular simulation”

An error has occurred while executing Python code:

AttributeError: ‘NoneType’ object has no attribute ‘SetProjection’

Thank you in advance

Best

Laura

Dear Sir/Madam,

Thank you for your helpful plug-in. I have found, that in the manuals explanatory variables are discussed regardless the date of “output” and “input” data. But in case I have multitemporal explanatory rasters available for the same dates, as “input” and “output” rasters (for example, input and output rasters – land use from satellite imagery, explanatory variables – vegetation indices from the same imagery), should I use vegetation indices from “input” or “output” rasters?

Dear MOLUSCE users

I’ve been surprised when I knew this plugin, I was exhaustively struggling with IDRISI Selva to project the future land cover but ended without success.

Now I’ve started using MOLUSCE to overcome my MSc thesis. Many thanks to MOLUSCE developers and providers for this much worthy plugin!!!

==> the problem I found in MOLUSCE is the time taken to complete “transitional potential modeling” part. my study area covers 11,500 km2 and I’m using landcover maps of 2010 & 2013 to validate 2016 with associated variables, like distance from road, distance from earlier disturbances, and DEM @ 30-meter resolutions. It takes a half of a day in training the neural network, then I stopped the process and reduced the resolutions of all input datasets to 120-meter and started the again. But still, the process is running for about 2 hours. Is that the correct way to go through?

Thank You Very much!

am trying to run the tool and i get the following challenges

does not calculate class statistics as well as transition matrix.

and i also get the below error

ValueError: operands could not be broadcast together with shapes (10,) (11,)

Traceback (most recent call last):

File “C:/Users/Ericoh/.qgis2/python/plugins\molusce\moluscedialog.py”, line 413, in updateStatisticsTableDone

self.__drawTransitionStat()

File “C:/Users/Ericoh/.qgis2/python/plugins\molusce\moluscedialog.py”, line 1027, in __drawTransitionStat

stat = self.inputs[“crosstab”].getTransitionStat()

File “C:/Users/Ericoh/.qgis2/python/plugins\molusce\algorithms\models\crosstabs\manager.py”, line 91, in getTransitionStat

deltas = finalArea – initArea

ValueError: operands could not be broadcast together with shapes (10,) (11,)

Hi Eric,

please open issue here: https://github.com/nextgis/molusce/issues/

don’t forget to add info about QGIS version, MOLUSCE version and fragment of test data if possible to reproduce the error.

You got that problem for the dimensions of the input rasters. They don’t have the sufficient information to do the transition matrix or any other procces, try make bigger your rasters, that works for me

I just downloaded MOLUSCE plugin in QGIS 2.18.8 but the MOLUSCE is not working. What could be the problem? I would like to know how to resolve this problem and work with MOLUSCE. Thanks.

Hi. Please check if you’ve specified initial and final raster as well as spatial variables rasters. They should be compatible (press Check geometry)

Thank you. I specified the initial and final land use raster but i did not specify that of the spatial variable. I will do that and see how it goes. hope to get back to you. Thanks once again

Hi..

I am using MOLUSCE in QGIS 2.6.1 for a land use prediction. I did a subset of my dataset and only took ‘dist_road’ and ‘dist_river’ as the factor along with lulc data for the year 1992 and 2000 for a learning purpose. The tool is running successfully but there is no change in the prediction. For example, my simulated/predicted lulc map is equal to my final map i.e lulc map of the year 2000. However, It is expected to change after prediction with iteration 1. The tool is user-friendly and I am enjoying it. Any probable answer to the above mention issue will be highly appreciated.

Dipak

In connection to the above question, I want to know how the attributes of factor variable are taken into account while inputting to the MOLUSCE. For example, in case distance from river/road, whether we have to reclassify (value may vary from 1 t0 10) the raster or take the distance raster (value may vary from 0 to 10000) as the model input. Is there any example datasets available to run the MOLUSCE model which will give a better insight to many new users.

My simulation result is the same with you

Hi, My name is Susan.

Please how to I calculate distance to road, DEM, water or other spatial variables using qgis before i use the molusce plugin for my prediction

Thanks

Hi Susan, this seems to be a general QGIS question, if you need our support, please visit http://nextgis.com/pricing/

Hello, please recommend me to solve the simulation result is no change.

– landuse (2007 initial, 2016 final)

– spatial variable (dist_road) >> reclassify (1,2,3,4,5)

– Transition Modeling (ANN) >> Neightbourhood = 1 px, Learing rate = 0.5, Maximum iteration = 100, Hidden layer 2

## The simulation resut (lu 2025) in final step show the same output as landuse (2016)

what is happen in the process?

thank you

yuth

Hi, I’m trying to predict land cover change and I am using 2 landsat images from 2014 and 2017. My spatial variables are distance to roads and distance to rivers which I obtained using euclidean distance and reclassified them into 3 classes with the values; 1,4 and 9. My geometry checked out however, I’ve failed to create a changes map. Please help!

Hi,

Firstly, thank you for this very helpful plug-in. I would like to know whether this plugin deals with stochastic events. I used the ANN model to make prediction of probabilities but I am not sure how this sort of modelling deals with stochastic events.

Regards

Carlos

Once again me… This time appears this message:

warning:/home/miguel/.qgis2/python/plugins/molusce/algorithms/models/crosstabs/model.py:86: FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.

if self._T == None:

traceback: File “/home/miguel/.qgis2/python/plugins/molusce/molusce.py”, line 111, in run

d.exec_()

File “/home/miguel/.qgis2/python/plugins/molusce/algorithms/models/crosstabs/manager.py”, line 48, in __crosstableFinished

self.crossTableFinished.emit()

File “/home/miguel/.qgis2/python/plugins/molusce/moluscedialog.py”, line 444, in updateStatisticsTableDone

self.__drawTransitionStat()

File “/home/miguel/.qgis2/python/plugins/molusce/moluscedialog.py”, line 1058, in __drawTransitionStat

stat = self.inputs[“crosstab”].getTransitionStat()

File “/home/miguel/.qgis2/python/plugins/molusce/algorithms/models/crosstabs/manager.py”, line 79, in getTransitionStat

initArea = tab.getSumRows()

File “/home/miguel/.qgis2/python/plugins/molusce/algorithms/models/crosstabs/model.py”, line 125, in getSumRows

crosstable = self.getCrosstable()

I checked my rasters and take away “Non Data” pixels, but continues showing the message. I’m f ### g desperate about this.

Any help?

Thanks

Hi there!

Every time I try to run MOLUSCE in QGIS version “2.18.14” on Windows 10, I face this error message:

“Traceback (most recent call last):

File “C:/Users/Jomehzadeh/.qgis2/python/plugins\molusce\molusce.py”, line 109, in run

d = moluscedialog.MolusceDialog(self.iface)

File “C:/Users/Jomehzadeh/.qgis2/python/plugins\molusce\moluscedialog.py”, line 110, in __init__

self.grpSampling.setSettings(self.settings)

TypeError: QgsCollapsibleGroupBox.setSettings(QgsSettings): argument 1 has unexpected type ‘QSettings'”

I appreciate any help!

Best regards!