Source code for shapelib.core.handlers.flatgeobuf_handler
from pathlib import Path
from typing import Any
import fiona
import geopandas as gpd
from geopandas import GeoDataFrame
from shapelib.core.geometries.base import BaseShapes
from shapelib.core.handlers.geo_file_handler import GeoFileHandler
from shapelib.factories.registry import register_handler
[docs]
@register_handler(file_extension=".fgb")
class FlatGeobufHandler(GeoFileHandler):
driver: str = "FlatGeobuf"
extension: str = ".fgb"
def __init__(self, path: Path) -> None:
super().__init__(path)
self.validate_file()
[docs]
def validate_file(self) -> None:
try:
with fiona.open(self.path, mode="r", driver="FlatGeobuf") as src:
it = iter(src)
try:
next(it)
except StopIteration:
print(f"Warning: FlatGeobuf '{self.path.name}' contains zero features.")
except Exception as e:
raise ValueError(
f"Could not open the FlatGeobuf: {self.path.as_posix()}\n"
f"Ensure the file is valid file and not corrupted. ({e})"
) from e
[docs]
def load_data(self, **kwargs: Any) -> GeoDataFrame:
return gpd.read_file(self.path, **kwargs)
[docs]
def create_obj(self, **kwargs: Any) -> BaseShapes:
data = self.load_data(**kwargs)
return self.create_geometry_instance(data=data, driver=self.driver)