Fiona diffuse des données d'entités simples vers et depuis des formats SIG tels que GeoPackage et Shapefile.
Fiona peut lire et écrire des données du monde réel à l'aide de formats SIG multicouches, de systèmes de fichiers virtuels compressés et en mémoire, à partir de fichiers sur votre disque dur ou dans le stockage cloud. Ce projet comprend des modules Python et une interface de ligne de commande (CLI).
Fiona dépend de GDAL mais est différente des propres liaisons de GDAL. Fiona est conçue pour être hautement productive et pour faciliter l'écriture de code facile à lire.
Fiona possède plusieurs modules d'extension liés à libgdal. Cela complique l'installation. Les distributions binaires (roues) contenant libgdal et ses propres dépendances sont disponibles à partir du Python Package Index et peuvent être installées à l'aide de pip.
pip install fiona
Ces roues sont principalement destinées à faciliter l'installation pour des applications simples, pas tellement pour la production. Ils ne sont pas testés pour leur compatibilité avec toutes les autres roues binaires, packages conda ou QGIS, et omettent de nombreux pilotes de format facultatifs de GDAL. Si vous avez besoin, par exemple, du support GML, vous devrez construire et installer Fiona à partir d'une distribution source. Il est possible d'installer Fiona depuis les sources en utilisant pip (version >= 22.3) et l'option --no-binary. Une installation GDAL spécifique peut être sélectionnée en définissant la variable d'environnement GDAL_CONFIG.
pip install -U pip
pip install --no-binary fiona fiona
De nombreux utilisateurs trouvent Anaconda et conda-forge un bon moyen d'installer Fiona et d'accéder à des pilotes de format plus facultatifs (comme GML).
Fiona 1.10 nécessite Python 3.8 ou supérieur et GDAL 3.4 ou supérieur.
Les fonctionnalités sont lues et écrites dans des objets Collection
de type fichier renvoyés par la fonction fiona.open()
. Les fonctionnalités sont des classes de données modélisées au format GeoJSON. Ils n'ont pas de méthodes spatiales qui leur sont propres, donc si vous souhaitez les transformer, vous aurez besoin de Shapely ou quelque chose comme ça. Voici un exemple d'utilisation de Fiona pour lire certaines entités d'un fichier de données, modifier leurs attributs géométriques à l'aide de Shapely et les écrire dans un nouveau fichier de données.
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()``.
L'interface de ligne de commande de Fiona, nommée « fio », est documentée sur docs/cli.rst. La CLI dispose d'un certain nombre de commandes différentes. Sa commande fio cat
diffuse les fonctionnalités GeoJSON à partir de n'importe quel ensemble de données.
$ fio cat --compact tests/data/coutwildrnp.shp | jq -c ' . '
{"geometry":{"coordinates":[[[-111.73527526855469,41.995094299316406],...]]}}
...
Pour plus de détails sur ce projet, veuillez consulter :