GRASS GIS / Objemná vektorová data

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

Tato stránka obsahuje poznámky k práci s objemnějšími vektorovými daty v systému GRASS GIS.

Příklad importu vrstvy buildings z OSM

V tomto případě bude importovat vrstvu 'buildings' z projektu OpenStreetMap. Data jsou ve formátu Esri Shapefile dostupná ze zip archivu poskytovaného službou http://download.geofabrik.de.

Stav ke dni 3.3.2014: polygonová vrstva obsahuje téměř 3,5 milionu polygonů

ogrinfo buildings.shp -al | grep 'Count:'
Feature Count: 3464029

Testováno na PC s 16 CPU (Intel Xeon @ 2.53GHz) a 48GB RAM. OS Debian GNU/Linux 64bit.

Import - první pokus

v.in.ogr dsn=buildings.shp

Výsledek: import končí po 30min chybou (související s alokací paměti)

Unexpected error. Aborted

Využití paměti: od 100MB až po 4.1GB

Import - druhý pokus (bez kontroly topologických chyb)

Modul v.in.ogr ve výchozím nastavení kontroluje, zda data neobsahují topologické chyby (např. překrývající se polygony). Připadné chyby se snaží sérií kroků odstranit a vytvořit topologicky korektní vektorovou mapu. Tyto kroky lze přeskočit přepínačem -c. Výsledkem potom může být vektorová mapa obsahující topologické chyby.

v.in.ogr -c dsn=buildings.shp

Import trval téměř 20min a paměťová náročnost se pohybovala od 100MB až po 3.0GB.

Výsledná vektorová mapa obsahuje 3 397 638 ploch. Výčet topologických elementů uzlů (nodes), hranic (boundaries) a centroidů (reprezentačních bodů ploch) níže.

Number of nodes: 3417948
Number of boundaries: 3464028
Number of centroids: 3464028
Number of areas: 3397638

Data obsahují topologické chyby, některé plochy nemají definovány centroidy, některé centroidy jsou duplicitní.

WARNING: Number of centroids exceeds number of areas: 3464028 > 3397638
WARNING: Number of incorrect boundaries: 88685
WARNING: Number of centroids outside area: 66349
WARNING: Number of duplicate centroids: 1495

Výsledek tedy není uspokojivý, topologická korekce dat je nutná.

Import - třetí pokus (low memory usage)

Pokud je definována proměnná prostředí GRASS_VECTOR_LOWMEM, tak systém GRASS omezí při sestavání topologie využití operační paměti na minimální míru. Snížená paměťová naročnost je vykoupena vyšší časovou náročností.

GRASS_VECTOR_LOWMEM=1 v.in.ogr dsn=buildings.shp

Import po více než 110min skončíl chybou.

Finding centroids for OGR layer <buildings>...
ERROR: G_calloc: unable to allocate 101 * 4 bytes of memory at allocation.c:81

Paměťová náročnost se pohybovala od 100MB až po 3.6GB.

Alernativní postup - import do PostGIS a vytvoření odkazu

1. Import do geodatabáze PostGIS
shp2pgsql -I -D -S buildings.shp | psql pgis_db

Import trval 2min.

2. Vytvoření linku na PostGIS tabulku jako vektorové mapy - v.external
v.external dsn=PG:dbname=pgis_db layer=buildings

Po 9min končí chybou

G_realloc: unable to allocate 40800000 bytes of memory at cindex.c:113

Další pokus:

GRASS_VECTOR_LOWMEM=1 v.external dsn=PG:dbname=pgis_db layer=buildings

Vytvoření linku trvá 17min s maximální paměťovou náročností 2.2 GB.

Kontrolu základních metadat poskytne v.info

v.info buildings
...
| Map format:      PostGIS (PostgreSQL)                                      |
| DB table:        public.buildings                                          |
| DB name:         pgis_db                                                   |
| Geometry column: geom                                                      |
| Feature type:    polygon                                                   |
| Topology:        pseudo (simple features)                                  |
|----------------------------------------------------------------------------|
|   Type of map: vector (level: 2)                                           |
|                                                                            |
|   Number of points:       0               Number of centroids:  3464029    |
|   Number of lines:        0               Number of boundaries: 3464029    |
|   Number of areas:        3464029         Number of islands:    3464029    |
...

Poznámka: Geodata jsou v PostGIS databázi uložena jako simple features. Modul v.external při vytvoření linku pro tato data vytvoří tzv. pseudo-topologii.

Poznámka k vykreslování dat

Rendrovací systém neprovádí generalizaci či zjednodušení geometrie vektorových dat. Dochází tedy k vykreslování všech geoprvků včetně všech lomových bodů.

Před vykreslením definuje region na celý rozsah vektorové mapy:

g.region vect=buildings -p
...
north:      51:03:38.934N
south:      48:32:42.08136N
west:       12:05:39.48E
east:       18:50:58.6896E

Data bude vykreslonat do souboru /tmp/buildings.png. Pro vykreslování dat použijeme Cairo ovladač.

d.mon cairo output=/tmp/buildings.png

Data v nativním formátu (v.in.ogr)

Data v PostGIS (v.external)

d.vect buildings

Vykreslení dat z geodatabáze PostGIS (jako simple features) skončilo chybou

ERROR: G_realloc: unable to allocate 48000 bytes of memory at list.c:46