Implementation of the methodology proposed in "A Geometry-Based Computational Assessment of Parcel-Level Redevelopment Feasibility in Seoul" — an automated system that evaluates urban parcel layouts using geometry-based scoring metrics within the Rhino/Grasshopper environment.
Figure 6. Evaluation results visualized on Seoul district maps
Urban planners in Seoul face the challenge of evaluating large-scale parcel layouts efficiently and consistently. This project automates the evaluation process by:
- Reading cadastral data from Korean national GIS shapefiles
- Generating blocks by grouping spatially adjacent lots using graph-based connectivity analysis
- Evaluating each block across four independent geometric scoring dimensions
- Exporting scored results back to shapefiles for GIS integration
The system runs inside Rhino 3D + Grasshopper, leveraging Rhino's geometry kernel for robust spatial operations.
Each block is evaluated with four normalized scores (0.0 – 1.0):
Measures how efficiently lots within a block can be developed by computing the ratio of buildable area after applying legal setbacks.
Figure 4. Buildable region derivation: Original Lot → Road Setback → Neighbor Lot Setback → Buildable Region
Figure 1. Block-level buildable area computation for lots A, B, C, and D
Evaluates lot shape quality through a weighted combination of three geometric metrics:
Figure 5. Three shape metrics: Convexity (30%), Circularity (40%), and Squareness (30%)
| Metric | Weight | Formula | Ideal |
|---|---|---|---|
| Convexity | 0.3 | Area / ConvexHullArea |
1.0 (no concavities) |
| Circularity | 0.4 | 4 * pi * Area / Perimeter^2 |
1.0 (circle) |
| Squareness | 0.3 | Based on bounding box aspect ratio | 1.0 (square) |
Quantifies road accessibility using cadastral road condition codes (01–12), mapping each to a normalized score. Corner lots with multiple road frontages receive higher scores.
Figure 2. Road frontage width computation for lots A, B, and C
Assesses terrain flatness within each block using DEM (Digital Elevation Model) data.
Figure 3. Elevation relief computation at block and lot levels
parcel_layout_evaluation_analysis/
├── grasshopper/
│ ├── main.py # Entry point
│ ├── block_generator.py # Groups adjacent lots into blocks (NetworkX)
│ ├── parcel_evaluator.py # Orchestrates four scoring modules
│ ├── shape_manager.py # Shapefile I/O with encoding detection
│ ├── units.py # Core data classes (Parcel, Lot, Block, LayoutScore)
│ ├── utils.py # Geometry utilities (Rhino + Clipper)
│ ├── constants.py # Configuration parameters
│ ├── visual_debugger.gh # Grasshopper visual debugger component
│ └── scorers/
│ ├── region.py # Buildable area efficiency scorer
│ ├── shape.py # Region Shape Index (RSI) scorer
│ ├── road.py # Road access scorer
│ └── topo.py # Topography/elevation scorer
├── input_data/ # Input GIS data (shapefiles + DEM)
├── output_data/ # Evaluated block shapefiles
└── docs/ # Research paper and figures
Shapefile (Cadastral Data) + DEM Raster
│ │
v │
ShapefileManager │
(parse lots & roads) │
│ │
v │
BlockGenerator │
(spatial join + graph │
connected components) │
│ │
v │
ParcelEvaluator <────────────┘
├─ RegionScorer
├─ ShapeScorer
├─ RoadScorer
└─ TopoScorer
│
v
Output Shapefile
(blocks with 4 scores)
This project runs inside the Rhino 3D / Grasshopper scripting environment. The following dependencies are required:
- Rhino 7+ with Grasshopper
- Python libraries (available within Rhino's Python environment):
geopandas— Geospatial data operationsshapely— Geometric computationsnetworkx— Graph-based block groupingpyshp— Shapefile I/O
| Data | Format | Description |
|---|---|---|
| Cadastral parcels | Shapefile (.shp) |
Korean national land parcel data (AL_D194) |
| Digital Elevation Model | GeoTIFF (.tif) |
10m resolution DEM raster |
The system exports a shapefile containing evaluated blocks with the following attribute fields:
| Field | Description | Range |
|---|---|---|
BLOCK_ID |
Unique block identifier | — |
REGION |
Buildable area efficiency score | 0.0 – 1.0 |
SHAPE |
Region Shape Index score | 0.0 – 1.0 |
ROAD |
Road access score | 0.0 – 1.0 |
TOPO |
Topography score | 0.0 – 1.0 |
- Open
grasshopper/visual_debugger.ghin Rhino/Grasshopper - Set the input shapefile path and output save path
- Run
grasshopper/main.pythrough the GhPython component - The evaluated blocks are saved as a new shapefile in
output_data/
If you find this work useful, please consider citing:
@article{byun2025geometry,
title = {A Geometry-Based Computational Assessment of Parcel-Level Redevelopment Feasibility in Seoul},
author = {Byun, Sanghoon and Park, Dongjun and Kang, Bumjun},
year = {2025}
}| Name | Role | GitHub | |
|---|---|---|---|
![]() |
Sanghoon Byun | Author | @969flash |
![]() |
Dongjun Park | Author | @gbjun7333 |
| Bumjun Kang | Advisor | Homepage |
This research was conducted at the LAUS (Lab. Architectural & Urban Space), Department of Architecture and Architectural Engineering, Seoul National University, under the supervision of Prof. Bumjun Kang.







