Skip to main content

Python library for FlatGeobuf

Project description

python-flatgeobuf

PyPI build Coverage Status

A Python library for reading FlatGeobuf. Ported from the official TypeScript implementation.

Features

  • Minimal dependencies
  • Simple API
  • Supports cloud-optimized bounding box filtering
  • Works on JupyterLite (Pyodide)

Installation

pip install flatgeobuf

Usage

Loaders

load()

import flatgeobuf as fgb

# All features
with open("example.fgb", "rb") as f:
    data = fgb.load(f)

# ...or features within a bounding box
with open("example.fgb", "rb") as f:
    data = fgb.load(f, bbox=(-26.5699, 63.1191, -12.1087, 67.0137))

print(data)
# { "type": "FeatureCollection", "features": [...] }

load_http()

import flatgeobuf as fgb

# All features
data = fgb.load_http("https://raw.githubusercontent.com/flatgeobuf/flatgeobuf/master/test/data/countries.fgb")

# ...or features within a bounding box
data = fgb.load_http(
    "https://raw.githubusercontent.com/flatgeobuf/flatgeobuf/master/test/data/countries.fgb",
    bbox=(-26.5699, 63.1191, -12.1087, 67.0137)
)

print(data)
# { "type": "FeatureCollection", "features": [...] }

load_http_async()

NOTE: At the moment, load_http_async() is not truly asynchronous.

import flatgeobuf as fgb

# All features
data = await fgb.load_http_async("https://raw.githubusercontent.com/flatgeobuf/flatgeobuf/master/test/data/countries.fgb")

# ...or features within a bounding box
data = await fgb.load_http_async(
    "https://raw.githubusercontent.com/flatgeobuf/flatgeobuf/master/test/data/countries.fgb",
    bbox=(-26.5699, 63.1191, -12.1087, 67.0137)
)

print(data)
# { "type": "FeatureCollection", "features": [...] }

Readers

Reader

import flatgeobuf as fgb

# All features
with open("example.fgb", "rb") as f:
    reader = fgb.Reader(f)
    for feature in reader:
        print(feature)
        # { "type": "Feature", "properties": {...}, "geometry": {...} }

# ...or features within a bounding box
with open("example.fgb", "rb") as f:
    reader = fgb.Reader(f, bbox=(-26.5699, 63.1191, -12.1087, 67.0137))
    for feature in reader:
        print(feature)
        # { "type": "Feature", "properties": {...}, "geometry": {...} }

HTTPReader

import flatgeobuf as fgb

# All features
reader = fgb.HTTPReader("https://raw.githubusercontent.com/flatgeobuf/flatgeobuf/master/test/data/countries.fgb")
for feature in reader:
    print(feature)
    # { "type": "Feature", "properties": {...}, "geometry": {...} }

# ...or features within a bounding box
reader = fgb.HTTPReader(
    "https://raw.githubusercontent.com/flatgeobuf/flatgeobuf/master/test/data/countries.fgb",
    bbox=(-26.5699, 63.1191, -12.1087, 67.0137)
)
for feature in reader:
    print(feature)
    # { "type": "Feature", "properties": {...}, "geometry": {...} }

HTTPReader (Async)

NOTE: At the moment, HTTPReader is not truly asynchronous.

import flatgeobuf as fgb

# All features
reader = fgb.HTTPReader("https://raw.githubusercontent.com/flatgeobuf/flatgeobuf/master/test/data/countries.fgb")
async for feature in reader:
    print(feature)
    # { "type": "Feature", "properties": {...}, "geometry": {...} }

# ...or features within a bounding box
reader = fgb.HTTPReader(
    "https://raw.githubusercontent.com/flatgeobuf/flatgeobuf/master/test/data/countries.fgb",
    bbox=(-26.5699, 63.1191, -12.1087, 67.0137)
)
async for feature in reader:
    print(feature)
    # { "type": "Feature", "properties": {...}, "geometry": {...} }

Running on JuptyerLite

1. Install flatgeobuf on JupyterLite:

%pip install flatgeobuf

# ...or
import micropip
await micropip.install("flatgeobuf")

2. Enable HTTP requests in Pyodide via pyodide_http

import pyodide_http
pyodide_http.patch_all()

3. Run as usual!

import flatgeobuf as fgb

data = fgb.load_http(
    "https://raw.githubusercontent.com/flatgeobuf/flatgeobuf/master/test/data/countries.fgb",
    bbox=(-26.5699, 63.1191, -12.1087, 67.0137)
)

print(data)
# { "type": "FeatureCollection", "features": [...] }

Roadmap

  • Read FlatGeobuf
    • Read top-level (FeatureCollection) properties
  • Write FlatGeobuf
  • Deploy JuptyerLite examples
  • Rewrite some parts in Rust? (parcked R-tree, geometry intersection)

License

MIT

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

flatgeobuf-0.3.1.tar.gz (23.5 kB view details)

Uploaded Source

Built Distribution

flatgeobuf-0.3.1-py3-none-any.whl (36.5 kB view details)

Uploaded Python 3

File details

Details for the file flatgeobuf-0.3.1.tar.gz.

File metadata

  • Download URL: flatgeobuf-0.3.1.tar.gz
  • Upload date:
  • Size: 23.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.4 Darwin/21.6.0

File hashes

Hashes for flatgeobuf-0.3.1.tar.gz
Algorithm Hash digest
SHA256 4a510f7700dbe8b3f9ba19fb26d6e34679af5e92aec1c832de1e54fc944a9261
MD5 78fed759870050c5c6dbfea8eff4e799
BLAKE2b-256 8f8b0b3b37a702fc05308d1e31355af325f04b22f835b078cb4cee87c5c75603

See more details on using hashes here.

File details

Details for the file flatgeobuf-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: flatgeobuf-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 36.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.4 Darwin/21.6.0

File hashes

Hashes for flatgeobuf-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 139ca924376e34170dbee64cd1af7cdc5072e1055c9f227c197a09f07bca9f66
MD5 549476c8bba56774d2ecbff5477131ab
BLAKE2b-256 4c2fc2a522218a050cbd849b9d3b7b2426a9e9639970f4d039cf8508a3ce3dd4

See more details on using hashes here.

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