Knihovny fiona, rasterio, shapely

Programování v GIS 2

Jan Caha

2025-03-17

Typy knihoven pro Python

  • nativní knihovny - pouze Python kód
  • kompilované knihovny - C, C++, Rust nebo i jiné jazyky
  • nativní knihovny fungují automaticky všude, kompilované je nutné sestavit pro danou platformu a verzi Pythonu

fiona, rasterio, shapely

  • kompilované knihovny
  • postavené nad GDAL/OGR (ne nad balíkem osgeo)
  • snaha aby pracovaly více jako Python knihovny a méně jako C++ kód
  • o něco měně komplikované než přímé použití GDAL/OGR skrze osgeo, o něco horší spolupráce knihoven (zejména fiona a shapely)

fiona

  • knihovna pro práci s vektorovými daty
  • odstraňuje mnoho dílčích kroků, které jsou v osgeo
  • souřadnicové systémy a transformace s knihovnou pyproj
  • api není bohaté na práci s geometrií
  • přístup např. ke struktuře vrstvy je velice jednoduchý
  • nepodporuje vše co osgeo
  • dokumentace

shapely

  • knihovna založená na GEOS
  • zpracování geometrií
  • při využití s fiona nutné konverze mezi jejich typy
  • dokumentace

Konverze geometrií

  • modul shapely.geometry
  • z fiona do shapely funkce shape(feature.geometry)
  • z shapely do fiona funkce mapping()

rasterio

  • knihovna pro práci s rastrovými daty
  • platí pro ni v podstatě to samé co pro fiona
  • výrazné propojení s numpy (knihovna pro dvou a vícerozměrné matic)
  • oproti osgeo jednodušší přístupy
  • dokumentace
  • problém s typováním - nutné hodně se opírat o dokumentaci

Souřadnicové systémy a transformace

  • klíčová operace v geoinformatice - převod dat mezi souřadnicovými systémy
  • v osgeo modul osr a třída osr.SpatialReference
  • v knihovnách fiona/rasterio knihovna pyproj
  • pyproj je pythonový binding nad knihovnou PROJ

osr - práce se souřadnicovými systémy

from osgeo import osr

srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)

srs_dst = osr.SpatialReference()
srs_dst.ImportFromEPSG(5514)

# transformační objekt
transform = osr.CoordinateTransformation(srs, srs_dst)

# transformace bodu
x, y, _ = transform.TransformPoint(50.0, 14.0)
  • pozor na pořadí souřadnic - GDAL/OGR standardně používá pořadí dle definice CRS (lat/lon pro EPSG:4326)

pyproj - moderní přístup

import pyproj

crs_src = pyproj.CRS("EPSG:4326")
crs_dst = pyproj.CRS("EPSG:5514")

# transformační objekt
transformer = pyproj.Transformer.from_crs(crs_src, crs_dst, always_xy=True)

# transformace souřadnic
x, y = transformer.transform(14.0, 50.0)
  • parametr always_xy=True zajistí pořadí souřadnic vždy jako (x, y) tj. (lon, lat)
  • bez tohoto parametru se pořadí řídí definicí CRS
  • pyproj je přehlednější a doporučený přístup pro knihovny fiona, shapely, geopandas

GDAL/OGR fiona, rasterio, shapely

  • GDAL/OGR má širší možnosti, ale práce je komplikovanější
  • knihovny jsou zjednodušené a přístupnější
  • nástroje gdal.VectorTranslate(), gdal.Warp(), gdal.Translate() atd. určitě využívat z osgeo
  • základní modifikace či zpracování dat je v 90% případů snadnější z knihoven
  • komplexní situace lze řešit přímo použítím osgeo
  • používat princip KISS (Keep it simple, stupid!) – začít s jednoduchou verzí, dokud funguje a upgradovat, posouvat dál, pouze pokud je to nutné

Dotazy?