Skip to main content

Generate a leaf-level DCEL map from a hierarchical zone tree

Project description

dcel-map-generator

Generate whimsical continent-style maps from a rooted hierarchy of zones. The pipeline produces a leaf-level DCEL planar subdivision, an optional rendered PNG, and a frontend-ready JSON bundle for interactive exploration.

Live Demo | GitHub

Installation

pip install dcel-map-generator

Requires Python 3.11+.

Quick Example

from dcel_builder import generate_dcel

dcel, report = generate_dcel(
    zone_edges_path="zone_edges.json",
    tree_stats_path="zone_tree_stats.json",
    zone_index_path="zone_index.json",
    seed=42,
)

interior_faces = [f for f in dcel.faces if not f.is_outer]
print(f"Generated {len(interior_faces)} leaf territories")

Python API

generate_dcel(...) -> (DCEL, report)

Build a leaf-level DCEL from a rooted zone tree.

generate_frontend_bundle(...) -> (bundle_dict, report)

Build a frontend-ready hierarchy bundle (JSON-serializable dict) that can be consumed by the companion React component @alonso-cancino/dcel-map-frontend.

generate_map_artifacts(...) -> (DCEL, report, tree, zone_index)

Low-level entry point that returns all intermediate artifacts.

All three functions accept the same parameters:

Parameter Type Default Description
zone_edges_path str | Path required Directed [parent, child] edge-list JSON
tree_stats_path str | Path required Sidecar stats JSON (can be {})
zone_index_path str | Path required { "id": "name" } mapping JSON
seed int | None None RNG seed for reproducible maps
resolution int 512 Raster grid size H x H
land_fraction float 0.40 Target fraction of land pixels
noise_exponent float 2.3 Power-law exponent for spectral noise
warp_strength float 0.10 Domain-warp amplitude (fraction of resolution)
split_mode str "contour_guided" Split strategy: contour_guided, field_guided, or seeded
quiet bool False Suppress progress output

CLI

The package installs a dcel-map command:

dcel-map \
  --zone-edges zone_edges.json \
  --tree-stats zone_tree_stats.json \
  --zone-index zone_index.json \
  --output dcel_map.json \
  --render --render-output map.png \
  --frontend-bundle map_bundle.json \
  --seed 42 --validate

Key flags:

Flag Description
--output Path for the output DCEL JSON
--render Render the DCEL to a PNG image
--render-output PNG output path (default: dcel_map.png)
--frontend-bundle Generate a frontend-ready JSON bundle
--seed RNG seed for reproducibility
--resolution Raster grid size (default: 512)
--split-mode contour_guided (default), field_guided, or seeded
--validate Run structural invariant checks before writing
--quiet Suppress progress output

Input Files

The generator expects three JSON files describing a rooted tree of zones:

zone_edges.json — directed parent-child pairs:

[[0, 1], [0, 2], [1, 3], [1, 4]]

zone_index.json — zone ID to display name:

{"0": "World", "1": "North", "2": "South", "3": "Tundra", "4": "Forest"}

zone_tree_stats.json — optional metadata (an empty {} is accepted).

Outputs

  • DCEL JSON — serialized planar subdivision with vertices, half-edges, and faces. Each interior face is tagged with a zone_id from the input tree.
  • PNG render — static map image colored by zone.
  • Frontend bundle — JSON structure with SVG paths, bounding boxes, hierarchy, and zoom thresholds for interactive rendering.

How It Works

The pipeline is tree-first:

  1. Load a rooted hierarchy from the edge-list
  2. Generate a continent mask using spectral noise with domain warping
  3. Recursively partition each parent region among its children using weighted splits
  4. Extract leaf polygons from the raster partition
  5. Build a DCEL planar subdivision

Split modes control how regions are divided:

  • contour_guided — splits along raster contour lines (organic, natural-looking boundaries)
  • field_guided — uses distance/flow fields for partitioning
  • seeded — random Voronoi-like splits

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dcel_map_generator-0.9.2.tar.gz (443.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dcel_map_generator-0.9.2-py3-none-any.whl (33.0 kB view details)

Uploaded Python 3

File details

Details for the file dcel_map_generator-0.9.2.tar.gz.

File metadata

  • Download URL: dcel_map_generator-0.9.2.tar.gz
  • Upload date:
  • Size: 443.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dcel_map_generator-0.9.2.tar.gz
Algorithm Hash digest
SHA256 116bc4f713ef2468f30d409bba34c72a6186d2d2a3c3bb6f47f46f2ce026a069
MD5 db9a68c6802eb93c11e5eb26d22f55e7
BLAKE2b-256 62e568d5f70fe5f6cb13640c1c5d0da2b3fd61e44fc4f5f45b139296b9fc2b9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for dcel_map_generator-0.9.2.tar.gz:

Publisher: release.yml on alonso-cancino/map-generator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dcel_map_generator-0.9.2-py3-none-any.whl.

File metadata

File hashes

Hashes for dcel_map_generator-0.9.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ea6e5521ddba2301e16ee5a34d7a290aa9d653c696f6fae6802f1f1dff36f908
MD5 f747669bd5de00d740ac4a3de63bd813
BLAKE2b-256 885d66f991c1183ca5a98b29276ee7b82b659432dd7db89df6a1d00fabe7e4e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for dcel_map_generator-0.9.2-py3-none-any.whl:

Publisher: release.yml on alonso-cancino/map-generator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page