Skip to content

ManipulateOSMDatas

LBIRE edited this page Nov 30, 2022 · 20 revisions

Manipulate OSM Datas

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.

openstreetmap

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.

QuickOSM

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 :

  1. OSM file
  2. Browse your xml file.
  3. 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).
  4. Select the format you want for your processed file (in the example, ESRI shapefile will give a .shp, very well processed by GAMA afterwards).
  5. Open your file.

ImportOSMfile

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.

Suppressotherlayers

Create a new field for the building layer to allow a better handling in GAMA platform : first, enter you attribute table of the layer.

Openattributes

Then, go to edit mode (the pen icon on the top left corner) and select field calculator.

InAttributes

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.

Creatingattr1

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)
  1. What's new (Changelog)
  1. Installation and Launching
    1. Installation
    2. Launching GAMA
    3. Updating GAMA
    4. Installing Plugins
  2. Workspace, Projects and Models
    1. Navigating in the Workspace
    2. Changing Workspace
    3. Importing Models
  3. Editing Models
    1. GAML Editor (Generalities)
    2. GAML Editor Tools
    3. Validation of Models
  4. Running Experiments
    1. Launching Experiments
    2. Experiments User interface
    3. Controls of experiments
    4. Parameters view
    5. Inspectors and monitors
    6. Displays
    7. Batch Specific UI
    8. Errors View
  5. Running Headless
    1. Headless Batch
    2. Headless Server
    3. Headless Legacy
  6. Preferences
  7. Troubleshooting
  1. Introduction
    1. Start with GAML
    2. Organization of a Model
    3. Basic programming concepts in GAML
  2. Manipulate basic Species
  3. Global Species
    1. Regular Species
    2. Defining Actions and Behaviors
    3. Interaction between Agents
    4. Attaching Skills
    5. Inheritance
  4. Defining Advanced Species
    1. Grid Species
    2. Graph Species
    3. Mirror Species
    4. Multi-Level Architecture
  5. Defining GUI Experiment
    1. Defining Parameters
    2. Defining Displays Generalities
    3. Defining 3D Displays
    4. Defining Charts
    5. Defining Monitors and Inspectors
    6. Defining Export files
    7. Defining User Interaction
  6. Exploring Models
    1. Run Several Simulations
    2. Batch Experiments
    3. Exploration Methods
  7. Optimizing Model Section
    1. Runtime Concepts
    2. Optimizing Models
  8. Multi-Paradigm Modeling
    1. Control Architecture
    2. Defining Differential Equations
  1. Manipulate OSM Data
  2. Diffusion
  3. Using Database
  4. Using FIPA ACL
  5. Using BDI with BEN
  6. Using Driving Skill
  7. Manipulate dates
  8. Manipulate lights
  9. Using comodel
  10. Save and restore Simulations
  11. Using network
  12. Headless mode
  13. Using Headless
  14. Writing Unit Tests
  15. Ensure model's reproducibility
  16. Going further with extensions
    1. Calling R
    2. Using Graphical Editor
    3. Using Git from GAMA
  1. Built-in Species
  2. Built-in Skills
  3. Built-in Architecture
  4. Statements
  5. Data Type
  6. File Type
  7. Expressions
    1. Literals
    2. Units and Constants
    3. Pseudo Variables
    4. Variables And Attributes
    5. Operators [A-A]
    6. Operators [B-C]
    7. Operators [D-H]
    8. Operators [I-M]
    9. Operators [N-R]
    10. Operators [S-Z]
  8. Exhaustive list of GAMA Keywords
  1. Installing the GIT version
  2. Developing Extensions
    1. Developing Plugins
    2. Developing Skills
    3. Developing Statements
    4. Developing Operators
    5. Developing Types
    6. Developing Species
    7. Developing Control Architectures
    8. Index of annotations
  3. Introduction to GAMA Java API
    1. Architecture of GAMA
    2. IScope
  4. Using GAMA flags
  5. Creating a release of GAMA
  6. Documentation generation

  1. Predator Prey
  2. Road Traffic
  3. 3D Tutorial
  4. Incremental Model
  5. Luneray's flu
  6. BDI Agents

  1. Team
  2. Projects using GAMA
  3. Scientific References
  4. Training Sessions

Resources

  1. Videos
  2. Conferences
  3. Code Examples
  4. Pedagogical materials
Clone this wiki locally