Landfall
Landfall turns geographic data into static map images with a small Python API. Plot points, routes, polygons, and circles; combine layers; or read GeoJSON and GeoPandas data. It uses py-staticmaps for map tiles and returns Pillow images.
Routes · translucent areas · layered maps
Install
Landfall supports Python 3.8–3.13. Install the optional geo extra for
GeoPandas and Shapely integration.
python -m pip install landfall
python -m pip install 'landfall[geo]' # optional
The default OpenStreetMap tile provider needs network access when rendering.
If you use a different tile provider, pass a py-staticmaps provider through
tile_provider or configure a Context directly.
Make a map
import landfall
image = landfall.plot_points(
[(27.88, -82.49), (27.92, -82.46), (27.94, -82.44)],
colors="distinct",
point_size=14,
window_size=(640, 440),
zoom=-1,
)
image.save("tampa-points.png")
Native coordinate pairs are (latitude, longitude). GeoJSON and Shapely
positions are (longitude, latitude); Landfall converts them. For native
inputs already in longitude/latitude order, use flip_coords=True.
Every plot_* function returns a PIL.Image.Image. Use Context when a map
needs multiple kinds of shapes or an SVG result:
map_context = landfall.Context()
map_context.add_points([27.88, 27.92], [-82.49, -82.46], colors="distinct")
map_context.add_line([(27.88, -82.49), (27.92, -82.46)], color="red")
map_context.add_circle(27.88, -82.49, 1000, fill_color="#ff000064")
map_context.render_pillow(800, 600).save("combined.png")
map_context.render_svg(800, 600).saveas("combined.svg")
More maps you can run
route = [(27.88, -82.49), (27.90, -82.47),
(27.92, -82.46), (27.94, -82.44)]
landfall.plot_line(
route, color="#d12c31", width=5, window_size=(640, 440), zoom=-1
).save("route.png")
landfall.plot_circle(
27.88, -82.49, 1000,
color="#9b2727", fill_color="#d12c3155", width=3,
window_size=(640, 440),
).save("coverage.png")
Circle radii are in meters by default; set radius_unit="kilometers" for
kilometers. Colors can be names, hex values, RGB/RGBA tuples, or
staticmaps.Color objects. Batch functions also accept the "distinct",
"random", and "wheel" palettes.
The checked-in images above were generated with
examples/generate_doc_maps.py using real
OpenStreetMap tiles; tile attribution appears in each image.
Documentation
Read the full documentation on Read the Docs.
| Start here | What you will find |
|---|---|
| Getting started | Installation, coordinates, first maps, and image output |
| Working with shapes | Layers, colors, groups, polygon holes, and circles |
| GeoJSON and GeoPandas | Files, features, coordinate systems, and styling |
| API reference | Public functions, parameters, defaults, and return values |
| Troubleshooting | Common errors, tile access, and optional dependencies |
| Contributing | Local setup, checks, and release validation |
The documentation index also links to example notebooks. For release history, see the changelog.
Support and license
Report bugs or request features through GitHub Issues. Landfall is released under the MIT license.
Metadata
Release files for landfall 0.4.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| landfall-0.4.3.tar.gz | 34.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| landfall-0.4.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.9 kB
Release files / landfall-0.4.3.tar.gz
| Download URL | landfall-0.4.3.tar.gz |
|---|---|
| Size | 34.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1c55e52d6f545495ec8d921cea2b83e74a40658cbd0412ea04b1fd09d792c23a
|
|
BLAKE2b-256 checksum How to use checksums |
c8749e1562ef65ee473e6272d6e2a1d950d282057fe0cc966b5ce67d9e913de0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.
Transparency logRelease files / landfall-0.4.3-py3-none-any.whl
| Download URL | landfall-0.4.3-py3-none-any.whl |
|---|---|
| Size | 22.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5d8ea5f1896ebb2d0b573e332340e1e08924e09102da270cb72597d48b3e8fc6
|
|
BLAKE2b-256 checksum How to use checksums |
fa5f1b739895f981f31ea9c999366a8d3f92d88700d686efb448f79102ecf22d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.
Transparency log