Extension Modules API¶
VoronoiMap ships with 16 extension modules beyond the core vormap module.
Each adds specialized spatial analysis, visualization, or export capability.
For simulation engines, autonomous analysis, and governance modules, see Advanced Modules.
Visualization — vormap_viz¶
The primary visualization module. Computes Voronoi regions and exports to SVG, HTML, GeoJSON, and statistics formats.
compute_regions(data)¶
Compute Voronoi region polygons for all seed points. Uses SciPy when available, otherwise falls back to a manual tracing algorithm.
from vormap import load_data
from vormap_viz import compute_regions
data = load_data("mypoints.txt")
regions = compute_regions(data)
# regions[i] = list of (x, y) vertices for the i-th seed
Returns: list[list[tuple]] — One polygon (vertex list) per seed.
export_svg(regions, data, output_path, ...)¶
Export Voronoi regions as an SVG file with customizable color schemes.
export_html(regions, data, output_path, ...)¶
Export an interactive HTML visualization with tooltips and region highlighting.
export_geojson(regions, data, output_path, ...)¶
Export Voronoi regions as a GeoJSON FeatureCollection — useful for integration with Leaflet, Mapbox, or QGIS.
compute_region_stats(regions, data)¶
Compute per-region statistics: area, perimeter, vertex count, isoperimetric quotient, centroid coordinates.
stats = compute_region_stats(regions, data)
for s in stats:
print(f"Region {s['index']}: area={s['area']:.1f}, vertices={s['vertices']}")
compute_summary_stats(region_stats)¶
Aggregate summary (mean, median, std, min, max) over all region statistics.
lloyd_relaxation(data, iterations=10, *, bounds=None, callback=None)¶
Apply Lloyd relaxation to make Voronoi regions more uniform. Iteratively replaces each seed with its region's centroid.
Convenience Functions¶
| Function | Description |
|---|---|
generate_diagram(datafile, output_path, ...) |
Load → compute → export SVG |
generate_geojson(datafile, output_path, ...) |
Load → compute → export GeoJSON |
generate_stats(datafile, output_path, ...) |
Load → compute → export stats |
generate_relaxed_diagram(datafile, output_path, iterations, ...) |
Load → relax → export |
export_relaxation_html(data, iterations, output_path, ...) |
Animated relaxation HTML |
format_stats_table(region_stats, ...) |
Human-readable stats table |
export_stats_csv(region_stats, output_path, ...) |
CSV export |
export_stats_json(region_stats, output_path, ...) |
JSON export |
list_color_schemes() |
List available color scheme names |
Spatial Clustering — vormap_cluster¶
Cluster Voronoi cells by adjacency and spatial metrics.
cluster_regions(region_stats, regions, data, *, method="threshold", metric="area", ...)¶
Cluster Voronoi cells using spatial adjacency and cell metrics.
from vormap_cluster import cluster_regions
result = cluster_regions(stats, regions, data, method="dbscan", metric="area", eps=50.0)
print(f"{result.num_clusters} clusters found")
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
method |
str |
"threshold" |
Clustering algorithm: "threshold", "dbscan", "agglomerative" |
metric |
str |
"area" |
Metric to cluster on: "area", "perimeter", "iq", "vertices" |
eps |
float |
— | DBSCAN epsilon / agglomerative distance threshold |
min_cluster_size |
int |
2 |
Minimum regions per cluster |
generate_clusters(datafile, output_path=None, *, ...)¶
One-call convenience: load data, cluster, optionally export.
Export Functions¶
| Function | Description |
|---|---|
export_cluster_json(result, output_path) |
JSON export |
export_cluster_svg(result, regions, data, output_path, ...) |
SVG visualization |
format_cluster_table(result) |
Human-readable table |
Spatial Queries — vormap_query¶
Build a spatial index over Voronoi seeds for efficient nearest-neighbor and point-in-region queries.
VoronoiIndex class¶
from vormap_query import VoronoiIndex
# VoronoiIndex is created via run_query_cli or by constructing with seeds/regions
| Method | Description |
|---|---|
nearest(point) |
Return the nearest seed to point |
nearest_k(point, k) |
Return the k nearest seeds |
locate(point) |
Return the index of the Voronoi region containing point |
within_radius(point, radius) |
All seeds within radius of point |
distance_to_boundary(point) |
Minimum distance to nearest region boundary |
batch_query(points) |
Nearest-seed query for each point |
batch_locate(points) |
Locate each point's containing region |
query_stats(results)¶
Compute statistics over a batch of query results (distances, region distribution).
coverage_analysis(points, index)¶
Analyse how many query points fall in each Voronoi region — useful for understanding spatial coverage and identifying underserved areas.
Export Functions¶
| Function | Description |
|---|---|
export_query_json(results, path) |
JSON export |
export_query_svg(seeds, queries, results, path, ...) |
SVG visualization |
Heatmaps — vormap_heatmap¶
Density heatmap generation for Voronoi diagrams.
export_heatmap_svg(regions, data, output_path, ...)¶
Export a density heatmap SVG colored by a region metric (area, vertex count, isoperimetric quotient, or perimeter).
from vormap_heatmap import export_heatmap_svg
export_heatmap_svg(regions, data, "heatmap.svg", metric="area", ramp="viridis")
export_heatmap_html(regions, data, output_path, ...)¶
Export an interactive HTML heatmap with tooltips and color-ramp switching.
Outlier Detection — vormap_outlier¶
Detect spatial outliers in Voronoi region statistics using Z-score or IQR methods.
detect_outliers(stats, metrics=None, method="zscore", threshold=None)¶
from vormap_outlier import detect_outliers
result = detect_outliers(stats, metrics=["area", "iq"], method="iqr")
print(f"{result.outlier_count} outliers ({result.outlier_rate:.1%})")
print(result.format_report())
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
metrics |
list[str] |
all | Metrics to check: "area", "perimeter", "iq", "vertices" |
method |
str |
"zscore" |
Detection method: "zscore" or "iqr" |
threshold |
float |
varies | Z-score threshold (default 2.0) or IQR multiplier (default 1.5) |
Export Functions¶
| Function | Description |
|---|---|
export_outlier_json(result, path) |
JSON export |
export_outlier_svg(result, regions, data, path, ...) |
SVG with outliers highlighted |
export_outlier_csv(result, path) |
CSV export |
Spatial Interpolation — vormap_interp¶
Interpolate scalar values associated with Voronoi seed points.
nearest_interp(points, values, query)¶
Return the value of the nearest seed point (piecewise constant).
idw_interp(points, values, query, power=2.0, epsilon=1e-12)¶
Inverse distance weighted interpolation.
from vormap_interp import idw_interp
result = idw_interp(
points=[(0, 0), (10, 0), (5, 8)],
values=[100, 200, 150],
query=(5, 3),
power=2.0
)
natural_neighbor_interp(points, values, query, fallback_idw=True)¶
Sibson natural neighbor interpolation using stolen area weights. Falls back to IDW if SciPy is unavailable.
grid_interpolate(points, values, nx=50, ny=50, bounds=None, method="idw", power=2.0)¶
Interpolate values over a regular grid. Supports "nearest", "idw",
and "natural" methods.
Export Functions¶
| Function | Description |
|---|---|
export_surface_svg(grid_result, output_path, ...) |
SVG surface heatmap |
export_surface_csv(grid_result, output_path) |
CSV grid export |
Spatial Pattern Analysis — vormap_pattern¶
Statistical tests for spatial randomness, clustering, and dispersion.
clark_evans_nni(points, bounds=None)¶
Compute the Clark-Evans Nearest Neighbor Index. Values < 1 indicate clustering, > 1 indicate dispersion, ≈ 1 indicate spatial randomness.
ripleys_k(points, radii=None, n_radii=20, bounds=None)¶
Compute Ripley's K function and Besag's L function at multiple radii. L(r) − r > 0 indicates clustering at scale r.
quadrat_analysis(points, rows=None, cols=None, bounds=None)¶
Perform quadrat (grid cell) analysis using a chi-squared test for complete spatial randomness.
mean_center(points)¶
Compute the mean center (geographic centroid) of a point pattern.
standard_distance(points)¶
Compute the standard distance (spatial spread) of a point set.
convex_hull_ratio(points, bounds=None)¶
Ratio of convex hull area to bounding box area — measures point distribution compactness.
analyze_pattern(points, bounds=None, ...)¶
Run all pattern analyses and return a combined PatternSummary.
from vormap_pattern import analyze_pattern, format_pattern_report
summary = analyze_pattern(points)
print(format_pattern_report(summary))
Region Clipping — vormap_clip¶
Clip Voronoi regions to arbitrary convex boundary polygons.
Boundary Constructors¶
from vormap_clip import make_rectangle, make_circle, make_ellipse, make_regular_polygon
rect = make_rectangle(0, 0, 100, 100)
circle = make_circle(center=(50, 50), radius=40)
ellipse = make_ellipse(center=(50, 50), rx=40, ry=25)
hexagon = make_regular_polygon(center=(50, 50), radius=40, sides=6)
clip_all_regions(regions, data, boundary, ...)¶
Clip all Voronoi regions to a boundary polygon. Returns a ClipResult
with clipped regions, area statistics, and boundary info.
point_in_polygon(point, polygon)¶
Ray-casting point-in-polygon test.
load_boundary(filepath)¶
Load boundary polygon from a text file (one x y per line).
Graph Coloring — vormap_color¶
Four-color map coloring using graph coloring algorithms.
color_voronoi(data_or_file, algorithm="dsatur", num_colors=4, palette=None)¶
One-call convenience: compute regions, extract adjacency graph, color it.
from vormap_color import color_voronoi
result = color_voronoi("mypoints.txt", num_colors=4, palette="pastel")
greedy_color(graph, num_colors=4)¶
Greedy graph coloring with random vertex ordering.
dsatur_color(graph, num_colors=4)¶
DSATUR algorithm — assigns colors based on saturation degree (number of distinct colors used by neighbors). Produces better results than greedy.
validate_coloring(graph, coloring)¶
Verify that no adjacent nodes share a color.
Diagram Comparison — vormap_compare¶
Compare two Voronoi diagrams for structural and geometric similarity.
DiagramSnapshot¶
from vormap_compare import DiagramSnapshot
snap_a = DiagramSnapshot.from_datafile("data1.txt")
snap_b = DiagramSnapshot.from_datafile("data2.txt")
compare_diagrams(snap_a, snap_b, max_match_distance=None)¶
Full comparison: seed matching, area deltas, topology differences, similarity score, and human-readable verdict.
match_seeds(seeds_a, seeds_b, max_distance=None)¶
Greedy nearest-neighbor seed matching between two diagrams.
compare_areas(stats_a, stats_b, mapping)¶
Compare region areas between matched seeds — returns per-region deltas and aggregate statistics.
compare_topology(regions_a, data_a, regions_b, data_b, mapping)¶
Compare neighbourhood topology (adjacency graph) between two diagrams.
Edge Network — vormap_edge¶
Extract and analyze the primal edge network from Voronoi region boundaries.
extract_edge_network(regions, *, tol=0.5)¶
Extract unique edges (shared boundaries between adjacent regions).
compute_edge_stats(network)¶
Aggregate statistics: total edges, mean/median/std length, length distribution, degree statistics.
Export Functions¶
| Function | Description |
|---|---|
export_edge_csv(network, output_path, ...) |
CSV edge list |
export_edge_json(network, output_path) |
JSON export |
export_edge_svg(network, output_path, ...) |
SVG visualization |
format_edge_stats(stats) |
Human-readable table |
Neighborhood Graph — vormap_graph¶
Extract and analyze the dual (adjacency) graph from Voronoi regions.
extract_neighborhood_graph(regions, data=None, *, tol=0.5)¶
Build the adjacency graph — nodes are seed points, edges connect seeds whose Voronoi regions share a boundary.
compute_graph_stats(graph)¶
Compute degree distribution, clustering coefficient, diameter, and connected component statistics.
generate_graph(datafile, output_path=None, *, fmt="table")¶
One-call convenience: load → compute → export.
KML Export — vormap_kml¶
Export Voronoi regions as KML for Google Earth / Google Maps.
export_kml(regions, data, output_path, ...)¶
Export Voronoi regions as a KML file with region styling and metadata.
generate_kml(datafile, output_path, ...)¶
One-call convenience: load → compute → export KML.
Power Diagrams — vormap_power¶
Weighted Voronoi diagrams (also called power diagrams or Laguerre diagrams).
assign_weights(seeds, method='uniform', *, value=1.0, ...)¶
Generate a weight vector. Methods: "uniform", "random",
"distance_based", "density_based", "custom".
compute_power_diagram(seeds, weights, mode='power', bounds=None, resolution=200)¶
Compute a weighted Voronoi diagram. Returns a PowerDiagramResult with
per-cell areas, centroids, and statistics.
from vormap_power import assign_weights, compute_power_diagram
seeds = [(100, 200), (300, 400), (500, 100)]
weights = assign_weights(seeds, method='random')
result = compute_power_diagram(seeds, weights)
print(result.summary())
weight_effect_analysis(seeds, weights, mode='power', ...)¶
Compare weighted diagram against a uniform-weight baseline to quantify the effect of weights on region sizes.
Distance Modes¶
| Mode | Formula | Description |
|---|---|---|
"power" |
d² − w | Standard power distance |
"multiplicative" |
d / w | Weight scales distance |
"additive" |
d − w | Weight offsets distance |
Seed Generation — vormap_seeds¶
Generate seed point distributions for testing and experimentation.
Generators¶
| Function | Description |
|---|---|
random_uniform(n, ...) |
Uniformly distributed random points |
grid(...) |
Regular rectangular grid |
hexagonal(...) |
Hexagonal (honeycomb) grid |
jittered_grid(...) |
Regular grid with random perturbation |
poisson_disk(...) |
Well-spaced points via Bridson's algorithm |
halton(n, ...) |
Low-discrepancy Halton sequence |
All generators accept x_min, x_max, y_min, y_max bounds and an
optional seed parameter for reproducibility.
from vormap_seeds import poisson_disk, save_seeds
points = poisson_disk(min_distance=20.0, seed=42)
save_seeds(points, "my_seeds.txt")
save_seeds(points, filename, header=True)¶
Save seed points to a text file compatible with vormap.py.
load_seeds(filename)¶
Load seed points from a text file.
Territory Analysis — vormap_territory¶
Analyze territorial properties of Voronoi diagrams: border regions, interior regions, size inequality, compactness metrics.
analyze_territories(regions, data, bounds=None, boundary_tolerance=0.05)¶
Run full territorial analysis.
from vormap_territory import analyze_territories, format_territory_report
analysis = analyze_territories(regions, data)
print(format_territory_report(analysis))
Returns a dict with:
- Per-region metrics: area, perimeter, compactness, border/interior classification, shared border lengths
- Aggregate metrics: Gini coefficient, mean compactness, border-to-interior ratio
- Territory classification (fragmented, balanced, dominated)
Export Functions¶
| Function | Description |
|---|---|
export_territory_json(analysis, output_path) |
JSON export |
export_territory_csv(analysis, output_path) |
CSV per-region metrics |
format_territory_report(analysis) |
Human-readable report |