Python SDK for the MapLark OSM GeoJSON API to query OpenStreetMap data easily.
Project description
OSMGeoJSON API
This API keeps OpenStreetMap semantics intact and returns GeoJSON FeatureCollections you can feed straight into Leaflet, MapLibre, OpenLayers, or any geospatial toolchain. All you need to do is specify a bounding box and geometry types. The translation layer is very simple:
node- GeoJSON Pointway- LineString or Polygonrelation- MultiPolygon or grouped geometries
You filter with the same tags mappers already use (amenity=cafe, building=yes, and so on). Knowledge from OSM, Overpass, and tagging docs transfers immediately.
To narrow down between "open ways" and "closed ways", use the shape parameter:
shape=line- open ways (roads, paths, rivers) or line-shaped relations (routes, boundaries)shape=polygon- closed ways (buildings, parks) or multipolygon relations.shape=all- both shapes (default when shape is omitted).
For example, to get all buildings in an area:
type=way & tags=building
This is the equivalent of the Overpass query way[building].
Read the full API reference here https://maplark.com/developer.
Python SDK
This client library comes with auto-pagination, bounding box chunking, retry/backoff, pandas/geopandas output, async support, and convenience methods to get common OSM data such as buildings, amenities, bike roads, etc.
pip install osmgeojson
pip install "osmgeojson[geo]" # pandas / geopandas / shapely support
The SDK talks to api.maplark.com by default.
Quick start
from osmgeojson import OSMGeoJSONClient
with OSMGeoJSONClient(api_key="sk-...") as client:
fc = client.query(bbox="18.06,59.32,18.09,59.34", tags=["building"])
print(len(fc.features), "buildings found")
Basic API usage
1) Create a client
from osmgeojson import OSMGeoJSONClient
client = OSMGeoJSONClient(api_key="sk-...")
You can use the client directly and close it when done, or use a context manager:
from osmgeojson import OSMGeoJSONClient
with OSMGeoJSONClient(api_key="sk-...") as client:
...
2) Query OSM elements
query() fetches a single page:
fc = client.query(
bbox="18.063,59.322,18.082,59.332",
type="way",
shape="line",
tags=["highway=cycleway"],
limit=500,
)
for feature in fc.features:
print(feature["id"], feature["geometry"]["type"], feature.tags)
Common filters:
bbox="min_lon,min_lat,max_lon,max_lat"around="lon,lat,radius_m"tags=["amenity=restaurant"](AND)or_tags=["bicycle=yes", "bicycle=designated"](OR)not_tags=["access=private"](exclude)type="node" | "way" | "relation"shape="polygon" | "line" | "all"(omit = both shapes;allalso means both)cursor(pagination; usemeta.next_cursorfrom previous page)
3) Auto-pagination
Use query_all() to fetch all pages and deduplicate by OSM feature id:
all_restaurants = client.query_all(
bbox="18.063,59.322,18.082,59.332",
tags="amenity=restaurant",
page_size=1000,
)
print(all_restaurants.meta.returned)
4) Async client
Async methods mirror the sync API (query_async, query_all_async, query_large_area_async):
import asyncio
from osmgeojson import AsyncOSMGeoJSONClient
async def main() -> None:
async with AsyncOSMGeoJSONClient(api_key="sk-...") as client:
fc = await client.query_async(
bbox="18.06,59.32,18.09,59.34",
tags=["building"],
)
print(len(fc.features))
asyncio.run(main())
5) Convenience helpers
For common datasets, use convenience methods built on top of query_all():
from osmgeojson import OSMGeoJSONClient, get_buildings, get_restaurants
with OSMGeoJSONClient(api_key="sk-...") as client:
buildings = get_buildings(client, bbox="18.063,59.322,18.082,59.332")
restaurants = get_restaurants(client, bbox="18.063,59.322,18.082,59.332")
print(len(buildings.features), len(restaurants.features))
6) Cost and usage
estimate = client.estimate_cost(
bbox="18.063,59.322,18.082,59.332",
tags=["building"],
)
print("estimated credits:", estimate.estimated_credits)
usage = client.usage()
print("Usage:", usage)
7) CLI usage
If the package is installed, the CLI is available as osmgeojson:
export MAPLARK_API_KEY="sk-..."
osmgeojson query --bbox "18.063,59.322,18.082,59.332" --tags building --type way
Example apps
The repository includes runnable example-app tests in tests/example_apps/ showing end-to-end usage patterns against real OSM data.
test_restaurant_guide.py: restaurant discovery list with names/cuisines and map coordinates.test_park_bench_finder.py: bench finder for park maps (amenity=bench).test_park_explorer.py: park browser with polygon boundaries, centroids, and area estimates.test_cycling_trails.py: unpaved cycling trail layer for MTB/gravel planning.test_city_cycling_infrastructure.py: city cycling overlay combining cycleways and bike lanes.test_lakeside_ice_cream_hunt.py: nearest ice cream shops to waterfront edges.test_pedestrian_shortest_path.py: shortest walking route via graph + Dijkstra.test_pedestrian_wavefront_bfs.py: hop-based accessibility rings via BFS.test_bike_path_dijkstra_liljeholmen_to_djurgarden.py: tiled corridor bike routing from Liljeholmen to Djurgarden.test_geometry_filters.py: zoom + area/length filters for large buildings and long roads.
Run all example apps:
pytest tests/example_apps -v
Run one example app:
pytest tests/example_apps/test_restaurant_guide.py -v
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file osmgeojson-0.2.0.tar.gz.
File metadata
- Download URL: osmgeojson-0.2.0.tar.gz
- Upload date:
- Size: 40.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5eec30e99503286156f7fd1881941b908ad2b11c4eb3883e7cdc5aef3b807758
|
|
| MD5 |
d773ae0a6d3434ce1b63cfaf6adda314
|
|
| BLAKE2b-256 |
a0b36153e13b883dbe0978e696c233677ed9c9e7a197359c4deb2629ad053b34
|
File details
Details for the file osmgeojson-0.2.0-py3-none-any.whl.
File metadata
- Download URL: osmgeojson-0.2.0-py3-none-any.whl
- Upload date:
- Size: 26.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2526b837a1ae9b6c4ec90eeff02aedfc8a9714f486dbb279d79b9d73f6f359b
|
|
| MD5 |
87693232587b790fdce388756262267d
|
|
| BLAKE2b-256 |
b1eacadcd83abcb98ed5ff1cb1a1a04df6023cf6d86570cd1ab67d765d224a6d
|