Fiona streamt einfache Feature-Daten in und aus GIS-Formaten wie GeoPackage und Shapefile.
Fiona kann reale Daten mithilfe mehrschichtiger GIS-Formate, komprimierter und speicherinterner virtueller Dateisysteme aus Dateien auf Ihrer Festplatte oder im Cloud-Speicher lesen und schreiben. Dieses Projekt umfasst Python-Module und eine Befehlszeilenschnittstelle (CLI).
Fiona ist von GDAL abhängig, unterscheidet sich jedoch von den GDAL-eigenen Bindungen. Fiona ist auf hohe Produktivität ausgelegt und erleichtert das Schreiben von leicht lesbarem Code.
Fiona verfügt über mehrere Erweiterungsmodule, die mit libgdal verknüpft sind. Dies erschwert die Installation. Binärverteilungen (Räder), die libgdal und seine eigenen Abhängigkeiten enthalten, sind im Python Package Index verfügbar und können mit pip installiert werden.
pip install fiona
Diese Räder sind hauptsächlich dazu gedacht, die Installation für einfache Anwendungen zu erleichtern, nicht so sehr für die Produktion. Sie werden nicht auf Kompatibilität mit allen anderen Binärrädern, Conda-Paketen oder QGIS getestet und lassen viele der optionalen Formattreiber von GDAL weg. Wenn Sie beispielsweise GML-Unterstützung benötigen, müssen Sie Fiona aus einer Quelldistribution erstellen und installieren. Es ist möglich, Fiona aus dem Quellcode mit pip (Version >= 22.3) und der Option --no-binary zu installieren. Eine bestimmte GDAL-Installation kann durch Festlegen der Umgebungsvariablen GDAL_CONFIG ausgewählt werden.
pip install -U pip
pip install --no-binary fiona fiona
Viele Benutzer finden Anaconda und Conda-Forge eine gute Möglichkeit, Fiona zu installieren und Zugriff auf weitere optionale Formattreiber (wie GML) zu erhalten.
Fiona 1.10 erfordert Python 3.8 oder höher und GDAL 3.4 oder höher.
Features werden aus dateiähnlichen Collection
-Objekten gelesen und in diese geschrieben, die von der Funktion fiona.open()
zurückgegeben werden. Features sind Datenklassen, die dem GeoJSON-Format nachempfunden sind. Sie verfügen über keine eigenen räumlichen Methoden. Wenn Sie sie also transformieren möchten, benötigen Sie Shapely oder etwas Ähnliches. Hier ist ein Beispiel für die Verwendung von Fiona, um einige Features aus einer Datendatei zu lesen, ihre Geometrieattribute mit Shapely zu ändern und sie in eine neue Datendatei zu schreiben.
import fiona
from fiona import Feature , Geometry
from shapely . geometry import mapping , shape
# Open a file for reading. We'll call this the source.
with fiona . open (
"zip+https://github.com/Toblerity/Fiona/files/11151652/coutwildrnp.zip"
) as src :
# The file we'll write to must be initialized with a coordinate
# system, a format driver name, and a record schema. We can get
# initial values from the open source's profile property and then
# modify them as we need.
profile = src . profile
profile [ "schema" ][ "geometry" ] = "Point"
profile [ "driver" ] = "GPKG"
# Open an output file, using the same format driver and coordinate
# reference system as the source. The profile mapping fills in the
# keyword parameters of fiona.open.
with fiona . open ( "centroids.gpkg" , "w" , ** profile ) as dst :
# Process only the feature records intersecting a box.
for feat in src . filter ( bbox = ( - 107.0 , 37.0 , - 105.0 , 39.0 )):
# Get the feature's centroid.
centroid_shp = shape ( feat . geometry ). centroid
new_geom = Geometry . from_dict ( centroid_shp )
# Write the feature out.
dst . write (
Feature ( geometry = new_geom , properties = f . properties )
)
# The destination's contents are flushed to disk and the file is
# closed when its with block ends. This effectively
# executes ``dst.flush(); dst.close()``.
Fionas Befehlszeilenschnittstelle mit dem Namen „fio“ ist unter docs/cli.rst dokumentiert. Die CLI verfügt über eine Reihe verschiedener Befehle. Sein Befehl fio cat
streamt GeoJSON-Funktionen aus jedem Datensatz.
$ fio cat --compact tests/data/coutwildrnp.shp | jq -c ' . '
{"geometry":{"coordinates":[[[-111.73527526855469,41.995094299316406],...]]}}
...
Weitere Einzelheiten zu diesem Projekt finden Sie unter: