تقوم Fiona بتدفق بيانات المعالم البسيطة من وإلى تنسيقات GIS مثل GeoPackage وShapefile.
تستطيع Fiona قراءة وكتابة بيانات العالم الحقيقي باستخدام تنسيقات GIS متعددة الطبقات، وأنظمة الملفات الافتراضية المضغوطة والموجودة في الذاكرة، من الملفات الموجودة على محرك الأقراص الثابتة لديك أو في وحدة التخزين السحابية. يتضمن هذا المشروع وحدات Python وواجهة سطر الأوامر (CLI).
تعتمد Fiona على GDAL ولكنها تختلف عن روابط GDAL الخاصة. تم تصميم Fiona لتكون عالية الإنتاجية ولتسهيل كتابة التعليمات البرمجية التي يسهل قراءتها.
لدى Fiona العديد من وحدات الامتداد التي ترتبط بـ libgdal. هذا يعقد التثبيت. التوزيعات الثنائية (العجلات) التي تحتوي على libgdal وتبعياتها الخاصة متاحة من مؤشر حزمة Python ويمكن تثبيتها باستخدام النقطة.
pip install fiona
تهدف هذه العجلات بشكل أساسي إلى تسهيل التثبيت للتطبيقات البسيطة، وليس للإنتاج. لم يتم اختبار توافقها مع جميع العجلات الثنائية الأخرى، أو حزم conda، أو QGIS، كما أنها تتجاهل العديد من برامج تشغيل التنسيق الاختيارية الخاصة بـ GDAL. إذا كنت بحاجة، على سبيل المثال، إلى دعم GML، فستحتاج إلى إنشاء Fiona وتثبيته من توزيعة مصدر. من الممكن تثبيت Fiona من المصدر باستخدام النقطة (الإصدار >= 22.3) والخيار --no-binary. يمكن تحديد تثبيت GDAL محدد عن طريق تعيين متغير البيئة GDAL_CONFIG.
pip install -U pip
pip install --no-binary fiona fiona
يجد العديد من المستخدمين أن Anaconda وconda-forge طريقة جيدة لتثبيت Fiona والوصول إلى المزيد من برامج تشغيل التنسيق الاختيارية (مثل GML).
تتطلب Fiona 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()``.
تم توثيق واجهة سطر أوامر Fiona، المسماة "fio"، على docs/cli.rst. يحتوي CLI على عدد من الأوامر المختلفة. يقوم أمر fio cat
الخاص به ببث ميزات GeoJSON من أي مجموعة بيانات.
$ fio cat --compact tests/data/coutwildrnp.shp | jq -c ' . '
{"geometry":{"coordinates":[[[-111.73527526855469,41.995094299316406],...]]}}
...
لمزيد من التفاصيل حول هذا المشروع، يرجى الاطلاع على: