Skip to main content

Table 5 OSM2LULC Version 1.1 workflow and main differences in subsequent versions

From: Automatic conversion of OSM data into LULC maps: comparing FOSS4G based approaches towards an enhanced performance

 

Version 1.1 - Baseline workflow/approacha

Differences in subsequent versions

MOD 1

Import data related with Module 1 into GRASS GIS (v.in.ogr) > Generalize data (v.dissolve)

Vers. 1.2 - Same as Version 1.1.

Vers. 1.3 - Vector to raster (v.to.rast) replaced v.dissolve.

Vers. 1.4 - GRASS GIS was set aside; data was exported to file (ogr2ogr) and converted to raster using GDAL Python Bindings.

MOD 2

Import data related with Module 2 (roads and buildings) into GRASS GIS (v.in.ogr) > Calculate distance between roads and buildings (v.distance) > calculate buffer using distances obtained or default thresholds (v.buffer) > dissolve polygons (v.dissolve).

Vers. 1.2 - Procedure is done inside PGSQL DB; results are imported to GRASS GIS at the end (v.in.ogr); ST_Distance and ST_DWithin replaced v.distance; ST_Buffer and ST_Unary Union replaced v.buffer and v.dissolve.

Vers. 1.3 - One difference from Version 1.2: vector data is converted to raster (v.to.rast) at the end.

Vers. 1.4 - Three differences from Version 1.2: GRASS GIS was set aside; ST_Unary Union was not used to dissolve buffer polygons; data was converted to raster using GDAL Python Bindings.

MOD 3 and 4

Select data related with Module 3/4 and bigger/smaller than threshold > Import it to GRASS GIS (v.in.ogr) > Generalize data (v.dissolve)

Vers. 1.2 - Same as Version 1.1.

Vers. 1.3 - Vector to raster (v.to.rast) replaced v.dissolve.

Vers. 1.4 - GRASS GIS was set aside; data was exported to file (ogr2ogr) and converted to raster using GDAL Python Bindings.

MOD 5

Select data related with Module 5 and import it to GRASS GIS (v.in.ogr) > Buffer calculation using default thresholds (v.buffer) > dissolve polygons (v.dissolve)

Vers. 1.2 - Same as Version 1.1.

Vers. 1.3 - Vector to raster (v.to.rast) replaced v.dissolve.

Vers. 1.4 - GRASS GIS was set aside; ST_Buffer replaced v.buffer; data was exported to file (ogr2ogr) and converted to raster using GDAL Python Bindings.

MOD 6

Select Polygon OSM Features related with Module 6 that intersects with Point OSM Features and import it to GRASS GIS (v.in.ogr) > dissolve polygons (v.dissolve);

Select Polygon OSM Features related with Module 6 that not intersects with Point OSM Features and import it to GRASS GIS (v.in.ogr) > assign polygons to the LULC Class including residential and generalize polygons (v.dissolve).

Vers. 1.2 - Same as Version 1.1.

Vers. 1.3 - Vector to raster (v.to.rast) replaced v.dissolve.

Vers. 1.4 - GRASS GIS was set aside; ST_Buffer replaced v.buffer; data was exported to file (ogr2ogr) and converted to raster using GDAL Python Bindings.

PRIORITY Rule

The result of each module is a Vector Layer with several LULC Classes, so first thing to do is create a layer for each LULC Class (Geopandas) > these layers were compared to each other in an iterative process, which performs the intersection between one layer and the others with lower hierarchical rank, removing the common areas from the second one (v.overlay was used)

Vers. 1.2 - Same as Version 1.1.

Vers. 1.3 - The result of each module is a list with raster files representing the presence of a certain class; r.patch was used to obtain a single raster for each LULC class; r.patch was used to apply the priority rule and generate the final result.

Vers. 1.4 - The result of each module is a list with raster files representing the presence of a certain class; these files were converted to Numpy Arrays; arrays associated with the same LULC class were summed up to obtain an Array for each LULC class; these Arrays were compared to each other in an iterative process: At each iteration, considering each of the Arrays (ARRAY Y) and the Arrays with a lower hierarchical order (ARRAYS E), the values of each ARRAY E are replaced by NULL when, in the same position, the ARRAY Y value is greater or equal to one.

  1. aFor more information on how the different OSM2LULC Versions are implemented, its documentation can be found at https://github.com/jasp382/gasp/tree/master/gasp/osm2lulc