Фиона передает простые данные объектов в и из форматов ГИС, таких как GeoPackage и Shapefile.
Фиона может читать и записывать реальные данные, используя многоуровневые форматы ГИС, виртуальные файловые системы в формате ZIP и в памяти, из файлов на жестком диске или в облачном хранилище. Этот проект включает модули Python и интерфейс командной строки (CLI).
Фиона зависит от GDAL, но отличается от привязок GDAL. Fiona спроектирована так, чтобы быть высокопроизводительной и упрощать написание кода, который легко читается.
У Fiona есть несколько модулей расширения, которые связаны с libgdal. Это усложняет установку. Бинарные дистрибутивы (колеса), содержащие libgdal и его собственные зависимости, доступны в индексе пакетов Python и могут быть установлены с помощью pip.
pip install fiona
Эти колеса в основном предназначены для облегчения установки в простых приложениях, а не в производстве. Они не тестируются на совместимость со всеми другими двоичными колесами, пакетами conda или QGIS и не включают многие дополнительные драйверы формата GDAL. Если вам нужна, например, поддержка GML, вам нужно будет собрать и установить Fiona из исходного дистрибутива. Установить Fiona из исходного кода можно с помощью pip (версия >= 22.3) и опции --no-binary. Конкретную установку GDAL можно выбрать, задав переменную среды GDAL_CONFIG.
pip install -U pip
pip install --no-binary fiona fiona
Многие пользователи считают Anaconda и conda-forge хорошим способом установить Fiona и получить доступ к дополнительным драйверам формата (например, GML).
Для Фионы 1.10 требуется Python 3.8 или выше и GDAL 3.4 или выше.
Функции считываются и записываются в файловые объекты Collection
возвращаемые функцией fiona.open()
. Объекты — это классы данных, смоделированные в формате GeoJSON. У них нет собственных пространственных методов, поэтому, если вы хотите их преобразовать, вам понадобится Shapely или что-то в этом роде. Вот пример использования Fiona для чтения некоторых объектов из одного файла данных, изменения их атрибутов геометрии с помощью Shapely и записи их в новый файл данных.
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()``.
Интерфейс командной строки Фионы под названием «fio» документирован по адресу docs/cli.rst. В CLI имеется ряд различных команд. Его команда fio cat
передает функции GeoJSON из любого набора данных.
$ fio cat --compact tests/data/coutwildrnp.shp | jq -c ' . '
{"geometry":{"coordinates":[[[-111.73527526855469,41.995094299316406],...]]}}
...
Более подробную информацию об этом проекте см.: