Fiona transmite dados de recursos simples de e para formatos GIS como GeoPackage e Shapefile.
Fiona pode ler e gravar dados do mundo real usando formatos GIS multicamadas, sistemas de arquivos virtuais compactados e na memória, a partir de arquivos em seu disco rígido ou armazenamento em nuvem. Este projeto inclui módulos Python e uma interface de linha de comando (CLI).
Fiona depende do GDAL, mas é diferente das próprias ligações do GDAL. Fiona foi projetada para ser altamente produtiva e facilitar a escrita de código de fácil leitura.
Fiona tem vários módulos de extensão vinculados ao libgdal. Isso complica a instalação. Distribuições binárias (rodas) contendo libgdal e suas próprias dependências estão disponíveis no Python Package Index e podem ser instaladas usando pip.
pip install fiona
Estas rodas destinam-se principalmente a facilitar a instalação para aplicações simples, não tanto para produção. Eles não são testados quanto à compatibilidade com todas as outras rodas binárias, pacotes conda ou QGIS e omitem muitos dos drivers de formato opcionais do GDAL. Se precisar, por exemplo, de suporte GML, você precisará compilar e instalar o Fiona a partir de uma distribuição fonte. É possível instalar o Fiona a partir do código-fonte usando pip (versão >= 22.3) e a opção --no-binary. Uma instalação GDAL específica pode ser selecionada definindo a variável de ambiente GDAL_CONFIG.
pip install -U pip
pip install --no-binary fiona fiona
Muitos usuários consideram o Anaconda e o conda-forge uma boa maneira de instalar o Fiona e obter acesso a drivers de formato mais opcionais (como GML).
Fiona 1.10 requer Python 3.8 ou superior e GDAL 3.4 ou superior.
Os recursos são lidos e gravados em objetos Collection
semelhantes a arquivos retornados da função fiona.open()
. Recursos são classes de dados modeladas no formato GeoJSON. Eles não possuem nenhum método espacial próprio, então se você quiser transformá-los, você precisará do Shapely ou algo parecido. Aqui está um exemplo de uso de Fiona para ler alguns recursos de um arquivo de dados, alterar seus atributos de geometria usando Shapely e gravá-los em um novo arquivo de dados.
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()``.
A interface de linha de comando de Fiona, chamada "fio", está documentada em docs/cli.rst. A CLI possui vários comandos diferentes. Seu comando fio cat
transmite recursos GeoJSON de qualquer conjunto de dados.
$ fio cat --compact tests/data/coutwildrnp.shp | jq -c ' . '
{"geometry":{"coordinates":[[[-111.73527526855469,41.995094299316406],...]]}}
...
Para mais detalhes sobre este projeto, consulte: