Geometrie v QGIS Python API
Programování v GIS 4
2024-10-14
Rozhraní - interface
- specifikace definice objektů, jeho atributů a metod (funkcí), ale bez konkrétních implementací (nebo pouze jejich částí)
- samotné interface objekty nelze vytvořit (protože se nejedná o kompletní objekty)
- třídy, které z nich odvozují, musí specifikovat chybějící implementace - vnitřní implementace je věcí objektu
- důvod - všechny objekty, které implementují rozhraní lze využívat zaměnitelně a lze navrhovat funkce, které pracují s rozhraními
- v Pythonu pomocí třídy
ABC
z modulu abc
Příklad
- viz skript
- v realitě mnohem komplexnější - interface třídy mohou definovat i desítky funkcí (část z nich mohou i implementovat), funkce implementující rozhraní mohou funkce přepisovat, upravovat a nadstavovat
Příklad rozhraní v QGIS
QgsMapLayer
- rozhraní pro všechny vrstvy
- funkce např.
crs()
, extent()
, legend()
, renderer()
, reload()
a celá řada dalších
- funkce jsou společné bez ohledu na typ vrstvy
- vektorové vrstvy, rastrové vrstvy, mesh vrstvy, point cloud vrstvy atd.
- všechny vrstvy implementují rozhraní
QgsMapLayer
a lze s nimi tudíž nakládat stejně
- další příklad jsou geometrie
QgsGeometry
- hlavní třída pro práci s geometrií
- obsahuje řadu funkcí (i statické)
- samotná geometrie ve třídě ale pouze odkaz na interface
QgsAbstractGeometry
- interface pro geometrie
- komplexně definovány všechny funkce, které by měla geometrie implementovat
- mnoho tříd geometrií založených na tomto interface
QgsPoint
, QgsLineString
, QgsPolygon
QgsMultiPoint
, QgsMultiLineString
, QgsMultiPolygon
QgsGeometryCollection
QgsSurface
, QgsCurve
, QgsCompoundCurve
, QgsTriangle