Fiona et Pyogrio sont toutes deux des bibliothèques utilisées pour lire et écrire des formats de données vectorielles spatiales. Bien qu'ils partagent certaines similitudes, il existe des différences clés dans leurs approches et leurs capacités :
1. Approche
- Fiona : Fiona est une bibliothèque Python complète pour travailler avec les sources de données vectorielles OGR. Il utilise une approche avec état, dans laquelle les données sont lues ou écrites en une série de passes, ce qui permet plus de flexibilité et de contrôle sur le traitement des données. Cela le rend adapté à un large éventail de tâches, y compris les transformations de données complexes et les écritures ou ajouts incrémentiels[1].- Pyogrio : Pyogrio est une approche expérimentale qui utilise une approche vectorisée (orientée tableau) pour lire et écrire des formats de fichiers vectoriels spatiaux. Il utilise en interne une approche orientée numpy dans Cython pour lire des informations sur les sources de données et les enregistrements des couches de données spatiales. Cette approche permet des opérations d'E/S plus rapides mais peut être moins flexible que Fiona en raison de sa nature sans état, où toutes les données sont lues ou écrites en un seul passage[1].
2. Prise en charge des formats de fichiers
- Fiona : Fiona prend en charge un large éventail de formats de fichiers, notamment ESRI Shapefile, GeoPackage, GeoJSON et bien d'autres. Il s'agit d'une bibliothèque d'E/S au format spatial à usage général utilisée dans de nombreux projets de l'écosystème Python[1].- Pyogrio : Pyogrio cible spécifiquement GeoPandas pour tenter de réduire le nombre de transformations de données requises pour lire/écrire des données entre les GeoPandas GeoDataFrames et les formats de fichiers spatiaux à l'aide de Fiona. Il prend en charge les formats GeoJSON, GeoPackage et Shapefile, mais son objectif principal est les opérations d'E/S orientées GeoPandas[1][5].
3. Performances
- Fiona : Fiona est connue pour sa flexibilité et sa robustesse mais n'est peut-être pas optimisée pour les performances. Il est conçu pour gérer des transformations de données complexes et prend en charge les écritures ou ajouts incrémentiels.- Pyogrio : Pyogrio est conçu pour des opérations d'E/S plus rapides, en tirant parti d'une approche vectorisée. Cela peut entraîner des améliorations significatives des performances par rapport à Fiona, en particulier pour les grands ensembles de données[1].
4. Installation et compatibilité
- Fiona : Fiona est largement disponible et prend en charge un plus large éventail de plates-formes, y compris Windows. Il est inclus par défaut dans GeoPandas et peut être utilisé comme moteur de lecture et d’écriture de fichiers.- Pyogrio : Pyogrio est disponible sur Conda-forge pour Linux et MacOS mais pas encore sur PyPi en raison de la complexité du packaging des dépendances binaires pour Windows. Il nécessite des versions compatibles de GDAL et numpy de Conda-forge pour la prise en charge des E/S brutes et des géopandas, pygeos et leurs dépendances pour la prise en charge des E/S GeoDataFrame[1].
5. Moteur par défaut dans GeoPandas
- Fiona : Fiona est actuellement le moteur par défaut utilisé par GeoPandas pour lire et écrire des fichiers. Cependant, GeoPandas 1.0 utilisera Pyogrio comme moteur par défaut en raison de son potentiel d'accélération significative[4].En résumé, Fiona offre plus de flexibilité et de contrôle sur le traitement des données, tandis que Pyogrio est optimisé pour des opérations d'E/S plus rapides. Fiona prend en charge une gamme plus large de formats de fichiers et est plus largement disponible, mais Pyogrio est conçu spécifiquement pour les opérations d'E/S orientées GeoPandas et peut améliorer les performances.
Citations :[1] https://pypi.org/project/pyogrio/0.2.0/
[2] https://github.com/geopandas/geopandas/issues/2908
[3] https://discourse.pangeo.io/t/geopandas-bbox-and-mask-params-return-empty-dataframe-fiona-pyogrio-for-file-geodatabase/3011
[4] https://geopandas.org/en/stable/docs/reference/api/geopandas.read_file.html
[5] https://github.com/geopandas/pyogrio