VFK / Topologická správa dat

Z FreeGIS portál
Přejít na: navigace, hledání

Tento článek obsahuje popis experimentálních open source nástrojů určených pro topologickou správu prvků digitální katastrální mapy dostupných ve formátu VFK. Pro pilotní implementaci je zvolena geodatabáze PostGIS a GRASS GIS.

PostGIS Topology

PostGIS Topology je nadstavba geodatabáze PostGIS umožňující topologickou správu vektorových dat. PostGIS Topology je postaven na topologickém modelu Topology-Geometry (zkráceně Topo-Geo), který je součástí technické normy ISO 13249 SQL/MM - Part 3: Spatial.

Převod VFK do PostGIS Topology

Pilotní implementace je postavena na PostGIS datovém provideru systému GRASS verze 7. Data VFK jsou načítána pomocí integrované knihovny OGR (viz Working with external data in GRASS 7). Při nastavení výstupního formátu na PostGIS Topology, zapisuje vektorová knihovna systému GRASS data přímo do topologického formátu geodatabáze PostGIS. Více k tématu integrace PostGIS Topology v systému GRASS zde.


V příkladu uvedeném níže jsou importována do geodatabáze pgisvfk data z datového bloku PAR (parcely). Přepínač -l nástroje systému GRASS v.out.postgis zajistí převod do topologického formátu. V opačném případě by geometrie prvků digitální katastrální mapy byla zapsána jako jednoduché geoprvky (simple features).

v.out.postgis -l input=data.vfk@OGR layer=PAR dsn=PG:dbname=pgisvfk options="srid=2065"

Alternativně lze převod dat VFK do PostGIS Topology provést kombinací nástrojů systému GRASS v.external.out a v.in.ogr.

v.external.out dsn=PG:dbname=pgisvfk format=PostgreSQL options=topology=on

v.in.ogr dsn=data.vfk layer=PAR output=dkm_par

Topologická správa dat VFK

Topologická správa vektorových dat umožňuje provádět některé z dotazů bez nutnosti dalších výpočtů. V příkladě uvedeném níže budeme hledat parcely sousedící s parcelou, která má kmenové číslo 381. Kompozice je znázorněna na obrázku níže.

Vizualizace parcel digitální katastrální mapy, zvýrazněna je hranice parcely s kmenovým číslem 381

Parcela s kmenovým číslem 381 je v topologickém modelu Topo-Geo vyjádřena elementem stěny s identifikátorem 1043.

SELECT (topo).* FROM dkm_par WHERE KMENOVE_CISLO_PAR = 381;

 topology_id | layer_id |  id  | type 
-------------+----------+------+------
           1 |        1 | 1043 |    3


Dále najdeme stěny, které sdílí hrany se stěnou 1043.

SELECT right_face AS face FROM topo_dkm_par.edge WHERE left_face = 1043 UNION ALL
 SELECT left_face AS face FROM topo_dkm_par.edge WHERE right_face = 1043 ORDER BY face;

 face 
------
  253
  262
  263
 1051
 1052
 1060

Nakonec najdeme stěny, které jsou ohraničeny výše uvedenými hranami. Tyto stěny reprezentují hledané parcely.

SELECT KMENOVE_CISLO_PAR FROM dkm_par WHERE (topo).id IN
 (253, 262, 263, 1051, 1052, 1060) ORDER BY KMENOVE_CISLO_PAR;

 kmenove_cislo_par 
-------------------
               368
               380
               382
               393
               394
               395

Dotaz by ve výsledku mohl vypadat následovně:

SELECT KMENOVE_CISLO_PAR FROM dkm_par WHERE (topo).id IN
 (
  SELECT right_face AS face FROM topo_dkm_par.edge WHERE left_face =
   (
    SELECT (topo).id FROM dkm_par WHERE KMENOVE_CISLO_PAR = 381
   ) UNION ALL
  SELECT left_face AS face FROM topo_dkm_par.edge WHERE right_face = 
   (
    SELECT (topo).id FROM dkm_par WHERE KMENOVE_CISLO_PAR = 381
   )
 )
 ORDER BY KMENOVE_CISLO_PAR;