Efficient spatial indexing and querying of Points of Interest using PostgreSQL and PostGIS
Project description
poiidx
poiidx is a Python library for efficient spatial indexing and querying of Points of Interest (POIs) using PostgreSQL and PostGIS. It enables you to quickly find nearby POIs, retrieve administrative boundaries, and explore geographic hierarchies based on OpenStreetMap data.
📚 Read the full documentation for detailed guides, tutorials, and API reference.
Table of Contents
Installation
pip install poiidx
Database Setup
Install PostgreSQL and PostGIS
Ubuntu/Debian:
sudo apt update
sudo apt install postgresql postgis
macOS:
brew install postgresql@16 postgis
brew services start postgresql@16
Arch Linux:
sudo pacman -S postgresql postgis
sudo -u postgres initdb -D /var/lib/postgres/data
sudo systemctl start postgresql
Create Database and User
# Create user
sudo -u postgres createuser -P poiidx_user
# Enter password when prompted
# Create database
sudo -u postgres createdb -O poiidx_user poiidx_db
# Enable PostGIS extension
sudo -u postgres psql -d poiidx_db -c "CREATE EXTENSION postgis;"
Usage
import poiidx
from shapely.geometry import Point
# Initialize the database connection
poiidx.init(
host='localhost',
database='poiidx_db',
user='poiidx_user',
password='your_secure_password',
port=5432
)
# Find nearest POIs to a point (e.g., Berlin)
berlin_point = Point(13.4050, 52.5200)
nearest_pois = poiidx.get_nearest_pois(
berlin_point,
max_distance=1000, # meters
limit=5
)
for poi in nearest_pois:
print(f"{poi['name']} - Region: {poi['region']}, Rank: {poi['rank']}")
# Get administrative hierarchy for a point
admin_hierarchy = poiidx.get_administrative_hierarchy(berlin_point)
for admin in admin_hierarchy:
print(f"Level {admin['admin_level']}: {admin['name']}")
# Get administrative hierarchy as a formatted string
admin_str = poiidx.get_administrative_hierarchy_string(berlin_point)
print(admin_str)
# Get administrative hierarchy in a specific language (e.g., French)
admin_str_fr = poiidx.get_administrative_hierarchy_string(berlin_point, lang='fr')
print(admin_str_fr)
# Close the connection when done
poiidx.close()
License
poiidx is distributed under the terms of the MIT license.
Data Sources & Attribution
This project uses data from the following sources:
OpenStreetMap (via Geofabrik)
POI and administrative boundary data is sourced from OpenStreetMap, distributed via Geofabrik.
© OpenStreetMap contributors. Data available under the Open Database License (ODbL).
Wikidata
When country information is not available in OpenStreetMap data, it is supplemented using Wikidata.
© Wikidata contributors. Data available under CC0 1.0 Universal (CC0 1.0) Public Domain Dedication.
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 poiidx-0.0.8.tar.gz.
File metadata
- Download URL: poiidx-0.0.8.tar.gz
- Upload date:
- Size: 36.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
612e1bd12fc0abc2d5160f9ea9165568f8ab16a2d22f12e0efd2ce8d2614d618
|
|
| MD5 |
fc109c6dba55ef76c3315e844e444bcf
|
|
| BLAKE2b-256 |
f98a325b5ee0792a4c0e131d384aadc84ac04046c9238cab7d94427d3a1513ea
|
Provenance
The following attestation bundles were made for poiidx-0.0.8.tar.gz:
Publisher:
release.yml on bytehexe/poiidx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
poiidx-0.0.8.tar.gz -
Subject digest:
612e1bd12fc0abc2d5160f9ea9165568f8ab16a2d22f12e0efd2ce8d2614d618 - Sigstore transparency entry: 780386172
- Sigstore integration time:
-
Permalink:
bytehexe/poiidx@db391591adbbd935bee2ea944579ce29ef241f6c -
Branch / Tag:
refs/tags/0.0.8 - Owner: https://github.com/bytehexe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@db391591adbbd935bee2ea944579ce29ef241f6c -
Trigger Event:
push
-
Statement type:
File details
Details for the file poiidx-0.0.8-py3-none-any.whl.
File metadata
- Download URL: poiidx-0.0.8-py3-none-any.whl
- Upload date:
- Size: 24.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46754726920337bb5f9c604d1d331cac092fe5a1f0e70d45ba2d8cc8cfeba796
|
|
| MD5 |
a5b66731b54ed97c742cffce5d368415
|
|
| BLAKE2b-256 |
24c0d1c6fad806d676342f1d76125f379c7b3df7d2083318bca8883111e6291b
|
Provenance
The following attestation bundles were made for poiidx-0.0.8-py3-none-any.whl:
Publisher:
release.yml on bytehexe/poiidx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
poiidx-0.0.8-py3-none-any.whl -
Subject digest:
46754726920337bb5f9c604d1d331cac092fe5a1f0e70d45ba2d8cc8cfeba796 - Sigstore transparency entry: 780386178
- Sigstore integration time:
-
Permalink:
bytehexe/poiidx@db391591adbbd935bee2ea944579ce29ef241f6c -
Branch / Tag:
refs/tags/0.0.8 - Owner: https://github.com/bytehexe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@db391591adbbd935bee2ea944579ce29ef241f6c -
Trigger Event:
push
-
Statement type: