Práce s datových zdrojem

V této části si blíže popíšeme, jak otevřít a načíst vektorový soubor a jak manipulovat s jednotlivými objekty (tj. vektorovými geoprvky - features).

Datovou vrstvu otevřeme pomocí funkce open(), ta vytvoří objekt tvz. kolekce geoprvků:

import fiona

chko = fiona.open('data/chko.shp', 'r', encoding='utf-8')
print(chko)
print(chko.driver)

# doporučujeme využít více obvyklou cestu otevírání souborů pomocí příkazu
# `with`, který je schopný na konci bloku kódu soubor automaticky uzavřít
#
# with fiona.open("data/chko.shp", "r", encoding='utf-8') as chko:
#   print(chko)

Následně můžeme zjišťovat vlastnosti této kolekce geoprvků, viz dokumentace knihovny.

>>> # driver
>>> chko.driver
u'ESRI Shapefile'

>>> # souřadnicový systém
>>> chko.crs
    {u'lon_0': 24.83333333333333, u'k': 0.9999, u'ellps': u'bessel', u'y_0': 0, u'no_defs': True,
     u'proj': u'krovak', u'x_0': 0, u'units': u'm', u'alpha': 30.28813972222222, u'lat_0': 49.5}

>>> # jméno souboru
>>> chko.path
u'data/chko.shp'

>>> # jméno vrstvy
>>> chko.name
u'chko'

>>> # hraniční souřadnice
>>> chko.bounds
(-891817.1765, -1209945.3889999986, -440108.9158999994, -943075.1875)

>>> # všechna metadata pohromadě
>>> chko.meta
>>> ...
>>> ...
>>> import json # naformátovat výstup
>>> print(json.dumps(chko.meta, sort_keys=True, indent=4, separators=(',', ': ')))
{
    "crs": {
        "alpha": 30.28813972222222,
        "ellps": "bessel",
        "k": 0.9999,
        "lat_0": 49.5,
        "lon_0": 24.83333333333333,
        "no_defs": true,
        "proj": "krovak",
        "units": "m",
        "x_0": 0,
        "y_0": 0
    },
    "driver": "ESRI Shapefile",
    "schema": {
        "geometry": "Polygon",
        "properties": {
            "IUCN": "str:2",
            "KAT": "str:4",
            "KOD": "int:10",
            "NAZEV": "str:27",
            "OBJECTID": "int:10",
            "OP_TYP": "str:3",
            "PREKRYV": "int:10",
            "ROZL": "float:24.15",
            "SHAPE.AREA": "float:24.15",
            "SHAPE.LEN": "float:24.15",
            "ZMENA_G": "int:10",
            "ZMENA_T": "int:10",
            "ZONA": "str:3",
            "gml_id": "str:80"
        }
    }
}

Prvky uložené v kolekci můžeme standardním postupem iterovat a zpracovávat je prvek po prvku. Nejprve ale zjistíme jejich počet:

>>> len(chko)
5626

Souřadnicové systémy

Na pozadí Fiony se používají nástroje knihovny GDAL, proto ani práce se souřadnicovými systémy není o tolik zjednodušena, jak by možná bylo potřeba. Pokud je souřadnicový systém datové vrstvy definován pomocí kódu EPSG, je tento kód dále využit, v našem případě se jedná o EPSG:4326.

from fiona.crs import to_string
print(to_string(chko.crs))
+init=epsg:4326

Při vytvoření nového geoprvku s definicí souřadnicového systému je postupováno analogicky (zde S-JTSK, EPSG:5514):

from fiona.crs import from_epsg
from_epsg(5514)
{'init': 'epsg:5514', 'no_defs': True}

Fiona těmito funkcemi pouze mapuje jednotlivé parametry souřadnicového systému a stará se o jejich převod do textového řetězce a z textových řetězců.