Fiona mengalirkan data fitur sederhana ke dan dari format GIS seperti GeoPackage dan Shapefile.
Fiona dapat membaca dan menulis data dunia nyata menggunakan format GIS berlapis-lapis, sistem file virtual zip dan dalam memori, dari file di hard drive Anda atau di penyimpanan cloud. Proyek ini mencakup modul Python dan antarmuka baris perintah (CLI).
Fiona bergantung pada GDAL tetapi berbeda dengan binding GDAL sendiri. Fiona dirancang untuk menjadi sangat produktif dan memudahkan penulisan kode yang mudah dibaca.
Fiona memiliki beberapa modul ekstensi yang terhubung dengan libgdal. Ini mempersulit instalasi. Distribusi biner (roda) yang berisi libgdal dan dependensinya sendiri tersedia dari Indeks Paket Python dan dapat diinstal menggunakan pip.
pip install fiona
Roda ini terutama dimaksudkan untuk memudahkan pemasangan untuk aplikasi sederhana, bukan untuk produksi. Mereka tidak diuji kompatibilitasnya dengan semua roda biner, paket conda, atau QGIS lainnya, dan menghilangkan banyak driver format opsional GDAL. Jika Anda memerlukan, misalnya, dukungan GML, Anda perlu membangun dan menginstal Fiona dari distribusi sumber. Dimungkinkan untuk menginstal Fiona dari sumber menggunakan pip (versi >= 22.3) dan opsi --no-binary. Instalasi GDAL tertentu dapat dipilih dengan mengatur variabel lingkungan GDAL_CONFIG.
pip install -U pip
pip install --no-binary fiona fiona
Banyak pengguna menganggap Anaconda dan conda-forge sebagai cara yang baik untuk menginstal Fiona dan mendapatkan akses ke driver format yang lebih opsional (seperti GML).
Fiona 1.10 memerlukan Python 3.8 atau lebih tinggi dan GDAL 3.4 atau lebih tinggi.
Fitur dibaca dan ditulis ke objek Collection
seperti file yang dikembalikan dari fungsi fiona.open()
. Fitur adalah kelas data yang dimodelkan pada format GeoJSON. Mereka tidak memiliki metode spasial sendiri, jadi jika Anda ingin mengubahnya, Anda memerlukan Shapely atau semacamnya. Berikut adalah contoh penggunaan Fiona untuk membaca beberapa fitur dari satu file data, mengubah atribut geometrinya menggunakan Shapely, dan menulisnya ke file data baru.
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()``.
Antarmuka baris perintah Fiona, bernama "fio", didokumentasikan di docs/cli.rst. CLI memiliki sejumlah perintah berbeda. Perintah fio cat
mengalirkan fitur GeoJSON dari kumpulan data apa pun.
$ fio cat --compact tests/data/coutwildrnp.shp | jq -c ' . '
{"geometry":{"coordinates":[[[-111.73527526855469,41.995094299316406],...]]}}
...
Untuk rincian lebih lanjut tentang proyek ini, silakan lihat: