placeness.spatial
v0.1.0-alpha • Open Source Tooling

Bridging urban theory and geospatial computation.

Open-source spatial algorithms and Python pipelines designed to quantify urban morphology, space syntax, and the lived dimensions of the built environment.

$ pip install placeness
View Documentation →

Theoretical Lineage

From empty space to human place.

01 / Relational Space

Edward Relph

Translating the concepts of Place and Placelessness (1976) into spatial indicators that separate authentic, human-scale enclosure from sterile, monoculture expanses.

02 / Street Grain

Jane Jacobs

Operationalizing fine-grained urban blocks, active ground-floor frontage density, and street-edge permeability to evaluate urban vibrancy and natural surveillance.

03 / Space Syntax

Bill Hillier

Measuring how street network topological integration, axial visual sightlines, and 2D isovists naturally generate pedestrian copresence and social encounter.

Tooling Architecture

Native to the modern Python spatial stack.

D/H

Street Canyon & Enclosure

Extracts street-wall aspect ratios ($D/H$), sky-view factor proxies, and spatial confinement indices from street centerlines and 3D building polygons.

ISO

Isovist & Visibility Fields

Generates 360-degree viewshed polygons from street pedestrian viewpoints to evaluate visual openness, occluded vistas, and natural sightline thresholds.

GRN

Urban Grain & Parcel Texture

Quantifies building frontage continuity, parcel fragmentation, and facade variation index using OpenStreetMap or cadastral GeoDataFrames.

NET

Pedestrian Permeability Graphs

Constructs dual and primal graph topologies to compute route directness, metric catchment radii, and pedestrian accessibility barriers.

quickstart.py

GeoPandas & OSMnx Compatible
# 1. Ingest street network and adjacent building morphology
import geopandas as gpd
import placeness as ps

streets = gpd.read_file("seattle_streets.geojson")
buildings = gpd.read_file("seattle_footprints.geojson")

# 2. Compute 3D street enclosure ratio (Distance / Height)
enclosure_gdf = ps.morphology.calculate_enclosure(
    streets=streets,
    buildings=buildings,
    height_col="height_m",
    buffer_distance=25.0
)

# 3. Derive aggregate Human-Scale Placeness Index
indices = ps.metrics.evaluate_placeness(enclosure_gdf)
print(indices[["street_name", "placeness_score"]].head())

Academic Citation

Reproducible Research & Software DOIs

If you use Placeness tooling, algorithms, or benchmark datasets in academic publications, please cite the software release:

@software{placeness2026,
  author       = {[Your Name]},
  title        = {Placeness: Computational Workflows for Quantitative Urban Morphology},
  year         = {2026},
  publisher    = {GitHub},
  journal      = {GitHub repository},
  howpublished = {\url{https://github.com/placeness-spatial/placeness}}
}