Toolset for the delineation of settlements on the basis building footprints, road network and land use data
This tool was developed as part of a Phd thesis. For further information, please see the following publication: Harig, O.; Hecht, R.; Burghardt, D.; Meinel, G. Automatic Delineation of Urban Growth Boundaries Based on Topographic Data Using Germany as a Case Study. ISPRS Int. J. Geo-Inf. 2021, 10, 353. https://doi.org/10.3390/ijgi10050353
- Install the necessary packages via pip or the package maganger of your IDE.
- You need a running ArcGIS Advanced version (ArcMap or ArcGIS Pro) on the system on which the code is to be executed. Furthermore, a Spatial Analyst licence is required.
In addition, the following Python packages have to be installed:
- Python == 2.7
- traceback
- networkx
- numpy
- scipy
- statistics
- msvcrt
- re
The script also uses the following standard modules:
- os
- time
- datetime
- operator
The tool consists of three independent scripts:
- partitioning.pyt - To create partitioning from building footprints
- IB-Tool2.py, IB-Tool2_Config.txt, IB-Tool2_Filter.txt - To create the delineation
- Error_Classification.py - To assess the boundary on the basis of expert delineation
It is recommended to create a separate directory for each of the three parts.
To be able to create a delineation, a partitioning must be created. To do this, the file partitioning.pyt from Python-Toolbox must be opened in ArcGIS. The building data can then be selected via the dialogue. These files must be located in a geodatabase. The working directory must also be a geodatabase. It is advised not to change the default parameters.
If other data is used for partitioning, care must be taken that it contains a "NAME" field (text). The field "NAME" must contain an individual value for each feature, e.g. PART_1, PART_2, ...
The script is designed to use ATKIS data as input data. If other data are used, problems may occur due to different field names/data formatting within the data.
Copy building floor plans, road network data, auxiliary data, partitioning data and the three script files(IB-Tool2.py, IB-Tool2_Config.txt, IB-Tool2_Filter.txt) into a working directory.
The building ground plans must be available as a polygon shape file. By default, the tool is designed to use building data according to the AFIS-ALKIS-ATKIS application schema. The filter function accesses the corresponding attributes of the building geometry. The data must not contain a "NAME" field. The file must be renamed to A_HU.shp.
The data must be available as a polyline shape file. The file must be renamed to A_RN.shp.
The data must be available as a polyline shape file. The file must be renamed to A_AUX.shp.
The data must be available as a polygon shape file. The data must contain a "NAME" field. The file must be renamed to A_PART.shp.
Building filters are set in the IB-Tool2_Filter.txt file.
The identifier (digit) is decisive for the filtering. It is composed of the digit for the identifier (Kennung) and the digit for the value (Wert) according to ATKIS-OK. Entries after the comma are used for commenting.
#Filter positive (AX_Gebaedefunktionen: Kennung, Wert, Bezeichner) jeweils ohne Leerzeichen eingeben
31001_1000, Wohngeb
31001_1010, Wohnhaus
31001_1100, GemischtesWohnen
31001_1120, WohnenHandelDienst
31001_1121, WohnVerw
31001_1122, WohnBuero
31001_1123, WohnGesch
31001_2052, Einkaufszentrum
31001_2010, Handel und Dienstleistungen
31001_2050, Geschäftsgebäude
31001_2020, Bürogebäude
31001_3021, Schule
31001_3000, öffentliche Zwecke
31001_3017, Kreisverwaltung
31001_3018, Bezirksregierung
#Filter negative (AX_Gebaedefunktionen: Kennung, Wert, Bezeichner) jeweils ohne Leerzeichen eingeben
31001_1310, Freizeit
31001_2600, Entsorgung
31001_2720, GebLandForst
31001_2720, GebLandForst
31001_2721, Scheune
31001_2723, Schuppen
31001_2724, Stall
31001_2726, StallSchuppen
31001_2727, Stall
31001_2740, Treibhaus
31001_2741, Treibhaus
31001_2742, Treibhaus
31001_2140, Vorratshaltung
51003_1201, Silo
31001_2143, Lager
51002_1215, Biogas
31001_3200, Erholung
31001_2463, Garage
31001_2523, Umfomer
31001_1312, Wochenendhaus
#End
Parameters are set in IB-Tool2_Config.txt file.
01 Minimum Overlap of Inner Area Blocks (%): 18
02 Global Building Coverage Threshold (%): 0
03 Minimum Building Footprint Area (sqm): 56.8
04 Minimum Number of Buildings to create a Inner Zone: 20
05 Minimum Size of Inner Zone Patch (sqm): 10000
06 Maximum Size of Hole (sqm): 10000
07 Maximum Size of Gaps (sqm): 4900
08 Partition Start (default value = -1): -1
09 Partition End (default value = -1): -1
10 Partition List (default value = #):#
11 Log Level (default value = Warning):Debug
12 Spatial Reference: 25832
13 Path Common Workspace: D:\path\to\working\directory
14 Delete PartLog at start:True
- Building Coverage Threshold for selecting dense blocks (default value = 18)
- Global Building Coverage Threshold can be added if this has already been calculated (default value = 0)
- Minimum Building Footprint Area (default value = 56.8 sqm )
- Minimum Number of Buildings to create a inner Zone/ UGB (default value = 20)
- Minimum Size of Inner Zone Patch (default value = 10000 sqm)
- Maximum Size of Hole (default value = 10000 sqm)
- Maximum Size of Gaps (default value = 4900 sqm) The values 8. 9, 10 are used for partioning purposes of the data set
- Start value (OID or FID of feature in A_PART.shp) (default value = -1 = no filter)
- End value (OID or FID of feature in A_PART.shp) (default value = -1 = no filter)
- List of values according to "NAME" field of A_PART.shp (default value = #) for debugging or tests, no blanks
- Set Log Level Alert, Warning or Debug (default value = Warning)
- Set Spatial Reference by using a coordinate system's factory code (or authority code)
- Set path to common workspace
- Set switch for PartLog to True or False (default value = True)
Set imput data:
# ------ INPUT DATA ------
InputHU = Workspace + os.path.sep + "A_HU_P.shp" # Building footprints (polygon, shape)
IBS = Workspace + os.path.sep + "A_IBS_P.shp" # Expert delieation (polygon, shape)
UGB = Workspace + os.path.sep + "A_UGB_P5.shp" # Caculated boundary (polygon, shape)
Nutzungen = Workspace + os.path.sep + "A_Nutzungen_P.shp" # land use geometry (polygon, shape)
sr = arcpy.SpatialReference(25833)
- Oliver Harig: Conception, code implementation
- Robert Hecht, Gotthardt Meinel, Dirk Burghardt: Conception
See LICENSE.md file for details.