Python port of GeoDesk, a fast and space-efficient statial database engine for OpenStreetMap features
Reason this release was yanked:
Removed pre-release
Project description
GeoDesk for Python (Preview Release, Alpha Sept. 2023)
GeoDesk is a fast and storage-efficient geospatial database for OpenStreetMap data.
Why GeoDesk?
-
Small storage footprint — GeoDesk's GOL files are only 20% to 50% larger than the original OSM data in PBF format — that's less than a tenth of the storage consumed by a traditional SQL-based database.
-
Fast queries — typically 50 times faster than SQL.
-
Fast to get started — Converting
.osm.pbf
data to a GOL is 20 times faster than an import into an SQL database. Alternatively, download pre-made data tiles for just the regions you need and automatically assemble them into a GOL. -
Intuitive API — No need for object-relational mapping; GeoDesk queries return Python objects. Quickly discover tags, way-nodes and relation members. Get a feature's geometry, measure its length/area.
-
Proper handling of relations — (Traditional geospatial databases deal with geometric shapes and require workarounds to support this unique and powerful aspect of OSM data.)
-
Seamless integration with Shapely for advanced geometric operations, such as buffer, union, simplify, convex and concave hulls, Voronoi diagrams, and much more.
-
Modest hardware requirements — If it can run a 64-bit Python, it'll run GeoDesk.
Get Started
Download
pip install geodesk
Example Application
Find all the pubs within the city of Zurich (Switzerland) and print their names:
from geodesk import *
features = Features("example.gol", "https://data.geodesk.com/switzerland")
features.auto_load()
zurich = features("a[boundary=adminstrative][admin_level=8][name:en=Zurich]").one
pubs = features("na[amenity=pub]")
for pub in pubs.within(zurich):
print(pub.name)
More Examples
Find all movie theaters within 500 meters from a given point:
movieTheaters = features("na[amenity=cinema]").around(
meters=500, lat=47.37, lon=8.54)
Remember, OSM uses British English for its terminology.
Discover the bus routes that traverse a given street:
for route in street.parents("[route=bus]")):
print(f"- {route.ref} from {route.from} to {route.to}")
Count the number of entrances of a building:
numberOfEntrances = building.nodes("[entrance]").count
Documentation
Related Repositories
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.