-
Notifications
You must be signed in to change notification settings - Fork 99
ManipulateOSMDatas
This section will be presented as a quick tutorial, showing how to proceed to manipulate OSM (Open street map) data, clean them and load them into GAMA. We will use the software QGIS to change the attributes of the OSM file.
Note that GAMA can read and import OpenStreetMap data natively and create agents from them. An example model is provided in the Model Library (Data Importation / OSM File Import.gaml). In this case, you will have to write a model to import, select data from OpenStreetMap before creating agents and then could export them into shapefiles, much easier to use in GAMA.
From the website openstreetmap.org, we will choose a place (in this example, we will take a neighborhood in New York City). Directly from the website, you can export the chosen area in the osm format.
We have now to manipulate the attributes for the exported osm file. Several softwares can be used, but we will focus on QGIS, which is totally free and provides a lot of possibilities in term of manipulation of data.
Once you have installed correctly QGIS, launch QGIS Desktop, and start to import the topology from the osm file.
QGis 3, the version we are using to build this tutorial, needs us to install a plugin to process files downloaded from OSM website. There are several versions of plugins allowing to do that. However, the most stable and simple one to use is QuickOSM. Go to your extension manager, select "All extensions" on the top left corner, look for "QuickOSM" extension and install it.
You should now be able to use the extension QuickOSM. Open its menu by entering the vector menu on the top QGis panel, go to QuickOSM, then select :
- OSM file
- Browse your xml file.
- Browse to select the folder that will welcome the processed file through QGis (select the "includes" folder of your current GAMA project for more efficency).
- Select the format you want for your processed file (in the example, ESRI shapefile will give a .shp, very well processed by GAMA afterwards).
- Open your file.
You will go back naturally to the main QGis UI and you downloaded OSM layer will be visible. We only want buildings for this tutorial, so we simply delete the other layers by selecting and deleting them through QGis layer interface.
Create a new field for the building layer to allow a better handling in GAMA platform : first, enter you attribute table of the layer.
Then, go to edit mode (the pen icon on the top left corner) and select field calculator.
Stay on the left hand side, we will now set up the field's characteristics, you can copy what you see in the screenshot bellow. Pay attention to selecting "string" to the field type, otherwise you won't be able to get the proper format of attributes in the following steps of this tutorial.
We want to create this attribute and associate to it variables that will be colors. We want to ask QGis to do that randomly on its own. Therefore, we have to provide the software a function. Go to the "function editor" tab, click on the "+" to add a new function file and write these lines down after having deleted the default help :
from qgis.gui import *
import random, string
@qgsfunction(args='auto', group='Custom')
def myFun(value1, feature, parent):
return random.choice(["blue","red"])```
Save and run the function using the proper button on the bottom right corner.
![Creatingattr2](https://user-images.githubusercontent.com/104968829/204848945-75003228-5d0a-4130-899e-75d20befdbc1.png)
Then go to the expression type and call your function by typing :
```myFun('attrForGam')```
Click on "Ok" which will get you back to your attribute table : you can now check the layer's attributes to see if the new field 'attrForGam' has been filled with random values "red" or "blue".
![Creatingattr3](https://user-images.githubusercontent.com/104968829/204849191-2d81e846-94b2-4460-8838-0e6f25bc31be.png)
Save your layer as an .shp file. Normally, there should be an existing file with the building layer already in your folder. As a safety measure, save your new features since you're certain the work on them is done. You can delete the other remaining other files in your "includes" folder.
![SaveFeatures](https://user-images.githubusercontent.com/104968829/204849294-56dbbb4a-9672-4667-a5eb-216188733108.png)
The file is now ready to be used in GAMA for modelling.
model OSMtutorial
global { // Global variables related to the Management units file shapeFile <- file("../includes/OSM_For_GAMA.shp");
//definition of the environment size from the shapefile.
//Note that is possible to define it from several files by using: geometry shape <- envelope(envelope(file1) + envelope(file2) + ...);
geometry shape <- envelope(shapeFile);
init {
//Creation of elementOfNewYork agents from the shapefile (and reading some of the shapefile attributes)
create elementOfNewYork from: shapeFile
with: [elementId::int(read('id')), elementHeight::int(read('height')), elementColor::string(read('attrForGam'))] ;
}
}
species elementOfNewYork{ int elementId; int elementHeight; string elementColor;
aspect basic{
draw shape color: (elementColor = "blue") ? #blue : ( (elementColor = "red") ? #red : #blue ) depth: elementHeight;
}
}
experiment main type: gui {
output {
display HowToUseOpenStreetMap type:opengl {
species elementOfNewYork aspect: basic;
}
}
}
Here is the result, with a special colorization of the different elements regarding the value of the attribute "attrForGama", and an elevation regarding the value of the attribute "height".
![FinalGama](https://user-images.githubusercontent.com/104968829/204850450-582c5161-1a64-42f0-b3ca-ab38c6ed3f04.png)
[//]: # (endConcept|use_osm_datas)
- Installation and Launching
- Workspace, Projects and Models
- Editing Models
- Running Experiments
- Running Headless
- Preferences
- Troubleshooting
- Introduction
- Manipulate basic Species
- Global Species
- Defining Advanced Species
- Defining GUI Experiment
- Exploring Models
- Optimizing Model Section
- Multi-Paradigm Modeling
- Manipulate OSM Data
- Diffusion
- Using Database
- Using FIPA ACL
- Using BDI with BEN
- Using Driving Skill
- Manipulate dates
- Manipulate lights
- Using comodel
- Save and restore Simulations
- Using network
- Headless mode
- Using Headless
- Writing Unit Tests
- Ensure model's reproducibility
- Going further with extensions
- Built-in Species
- Built-in Skills
- Built-in Architecture
- Statements
- Data Type
- File Type
- Expressions
- Exhaustive list of GAMA Keywords
- Installing the GIT version
- Developing Extensions
- Introduction to GAMA Java API
- Using GAMA flags
- Creating a release of GAMA
- Documentation generation