Skip to main content

Geoqueries on Firestore Database for Python

Project description

pygeoquery

PyPI package Version License

Perform geospatial queries on a Firestore database with ease.

pygeoquery allows you to retrieve documents within a certain radius of a given geographic point. It utilizes geohashes for efficient querying.

Features

  • query Firestore collections by geographic proximity.
  • efficiently filter and retrieve documents within a specified radius.
  • flexible and customizable query building.
  • utilizes geohashes for high-performance geospatial queries.

Installation

You can install the library using pip:

pip install pygeoquery

Prerequisites

Before using this library, ensure that each document in the searched Firestore collection includes a field called "geohash" containing a geohash value generated from the geographical coordinates. This geohash field is essential for the library to perform accurate geospatial queries.

Document preview

To generate geohashes, you can use Python libraries such as:

  • pygeohash: Provides functions for decoding and encoding geohashes.
  • geohashr: Just another Python geohashing library.

Usage

from firebase_admin import credentials, firestore
from geoqueries_firestore import GeoCollectionReference, GeoPointFromCallback, QueryBuilderCallback

# Initialize Firebase
cred = credentials.Certificate("path/to/your/serviceAccountKey.json")
firebase_app = firebase_admin.initialize_app(cred)
db = firestore.client()

# Create a GeoCollectionReference
geocollection = GeoCollectionReference(db.collection("your_collection"))

# Define a GeoPointFromCallback
def geopoint_from_callback(data):
    return data.get("location")  # Replace with your data structure

# Define a QueryBuilderCallback (optional)
def query_builder_callback(query):
    return query.where("property", "==", "value")  # Customize your query

# Fetch documents within a radius of a GeoPoint
center_point = GeoPoint(latitude, longitude)
radius_km = 10.0

result = geocollection.fetch_within(
    center_point,
    radius_km,
    geopoint_from_callback,
    query_builder_callback
)

# Process the retrieved documents
for document in result:
    print(document)

Acknowledgments

This project is inspired by the geoflutterfire_plus Flutter module by Kosuke Saigusa, which provides similar geospatial querying functionality for Firestore databases in the Flutter framework.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Please read CONTRIBUTING.md for details on my code of conduct, and the process for submitting pull requests to me.

Contact

If you have questions or need assistance, feel free to contact me.

Happy querying!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pygeoquery-0.1.3.tar.gz (5.0 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page